EZIP1.0脫殼手記 ――娃娃/[CCG] (3千字)

看雪資料發表於2001-11-16

EZIP1.0脫殼手記
                                  Wrote by 娃娃/[CCG]


    好久沒有寫有關於脫殼的文章了 主要是最近一直在研究Keygen的編寫和密碼學  而且也沒有什麼感興趣的殼可寫
小弟功力微薄  太難的寫不出來 比如 DBPE1.5B4 或者 ASProtect1.3  太簡單的又沒有  ^_^ 今天到http://www.programmerstools.org/
溜達了一圈  亂七八糟的東西弄下來一大堆  其中就有一個這個東西 叫做EZIP 是個動態壓縮軟體 使用Generic Unpacker Win32 脫殼居
然非法操作  還以為會有點樂趣值得研究一下 沒有想到使用TRW脫殼居然出奇的簡單  :(  功夫不能白費 寫出來給一些初學者參考一
下吧  不對的地方請多多執教!

脫殼的目標就是EZIP程式本身。

用TRW載入程式 按兩下F10後來到外殼部分程式碼段:

017F:004582DC  INT3
017F:004582DD  MOV  EBP,ESP  /TRW的光條停在這裡
017F:004582DF  SUB  EBP,0428
017F:004582E5  PUSH  EBX
017F:004582E6  PUSH  ESI 
017F:004582E7  PUSH  EDI
017F:004582E8  LEA  EAX,[EBP+FFFFFC94]
017F:004582EE  PUSH  EAX
017F:004582EF  CALL  004550F0
017F:004582F4  POP  ECX
017F:004582F5  TEST  EAX,EAX
017F:004582F7  JNZ  0045868A

這個東西的殼相當簡單 比我所見過的任何殼都簡單許多 一直按F10單步跟蹤就到達了這裡:

017F:00458539  PUSH  EAX
017F:0045853A  PUSH  DWORD [EBP+FFFFFDEC]
017F:00458540  LEA  EAX,[EBP+FFFFFC3C]
017F:00458546  PUSH  EAX
017F:00458547  LEA  EAX,[EBP+FFFFFC94]
017F:0045854D  PUSH  EAX
017F:0045854E  CALL  00455005
017F:00458553  ADD  ESP,BYTE +10
017F:00458556  AND  DWORD[EBP+FFFFFC34]
017F:0045855D  JMP  SHORT 0045856C  /跳到脫殼程式碼段
017F:0045855F  MOV  EAX,[EBP+FFFFFC34]  /標誌位-EAX
017F:00458565  INC  EAX  /迴圈一次後減一
017F:00458566  MOV  [EBP+FFFFFC34],EAX  /壓入地址 EBP+FFFFFC34 中
017F:0045856C  MOV  EAX,[EBP+FFFFFBE4]  /從這裡開始程式開始進行迴圈 並在記憶體中脫殼
017F:00458572  MOVZX  EAX,WORD [EAX+06] /取值
017F:00458576  CMP  [EBP+FFFFFC34],EAX  /對比迴圈標誌
017F:0045857C  JNC  NEAR 0045861F  /跳出到45861F的話則迴圈結束
017F:00458582  MOV  EAX,[EBP+FFFFFDEC]
017F:00458588  MOV  EAX,[EAX+0C]
017F:0045858B  ADD  EAX,[EBP+FFFFFBE0]

若沒有在 0045857C 處跳出,你就會按F10跟到這裡:

017F:004585F5  LEA  EAX,[EBP+FFFFFC3C]
017F:004585FB  PUSH  EAX
017F:004585FC  LEA  EAX,[EBP+FFFFFC94]
017F:00458602  PUSH  EAX
017F:00458603  CALL  00455050
017F:00458608  ADD  ESP,BYTE +18
017F:0045860B  MOV  EAX,[EBP+FFFFFDEC]
017F:00458611  ADD  EAX,BYTE +28
017F:00458614  MOV  [EBP+FFFFFDEC],EAX
017F:0045861A  JMP  0045855F  /跳到上面繼續進行迴圈脫殼
017F:0045861F  PUSH  DWORD [EBP+FFFFFDE8]

因此我們知道了這個殼的第一個關鍵處 就是45857C  只要這個時候下 BPX XXXXXXX (45857C中JNC語句後面的地址)  然後按
一下F5 程式就會自動停到迴圈後的第一個語句處  這時按F10繼續跟蹤會很快來到這裡:

017F:00458662  POP  ECX
017F:00458663  POP  ECX
017F:00458664  MOV  EAX,[EBP+FFFFFC2C]
017F:0045866A  MOV  EAX,[EAX+10]
017F:0045866D  MOV  ECX,[EBP+FFFFFC2C]
017F:00458673  ADD  EAX,[ECX+1C]
017F:00458676  MOV  [EBP+FFFFFC38],EAX
017F:0045867C  MOV  EAX,[EBP+FFFFFC38]
017F:00458682  POP  EDI
017F:00458683  POP  ESI
017F:00458684  POP  EBX
017F:00458685  MOV  ESP,EBP
017F:00458687  POP  EBP
017F:00458688  JMP  EAX  /這個就是跳到程式的OEP的JMP
017F:0045868A  POP  EDI

從這個JMP跳出來 哦~~~  整個世界清淨了 重要找到了OEP  ^_^ 趕快下命令 MAKEPE ――――  脫殼成功  程式沒有對
輸入表加密 脫殼後可以誇平臺執行了  呵呵
脫殼後的程式370多K  看來這個東西的壓縮比還是很高的阿 



僅以此文獻給我們可愛的組織CCG,希望它能蒸蒸日上。



                                                  娃娃(NYDoll)
                                              CHiNA CrACKiNG GrOUp

相關文章