练手简单脱壳 Enigma Protector
 

标题:练手简单脱壳 Enigma Protector
链接:http://www.unpack.cn/viewthread.php?tid=16384
贴者:CCHLord
日期:2007-8-19 08:44

目标程序原始来源
ExeScopeV6.5(汉化修改版)  
http://bbs.cracktool.com/thread-7085-1-4.html


下载后解压更名ExeSc_CN.exe
予以分门别类整理收录
因为早先就收录过各种最终版本


由于此物与原始版本size 差距过多
估计有被加壳处理
照例检测比对一下ExeSc_CN.exe 
原来是
Enigma Protector V1.1X-V1.3X



“哼!又是左道之术!卑鄙无耻!” 
说不得姜子牙只好祭起打神鞭
祭起打神鞭嘛,算不算也是"道术"? ...
呵呵
(最近听封神说书太入迷了此处胡扯一番)


开启OD 载入ExeSc_CN.exe
首先看到来至此处

00401000 >  55              PUSH    EBP
00401001    8BEC            MOV     EBP, ESP
00401003    83C4 F0         ADD     ESP, -10
00401006    B8 00104000     MOV     EAX, ExeSc_CN.
0040100B    E8 01000000     CALL    ExeSc_CN.00401011
00401010    9A 83C4108B E55>CALL    FAR 5DE5:8B10C483                ; Far call
00401017  - E9 28661100     JMP     ExeSc_CN.00517644
0040101C    C6              ???                                      ; Unknown command
0040101D    A6              CMPS    BYTE PTR DS:[ESI], BYTE PTR ES:[>
0040101E    6F              OUTS    DX, DWORD PTR ES:[EDI]           ; I/O command
0040101F    17              POP     SS                               ; Modification of segment register
00401020    697F 2E 7EEED71>IMUL    EDI, DWORD PTR DS:[EDI+2E], 1FD7>
00401027    8A81 9A7C9D91   MOV     AL, BYTE PTR DS:[ECX+919D7C9A]
0040102D    D2E2            SHL     DL, CL
0040102F  - 79 CB           JNS     SHORT ExeSc_CN.00400FFC
00401031    625D 4B         BOUND   EBX, QWORD PTR SS:[EBP+4B]
00401034    32FA            XOR     BH, DL
00401036    4E              DEC     ESI
00401037    0F1E            ???                                      ; Unknown command
00401039    A2 5E0BAC86     MOV     BYTE PTR DS:[86AC0B5E], AL
0040103E    1F              POP     DS                               ; Modification of segment register
0040103F    E3 42           JECXZ   SHORT ExeSc_CN.00401083
00401041    0D 8460BDC3     OR      EAX, C3BD6084
00401046    45              INC     EBP
00401047    6A C5           PUSH    -3B
00401049    91              XCHG    EAX, ECX
0040104A    54              PUSH    ESP
0040104B    44              INC     ESP
0040104C    A7              CMPS    DWORD PTR DS:[ESI], DWORD PTR ES>
0040104D    95              XCHG    EAX, EBP
0040104E    8C10            MOV     WORD PTR DS:[EAX], SS
00401050    C6              ???                                      ; Unknown command
00401051    5B              POP     EBX
00401052    3F              AAS
00401053    7B C7           JPO     SHORT ExeSc_CN.0040101C
00401055  ^ 79 DD           JNS     SHORT ExeSc_CN.00401034
00401057    12C0            ADC     AL, AL
00401059    EA 1920BBF8 593>JMP     FAR 3359:F8BB2019                ; Far jump



加载能处理Enigma 脚本
经过运行后
来到此处



奇怪啊
颇有玄机喔
难道每次前置偷码不同啊
但长度是固定的总数24个码被偷



另开OD
加载原始没加壳的版本比对
观察其程序启动前置码



原始没加壳的版本

004CC7E8 >/$  55            PUSH    EBP
004CC7E9  |.  8BEC          MOV     EBP, ESP
004CC7EB  |.  83C4 E4       ADD     ESP, -1C
004CC7EE  |.  53            PUSH    EBX
004CC7EF  |.  56            PUSH    ESI
004CC7F0  |.  33C0          XOR     EAX, EAX
004CC7F2  |.  8945 E4       MOV     [LOCAL.7], EAX
004CC7F5  |.  8945 EC       MOV     [LOCAL.5], EAX
004CC7F8  |.  8945 E8       MOV     [LOCAL.6], EAX
004CC7FB  |.  B8 E0C44C00   MOV     EAX, eXeSc_CT.004CC4E0

004CC800  |.  E8 77A4F3FF   CALL    eXeSc_CT.00406C7C
004CC805  |.  8B35 54FC4C00 MOV     ESI, DWORD PTR DS:[4CFC54]       ;  eXeSc_CT.004D1D84
004CC80B  |.  33C0          XOR     EAX, EAX
004CC80D  |.  55            PUSH    EBP
004CC80E  |.  68 C4C94C00   PUSH    eXeSc_CT.004CC9C4
004CC813  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
004CC816  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
004CC819  |.  A1 FCFE4C00   MOV     EAX, DWORD PTR DS:[4CFEFC]
004CC81E  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
004CC820  |.  E8 2F58FCFF   CALL    eXeSc_CT.00492054
004CC825  |.  E8 42A8F3FF   CALL    ; [GetUserDefaultLangID
004CC82A  |.  66:25 FF03    AND     AX, 3FF
004CC82E  |.  66:83F8 11    CMP     AX, 11
004CC832  |.  A1 94FE4C00   MOV     EAX, DWORD PTR DS:[4CFE94]
004CC837  |.  0F9400        SETE    BYTE PTR DS:[EAX]
004CC83A  |.  A1 FCFE4C00   MOV     EAX, DWORD PTR DS:[4CFEFC]
004CC83F  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]

撷取出24个欲修正code

55 8BEC 83C4 E4 53 56 33C0 8945 E4 8945 EC 8945 E8 B8 E0C44C00

修正成



004CC7E8      55            PUSH    EBP
004CC7E9      8BEC          MOV     EBP, ESP
004CC7EB      83C4 E4       ADD     ESP, -1C
004CC7EE      53            PUSH    EBX
004CC7EF      56            PUSH    ESI
004CC7F0      33C0          XOR     EAX, EAX
004CC7F2      8945 E4       MOV     DWORD PTR SS:[EBP-1C], EAX
004CC7F5      8945 EC       MOV     DWORD PTR SS:[EBP-14], EAX
004CC7F8      8945 E8       MOV     DWORD PTR SS:[EBP-18], EAX
004CC7FB      B8 E0C44C00   MOV     EAX, ExeSc_CN.004CC4E0
004CC800   .  E8 77A4F3FF   CALL    ExeSc_CN.00406C7C                ;  fake oep,fix oep and dump now
004CC805   .  8B35 54FC4C00 MOV     ESI, DWORD PTR DS:[4CFC54]       ;  ExeSc_CN.004D1D84
004CC80B   .  33C0          XOR     EAX, EAX
004CC80D   .  55            PUSH    EBP
004CC80E   .  68 C4C94C00   PUSH    ExeSc_CN.004CC9C4
004CC813   .  64:FF30       PUSH    DWORD PTR FS:[EAX]
004CC816   .  64:8920       MOV     DWORD PTR FS:[EAX], ESP
004CC819   .  A1 FCFE4C00   MOV     EAX, DWORD PTR DS:[4CFEFC]
004CC81E   .  8B00          MOV     EAX, DWORD PTR DS:[EAX]
004CC820   .  E8 2F58FCFF   CALL    ExeSc_CN.00492054
004CC825   .  E8 42A8F3FF   CALL    ExeSc_CN.0040706C                ; [GetUserDefaultLangID
004CC82A   .  66:25 FF03    AND     AX, 3FF
004CC82E   .  66:83F8 11    CMP     AX, 11
004CC832   .  A1 94FE4C00   MOV     EAX, DWORD PTR DS:[4CFE94]
004CC837   .  0F9400        SETE    BYTE PTR DS:[EAX]
004CC83A   .  A1 FCFE4C00   MOV     EAX, DWORD PTR DS:[4CFEFC]
004CC83F   .  8B00          MOV     EAX, DWORD PTR DS:[EAX]
004CC841   .  BA DCC94C00   MOV     EDX, ExeSc_CN.004CC9DC           ;  ASCII "eXeScope"
004CC846   .  E8 0154FCFF   CALL    ExeSc_CN.00491C4C

紧接着开启LordPE 
将内存中的ExeSc_CN.exe 转储出来



再开启ImportREC 修正
填入正确的真实的OEP入口



并且最后LordPE 
将入口点 000CC800 修正为000CC7E8



上一篇   下一篇