手動脫殼的教程(由petite v2.2加殼) (4千字)

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

雖然已經有petite v2.2的脫殼機,但我認為手動脫殼是一個cracker必須掌握的基本技能之一,有必要學習ImportREC重建IAT的技巧。
就拿embird[bcg]在論壇貼的問題做例子吧!
目標軟體:http://ftp.eware.com.cn/pub/utility/reader/RB_SetupV1.46.zip
工具:trw2000,ImportREC v1.3,衝擊波2000

一,找OEP
很簡單,用衝擊波2000可看到OEP在426F67處。

二,儲存主程式
在426F67處設斷點,中斷後下命令:“makepe c:\dump.exe”。

三,重建IAT
下命令“suspend”掛起程式。回到window,執行ImportREC,選ReadBook.exe,
輸入OEP(4526f67-40000 = 26f67),   
"IAT AutoSearch",可得到IAT,但還有一些指標未解決,點選“Get Import”,“AUTO TRACE”後,全部解決。
“fix dump”後生成dump_.exe。執行它非法操作。用trw2000跟蹤找到非法操作的地方:

017F:0044DCF4 33DB            XOR      EBX,EBX
017F:0044DCF6 385814          CMP      [EAX+14],BL
017F:0044DCF9 7409            JZ      0044DD04
017F:0044DCFB 838E14010000FF  OR      DWORD [ESI+0114],BYTE -01
017F:0044DD02 EB63            JMP      SHORT 0044DD67
017F:0044DD04 53              PUSH    EBX
017F:0044DD05 FF15FC364500    CALL    [4536FC] <----這是非法操作的地方
017F:0044DD0B 3BC3            CMP      EAX,EBX
017F:0044DD0D 7D0A            JNL      0044DD19
017F:0044DD0F 53              PUSH    EBX
017F:0044DD10 E863000000      CALL    0044DD78

檢視[4536FC]的內容發現該地址指向ole32.dll。看來ImportREC並沒有完全修復IAT,重新執行ImportREC
輸入OEP,點選"IAT AutoSearch",發現預設的RVA是:00052FFC,Size是00000394。
但是00052FFC+00000394=53390小於4536FC!原來petite 的外殼欺騙了ImportREC,使它得不到完全的IAT
那麼我們就手動輸入一個範圍給它。我把Size改為00000709,加大查詢範圍。(00000709是個經驗值,可以自己試出來)。"Get Import",“AUTO TRACE”後,還有一個指標未解決,它指向Cxxxxxxx,不太合理,而且程式也位使用它,那就隨便給它一個函式名吧(我選GetTickCount)。“fix dump”後再次生成dump_.exe。
這樣dump_.exe可以執行了。但還有暗樁:
017F:00417CE6 C6470165        MOV      BYTE [EDI+01],65
017F:00417CEA FF75F0          PUSH    DWORD [EBP-10]
017F:00417CED FF75D8          PUSH    DWORD [EBP-28]
017F:00417CF0 FF75E8          PUSH    DWORD [EBP-18]
017F:00417CF3 E8BB060000      CALL    004183B3    <-----此call是暗樁,F8進入
017F:00417CF8 83C40C          ADD      ESP,BYTE +0C
017F:00417CFB 85C0            TEST    EAX,EAX
017F:00417CFD 0F8516010000    JNZ      NEAR 00417E19
017F:00417D03 53              PUSH    EBX
017F:00417D04 53              PUSH    EBX


017F:004183B3 FF742408        PUSH    DWORD [ESP+08]
017F:004183B7 FF742408        PUSH    DWORD [ESP+08]
017F:004183BB E80CF1FFFF      CALL    004174CC  <-----,F8進入
017F:004183C0 2B442414        SUB      EAX,[ESP+14]
017F:004183C4 59              POP      ECX
017F:004183C5 59              POP      ECX
017F:004183C6 F7D8            NEG      EAX
017F:004183C8 1BC0            SBB      EAX,EAX
017F:004183CA 40              INC      EAX
017F:004183CB C3              RET   


017F:004174CC 8B4C2408        MOV      ECX,[ESP+08]  ----------+
017F:004174D0 83C8FF          OR      EAX,BYTE -01            |           
017F:004174D3 8BD1            MOV      EDX,ECX                |           
017F:004174D5 49              DEC      ECX                    |
017F:004174D6 85D2            TEST    EDX,EDX                | 
017F:004174D8 7423            JZ      004174FD                |
017F:004174DA 56              PUSH    ESI                    |
017F:004174DB 8D5101          LEA      EDX,[ECX+01]            |  典型的crc32
017F:004174DE 8B4C2408        MOV      ECX,[ESP+08]            |   
017F:004174E2 57              PUSH    EDI                    |     
017F:004174E3 0FB631          MOVZX    ESI,BYTE [ECX]          |         
017F:004174E6 0FB6F8          MOVZX    EDI,AL                  | 
017F:004174E9 33F7            XOR      ESI,EDI                | 
017F:004174EB C1E808          SHR      EAX,08                  | 
017F:004174EE 8B34B590594600  MOV      ESI,[ESI*4+00465990]    | 
017F:004174F5 33C6            XOR      EAX,ESI                |     
017F:004174F7 41              INC      ECX                    |   
017F:004174F8 4A              DEC      EDX                    |   
017F:004174F9 75E8            JNZ      004174E3 ---------------|
017F:004174FB 5F              POP      EDI
017F:004174FC 5E              POP      ESI


後面怎麼該,我就不多說了,留給大家吧!

相關文章