当作 crackme 处理:
1、脱壳:
1)把文件中节名 DOg0, DOg1 改成 UPX0, UPX1,再把第1节中前面的 DOg! 改为 UPX!, 就可以用 upx -d 脱掉第一层壳。
2)利用 ESP 定律脱第二层壳,到达 OEP (0x0048D491),这个时候不要用OD或LordPE脱壳,用 PETool 1.5 直接 Dump 内存,然后用2进制编辑工具打开dump出来的文件,将 OEP 由 0x000AC768 改为 0x0008D491 就完成脱壳。
2、破解:
修改的位置及数据如下:
[Shell] 纯文本查看 复制代码 C:\crack\CrackMe_2>fc /b Dumped_origin.exe Dumped_cracked.exe
正在比较文件 Dumped_origin.exe 和 DUMPED_CRACKED.EXE
00001045: E8 90
00001047: 01 90
00001048: 00 90
00001049: 00 90
0000B7F8: E8 90
0000B7F9: DD 90
0000B7FA: 59 90
0000B7FB: FF 90
0000B7FC: FF 90
0000BD64: EB 33
0000BD65: 01 C0
0000BD66: 0F 40
其中后3字节修改是 crack 算法,而前面的字节是破解防脱壳及调试(检查父进程名)的。
还有一个 tickCount 检查,没有破解。位置如下:
[Asm] 纯文本查看 复制代码 00425390 . 8B4424 0C mov eax,dword ptr ss:[esp+0xC] ; ntdll_12.7DEA9ED2
00425394 . 8B48 08 mov ecx,dword ptr ds:[eax+0x8]
00425397 . 85C9 test ecx,ecx
00425399 . 75 28 jnz short Dumped_n.004253C3
0042539B . FF15 68D34A00 call dword ptr ds:[<&KERNEL32.GetTickCount>] ; [GetTickCount
004253A1 . 8B0D 98824D00 mov ecx,dword ptr ds:[0x4D8298]
004253A7 . 03C1 add eax,ecx
004253A9 . 8BD0 mov edx,eax ; kernel32.BaseThreadInitThunk
004253AB . 50 push eax ; kernel32.BaseThreadInitThunk
004253AC . 81E2 FF000000 and edx,0xFF
004253B2 . 8D4C11 64 lea ecx,dword ptr ds:[ecx+edx+0x64]
004253B6 . 890D 98824D00 mov dword ptr ds:[0x4D8298],ecx
004253BC . E8 E1870600 call Dumped_n.0048DBA2
004253C1 . 59 pop ecx ; kernel32.7DD733CA
004253C2 . C3 retn
好象是把 add eax,ecx 改成 xor ecx, ecx 吧 ,记不清了。
3、效果展示:
以及:
4、其它:
其弹出对话框,是执行如下脚本:
[Shell] 纯文本查看 复制代码 0095D8F0 "cmd.exe /c [url=home.php?mod=space&uid=93960]@start[/url] mshta vbscript:CreateObject("Wscript.Shell").popup("再试试吧!",7,"CrackMe",64)(window.close)"
006C51E8 "cmd.exe /c @start mshta vbscript:CreateObject("Wscript.Shell").popup("注册成功!",7,"CrackMe",64)(window.close)"
在线 MD5 调用如下网址:
[Shell] 纯文本查看 复制代码 004AF28C "http://student.zjjxx.net/space/contentdisp.aspx?contentClassid=10&student=1488&contentID=80340&listp"
5、没了。
|