E-MD5 v2.0 CrackMe By LvTx[OCN]的UnPack&Crack
发表于:
2005-12-11 15:33
5301
E-MD5 v2.0 CrackMe By LvTx[OCN]的UnPack&Crack
〖作 者〗小虾
〖标 题〗E-MD5 v2.0 CrackMe By LvTx[OCN]的UnPack&Crack
〖加密方式〗ASProtect 2.1x SKE + nSpack 3.4 + Aspack 2.12-Scrambler +
nSpack 3.4 + ASPack 2.12(
这么多壳脱之前不知道呀,后来是从作者那里知道的)与MD5验效。
〖软件名字〗E-MD5 v2.0 CrackMe By LvTx[OCN]
〖下载地址〗http://ocn.e5v.com/bbs1/viewthread.php?tid=980&fpage=1
〖软件功能〗用来计算文件的MD5值
〖破解声明〗纯粹是个人兴趣,没其它意思。
〖版权声明〗本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
//
用OD载入程序,程序载入到里。首先,用插件去掉调试标志。不忽略所有异常,F9运行程序
//
当程序遇到异常后用Shift+F9忽略异常继续运行程序。
004A6001 > 60
PUSHAD
004A6002 E8 03000000
CALL E-MD5.004A600A
004A6007 - E9 EB045D45
JMP 45A764F7
004A600C 55
PUSH EBP
004A600D C3
RETN
//
大约经过25~26个异常,来到这里最后一个异常。先停下。
//
在00C7FAAB处下一个断点(注意中断程序后要将断点取消,以免后面的CRC验效出错)。
//
接着Shift+F9运行程序。
00C7FAA5 C700 EFCA5C85
MOV DWORD PTR DS :[
EAX ],855CCAEF
//
中断在这里。接着再在00C7FBF5地址处下一个断点,F9运行程序。
//
(注意中断程序后要将断点取消,以免后面的CRC验效出错)。
00C7FAAB 67:64:8F06 0000
POP DWORD PTR FS :[0]
00C7FAB1 83C4 04
ADD ESP ,4
00C7FAB4 83E8 AF
SUB EAX ,-51
00C7FAB7 83C8 4B
OR EAX ,4B
00C7FABA 58
POP EAX
00C7FABB A1 0C38C800
MOV EAX ,
DWORD PTR DS :[C8380C]
00C7FAC0 8B00
MOV EAX ,
DWORD PTR DS :[
EAX ]
00C7FAC2 8B68 1C
MOV EBP ,
DWORD PTR DS :[
EAX +1C]
00C7FAC5 A1 0C38C800
MOV EAX ,
DWORD PTR DS :[C8380C]
00C7FACA 8B00
MOV EAX ,
DWORD PTR DS :[
EAX ]
00C7FACC 8B00
MOV EAX ,
DWORD PTR DS :[
EAX ]
00C7FACE 894424 04
MOV DWORD PTR SS :[
ESP +4],
EAX
00C7FAD2 A1 0C38C800
MOV EAX ,
DWORD PTR DS :[C8380C]
00C7FAD7 8B00
MOV EAX ,
DWORD PTR DS :[
EAX ]
00C7FAD9 8D78 18
LEA EDI ,
DWORD PTR DS :[
EAX +18]
00C7FADC A1 8C37C800
MOV EAX ,
DWORD PTR DS :[C8378C]
00C7FAE1 8858 08
MOV BYTE PTR DS :[
EAX +8],
BL
00C7FAE4 833F 00
CMP DWORD PTR DS :[
EDI ],0
00C7FAE7 75 1D
JNZ SHORT 00C7FB06
00C7FAE9 83C5 20
ADD EBP ,20
00C7FAEC A1 8436C800
MOV EAX ,
DWORD PTR DS :[C83684]
00C7FAF1 8078 0A 00
CMP BYTE PTR DS :[
EAX +A],0
00C7FAF5 75 0F
JNZ SHORT 00C7FB06
00C7FAF7 B8 1F000000
MOV EAX ,1F
00C7FAFC E8 C32DFDFF
CALL 00C528C4
00C7FB01 C1E0 02
SHL EAX ,2
00C7FB04 2BE8
SUB EBP ,
EAX
00C7FB06 E8 A9D0FFFF
CALL 00C7CBB4
00C7FB0B 8BD8
MOV EBX ,
EAX
00C7FB0D 833D E4B5C800 0>
CMP DWORD PTR DS :[C8B5E4],0
00C7FB14 74 15
JE SHORT 00C7FB2B
00C7FB16 6A 04
PUSH 4
00C7FB18 B9 E4B5C800
MOV ECX ,0C8B5E4
00C7FB1D 8D4424 04
LEA EAX ,
DWORD PTR SS :[
ESP +4]
00C7FB21 BA 04000000
MOV EDX ,4
00C7FB26 E8 3944FEFF
CALL 00C63F64
00C7FB2B 833D 14B6C800 0>
CMP DWORD PTR DS :[C8B614],0
00C7FB32 74 15
JE SHORT 00C7FB49
00C7FB34 6A 0C
PUSH 0C
00C7FB36 B9 14B6C800
MOV ECX ,0C8B614
00C7FB3B 8D4424 04
LEA EAX ,
DWORD PTR SS :[
ESP +4]
00C7FB3F BA 04000000
MOV EDX ,4
00C7FB44 E8 1B44FEFF
CALL 00C63F64
00C7FB49 833F 00
CMP DWORD PTR DS :[
EDI ],0
00C7FB4C 74 08
JE SHORT 00C7FB56
00C7FB4E 8B0424
MOV EAX ,
DWORD PTR SS :[
ESP ]
00C7FB51 A3 24B6C800
MOV DWORD PTR DS :[C8B624],
EAX
00C7FB56 8B07
MOV EAX ,
DWORD PTR DS :[
EDI ]
00C7FB58 894424 08
MOV DWORD PTR SS :[
ESP +8],
EAX
00C7FB5C 896C24 10
MOV DWORD PTR SS :[
ESP +10],
EBP
00C7FB60 8B0424
MOV EAX ,
DWORD PTR SS :[
ESP ]
00C7FB63 894424 14
MOV DWORD PTR SS :[
ESP +14],
EAX
00C7FB67 A1 8C37C800
MOV EAX ,
DWORD PTR DS :[C8378C]
00C7FB6C 8818
MOV BYTE PTR DS :[
EAX ],
BL
00C7FB6E A1 B837C800
MOV EAX ,
DWORD PTR DS :[C837B8]
00C7FB73 C600 E1
MOV BYTE PTR DS :[
EAX ],0E1
00C7FB76 E8 65ECFEFF
CALL 00C6E7E0
00C7FB7B 8B15 7837C800
MOV EDX ,
DWORD PTR DS :[C83778]
00C7FB81 8802
MOV BYTE PTR DS :[
EDX ],
AL
00C7FB83 A1 0CB6C800
MOV EAX ,
DWORD PTR DS :[C8B60C]
00C7FB88 E8 7B81FFFF
CALL 00C77D08
00C7FB8D A1 7837C800
MOV EAX ,
DWORD PTR DS :[C83778]
00C7FB92 8038 00
CMP BYTE PTR DS :[
EAX ],0
00C7FB95 74 26
JE SHORT 00C7FBBD
00C7FB97 A1 5837C800
MOV EAX ,
DWORD PTR DS :[C83758]
00C7FB9C C600 EA
MOV BYTE PTR DS :[
EAX ],0EA
00C7FB9F B8 32000000
MOV EAX ,32
00C7FBA4 E8 1B2DFDFF
CALL 00C528C4
00C7FBA9 2905 20B6C800
SUB DWORD PTR DS :[C8B620],
EAX
00C7FBAF B8 64000000
MOV EAX ,64
00C7FBB4 E8 0B2DFDFF
CALL 00C528C4
00C7FBB9 014424 04
ADD DWORD PTR SS :[
ESP +4],
EAX
00C7FBBD A1 20B6C800
MOV EAX ,
DWORD PTR DS :[C8B620]
00C7FBC2 894424 0C
MOV DWORD PTR SS :[
ESP +C],
EAX
00C7FBC6 8B4424 04
MOV EAX ,
DWORD PTR SS :[
ESP +4]
00C7FBCA 894424 18
MOV DWORD PTR SS :[
ESP +18],
EAX
00C7FBCE A1 0CB6C800
MOV EAX ,
DWORD PTR DS :[C8B60C]
00C7FBD3 E8 3C30FDFF
CALL 00C52C14
00C7FBD8 A1 B837C800
MOV EAX ,
DWORD PTR DS :[C837B8]
00C7FBDD C600 E3
MOV BYTE PTR DS :[
EAX ],0E3
00C7FBE0 8D5424 08
LEA EDX ,
DWORD PTR SS :[
ESP +8]
00C7FBE4 A1 2CB6C800
MOV EAX ,
DWORD PTR DS :[C8B62C]
00C7FBE9 E8 7695FFFF
CALL 00C79164
00C7FBEE E8 3160FFFF
CALL 00C75C24
00C7FBF3 8BC6
MOV EAX ,
ESI
//
最后程序将中断在这里。这时用Alt+M打开内存镜像窗口。
//
在内存窗口中的E-MD5的code段下一个内存访问断点,F9运行程序。
00C7FBF5 E8 1A30FDFF
CALL 00C52C14
00C7FBFA E8 B5D0FFFF
CALL 00C7CCB4
00C7FBFF 83C4 2C
ADD ESP ,2C
00C7FC02 5D
POP EBP
00C7FC03 5F
POP EDI
00C7FC04 5E
POP ESI
00C7FC05 5B
POP EBX
00C7FC06 C3
RETN
//
内存访问中断在这里(呵呵,这里变成DB字节码了),不过,没关系。
//
用右键->分析->从模块删除分析就能看清这些字节码的真面目了。
0041E1A1 9C
DB 9C
0041E1A2 60
DB 60
; CHAR '`'
0041E1A3 E8
DB E8
0041E1A4 00
DB 00
0041E1A5 00
DB 00
0041E1A6 00
DB 00
//
删除模块分析后,代码将显示成这样(这样就比较好看一些了:P)。
//
可以看出,这里还有一个外壳。呵呵。。。
//OK
,我们继续脱壳。
//
用Ctrl+S键打开查找命令窗口。在窗口中输入:
popad
popfd
//
按查找命令。
0041E1A1 9C
PUSHFD
0041E1A2 60
PUSHAD
0041E1A3 E8 00000000
CALL E-MD5.0041E1A8
0041E1A8 5D
POP EBP
0041E1A9 83ED 07
SUB EBP ,7
0041E1AC 8D85 DBFEFFFF
LEA EAX ,
DWORD PTR SS :[
EBP -125]
//
找到这里。
0041E407 61
POPAD
0041E408 9D
POPFD
0041E409 B8 01000000
MOV EAX ,1
0041E40E C2 0C00
RETN 0C
0041E411 61
POPAD
0041E412 9D
POPFD
//
在这里下一个断点,F9运行程序。
0041E413 ^ E9 1954FEFF
JMP E-MD5.00403831
;套用Fly的话,这里飞向光明之巅(OEP)
//
程序的OEP,在这里可以用OD脱壳修复了。
//
不过该程序还有附加数据要修复,修复之后还有MD5之类的验效要去除才行。
//
第一步,修复尾部附加数据:首先。
//
用WinHex(用UltraEdit也可以)打开原程序,将滚动条拉到最下面,接着往上找全0的部分。
//
我这里找到的附加数据开始位置是在文件偏移的:0002BC00开始
//
从这个偏移址开始到最后的数据用WinHex写入到脱壳后的程序尾部,并保存
//
(注意,必须要先修复程序的输入表先。)
//
这样,程序尾部附加数据也修复好了,最后就是去掉程序的MD5验效了。
//
用OD加载脱壳修复后的程序。下bp 417EA6和bp 00417EFE断点。
//
接着F9运行程序。
00403831 55
PUSH EBP
00403832 8BEC
MOV EBP ,
ESP
00403834 6A FF
PUSH -1
00403836 68 F0624000
PUSH E-MD5.004062F0
0040383B 68 A44C4000
PUSH E-MD5.00404CA4
00403840 64:A1 00000000
MOV EAX ,
DWORD PTR FS :[0]
00403846 50
PUSH EAX
00403847 64:8925 0000000>
MOV DWORD PTR FS :[0],
ESP
0040384E 83EC 58
SUB ESP ,58
00403851 53
PUSH EBX
00403852 56
PUSH ESI
00403853 57
PUSH EDI
//
中断在这里。
00417EA2 50
PUSH EAX
//
将这一句修改成push eax就可以去掉这个验效。
00417EA3 FF75 F4
PUSH DWORD PTR SS :[
EBP -C]
00417EA6 E8 A4ABFFFF
CALL UNPACK_.00412A4F
;中断在这里,第一次验效,必须返回0。
00417EAB 83C4 08
ADD ESP ,8
00417EAE 83F8 00
CMP EAX ,0
00417EB1 B8 00000000
MOV EAX ,0
00417EB6 0F95C0
SETNE AL
00417EB9 8945 E0
MOV DWORD PTR SS :[
EBP -20],
EAX
//
修改成这样。
00417EA2 50
PUSH EAX
00417EA3 50
PUSH EAX
00417EA4 90
NOP
00417EA5 90
NOP
00417EA6 E8 A4ABFFFF
CALL UNPACK_.00412A4F
00417EAB 83C4 08
ADD ESP ,8
00417EAE 83F8 00
CMP EAX ,0
00417EB1 B8 00000000
MOV EAX ,0
00417EB6 0F95C0
SETNE AL
00417EB9 8945 E0
MOV DWORD PTR SS :[
EBP -20],
EAX //
和中断在这里。
00417FFA 50
PUSH EAX
//
和上面一样,修改成push eax
00417FFB FF75 F4
PUSH DWORD PTR SS :[
EBP -C]
00417FFE E8 4CAAFFFF
CALL UNPACK_.00412A4F
;中断在这里。第二次验效,这里必须返回0。
00418003 83C4 08
ADD ESP ,8
00418006 83F8 00
CMP EAX ,0
00418009 B8 00000000
MOV EAX ,0
0041800E 0F94C0
SETE AL
00418011 8945 E0
MOV DWORD PTR SS :[
EBP -20],
EAX
//
修改成这样
00417FFA 50
PUSH EAX
00417FFB 50
PUSH EAX
00417FFC 90
NOP
00417FFD 90
NOP
00417FFE E8 4CAAFFFF
CALL UNPACK_.00412A4F
00418003 83C4 08
ADD ESP ,8
00418006 83F8 00
CMP EAX ,0
00418009 B8 00000000
MOV EAX ,0
0041800E 0F94C0
SETE AL
00418011 8945 E0
MOV DWORD PTR SS :[
EBP -20],
EAX
现在程序可以正常运行了。脱壳和修复完成。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课