标题:练手简单脱壳 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
|