먼저, 바이너리로부터 스트링을 뽑아내는 방법에 근거하여 CS****.OCX 가운데 하나인 CSUNLOCK.OCX 파일로부터 뽑아낸 문장은 이런 녀석들입니다.
ZIPFile Filespec UnZIPIndex
zi_index zi_oSize zi_cSize DUZOCX32.OCX
zi_cMethod zi_cPathType zi_crc_32 zi_DateTime zi_FileName zi_attr
GetTempPathA ShellExecuteA
strNewProductID strNewFile strNewKey strNewDestination
ExtErrorCode PropBag ItemName
UnZIPString UnZIPStringOffset UnZIPStringSize
zCSDecryptionX CSDecryptionWW csInflateW
CSUnlock.vbp ehnhihgfkhidic Kit file not found Unable to create output
directory
Insufficient temporary disk space
Could not estimate time MSIBDLPGG.EXE HG7580GHJEMC
Unable to count ZIP members
Failed to extract from ZIP file Test.Txt
하나도 도움이 안되는 이상한 문장들이라구요? 과연 그럴까요?
우리 팀에겐 한가지 궁금증이 치밀어 올랐습니다. 어플리케이션들은 모두 .CIK란 확장자로 암호화되서 묶여있는데, 일단 Winzip 7.0으로 강제로 풀어보면 어떤 일이 생길까라는 의문이었습니다.
갑자기 뜬구름잡는 소리냐구요?
위의 리스트를 보면 ZIPFile Filespec UnZIPIndex 이란 문장이 들어있었습니다.
아마도 이 문장이 나타내는 의미중 하나는 CSUNLOCK.OCX 파일은 ZIP 압축방식을 사용한다고 가정해도 좋겠지요?
우리에게는 Winzip의 Self-Extract 방법에 관련해서 풀어본 선례가 있었기 때문입니다.
Protoview사의 Active Component Suite 3 (이하 AC3)도 패스워드를 입력해야 풀리게 되어있습니다. 설치파일은 Winzip을 사용해서 만든 일종의 Self-Extract EXE 방식이었습니다.
주: Protoview사는 Sheridan사와 합쳐져 지금은 Infragistics사로 변경되었다
즉, Winzip이 없어도 실행파일을 실행시켜서 압축을 풀수 있도록 만든 방식인데, Winzip은 이런 파일은 파일헤더만 보고 바로 ZIP 포맷으로 판단하기 때문인지 Self-extract EXE 포맷도 종종 ZIP 파일포맷으로 착각하는 것 같습니다.
Winzip이 설치된 상태에서 마우스 오른쪽 버튼을 써서 설치파일인 acs3real.exe를 다른 폴더로 드래그하면 Extract to 하면서 파일의 압축이 패스워드를 묻지않고, 자동으로 풀리게 되어있는 것입니다.
원래 암호를 입력하지않으면 절대로 열리지 않아야 할 파일이 아주 싱겁게 풀려버린 것입니다.
Protoview처럼 덩치 큰 서드파티 개발사가 이런 사소한 보안 실수를 저질렀다는 것이 약간 의아스럽기도 한데, 웹 페이지에서까지 크나큰 실수를 저지릅니다. 이 내용은 다음 강좌인 "ASP 백도어"편에서 다시 소개될 겁니다.
인스톨실드 제품중 하나인 PackageFromTheWeb은 기본적으로 파일 첫머리에 STUB이 덧붙어있는 일종의 셀프 압축 해제 프로그램입니다.
Winzip 7.0은 이런 STUB 파일은 무시해버리고 ZIP 헤더를 읽어들이는 훌륭한 면모가 있습니다.
Proview와 같은 방식으로 접근해보면, Installshield express 2.1나 Wise Install같은 유명 인스톨러들은 기본적으로 같은 방식을 따른다고 보입니다. 적어도 ZIP 헤더는 스스로 제거하는 것 같습니다. 그래야 위의 사례처럼 암호를 묻지않고도 ZIP 파일이 바로 풀리게 되는 정당한 이유가 됩니다.
PKZIPFIX 유틸리티로 파일 헤더를 강제로 ZIP파일로 바꾸는 방법도 있지만, 단순히 확장자만 바꿔준다면 Winzip이 알아서 ZIP 포맷으로 만들고, 예쁘게 압축을 해제해줄거란 겁니다.
이런 경험을 발판으로 컴포넌트소스 CD의 .CIK 파일도 확장자를 .ZIP으로 바꿔주면 신기하게도 바로 .CIK 압축을 해제할수 있답니다.
자료실에 CIK 파일하나를 올려두겠습니다.
ZIP으로 확장자를 바꾸고 윈집으로 압축을 해제해보기 바랍니다.
즉, \KITS디렉토리의 0002937.CIK 파일을 00002937.ZIP으로 단지 이름만 바꾸고, WinZip으로 압축을 해제하면 됩니다.
단, 암호가 걸려있지않은 평가판의 경우만 가능합니다.
이 .CIK에 걸린 ZIP 압축에는 CSUnlock.OCX, DUZOCX32.OCX (InnerMedia DynaZip 32비트 제품)을 사용해서 암호화 알고리즘이 구성된 것으로 보입니다.
파일을 풀기위해선
xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xx
와 같은 긴 포맷을 가진 해제코드가 필요합니다.
다들 CSMAIN.MDB에서 원했던건 바로 이 해제코드일겁니다.
.CIK 파일은 CSUnlock.OCX 파일에 의해 일종의 언팩(Unpack) 작업을 하는
것이지요.
.CIK파일의 자체 압축 방식이 어떤 것인지를 모르는 상태에서는 가장 많이
사용하는 XOR 연산을 사용했을 것이란 기본적인 추측이외엔 ZIP 변형
알고리즘이나 DES같은 암호화에 대한 정보를 수집하는 것이외엔 별다른 방법이
없습니다.
.CIK와 파일사이즈
Tegosoft는 CAB파일로 셋업을 하도록 합니다. 윈도 플랫폼의 셋업프로그램에서 흔히 사용하는 CAB 압축방식은 지펜놀(ZIP'N ALL)이나 CABviewer로 들여다보고, 풀어낼수 있습니다.
어쨌든 우리는 .CIK 포맷이 단순히 .ZIP 포맷이라고 가늠해보는 것이고, Winzip 7.0으로 풀수도 있다면 이름을 .ZIP으로 바꾼 다음에 전혀 풀리지않는 파일도 있다는 사실에 부딪히게 됩니다.
일반인들은 "암호도 모르는데 어떻게 풀어"하며 포기합니다.
암호화 된 ZIP 헤더는 관점을 달리보면 정상적인 ZIP 헤더가 아닌 "깨진 ZIP 헤더"라고 보면 좋겠죠. 우리팀은 PKZIPFIX 유틸리티로 ZIP 헤더를 정상적으로 복구시켜주면 암호가 해제되지않을까하는 다소 엉뚱하지만 기발한 발상까지 도달하게 됩니다만 결과는 보기좋게 실패였습니다.
그럼 이런 패스워드 걸린 ZIP 암호화는 파일 사이즈로부터 무언가 알수는 없는가라는 질문이 있었습니다.
만약 .CIK 파일이 ZIP 압축이면 Winzip으로 압축해보면 근사치로 나타날 것입니다.
.sozni는 citpak4up.exe 이란 파일을 구해서 시험했다고 합니다.
물론 컴포넌트소스로부터 구한건 아닙니다.
98년 3월 버전의 CSMAIN.MDB 파일에 따르면 "Crescent Internet ToolPak Upgrade retail " 이란 컴포넌트 제품의 DB 내부정보는 다음과 같습니다.
Encrypted Y
CompressedSize 4974825
UncompressedSize 4985604
DiskCount 1
KitLocation D:\KITS\00001686.CIK
.CIK 압축이 아닌 WISE 인스톨러 그대로의 상태는 4985604 바이트였습니다.
위의 정보와 일치합니다.
바로 UncompressedSize 필드가 나타내는 수치랑 같습니다.
Winzip 7.0 이나 PKZIP, Turbozip으로 원본을 압축한다고 하면 "CompressedSize" 4974825 바이트에 비슷하게 도달하게됩니다.