加密狗破解 之 SoftDog脱壳
搞一个试炼品,插上狗狗,开OD,OK,我们继续往下看吧,载入后,OEP处是这样的
00468FAC > $60 pushad
00468FAD $55 push ebp
00468FAE .8BEC mov ebp, esp
00468FB0 .81EC 54030000 sub esp, 354
00468FB6 .53 push ebx
00468FB7 .56 push esi
00468FB8 .57 push edi
00468FB9 .C685 F4FEFFFF>mov byte ptr , 0
00468FC0 .C685 F5FEFFFF>mov byte ptr , 0
00468FC7 .C685 F6FEFFFF>mov byte ptr , 0
00468FCE .C685 F7FEFFFF>mov byte ptr , 0
00468FD5 .8DBD F8FEFFFF lea edi, dword ptr
00468FDB .33C0 xor eax, eax
00468FDD .B9 3F000000 mov ecx, 3F
00468FE2 .F3:AB rep stos dword ptr es:
00468FE4 .C685 A4FDFFFF>mov byte ptr , 0
00468FEB .C685 A5FDFFFF>mov byte ptr , 0
00468FF2 .C685 A6FDFFFF>mov byte ptr , 0
00468FF9 .C685 A7FDFFFF>mov byte ptr , 0
00469000 .8DBD A8FDFFFF lea edi, dword ptr
PEiD标志
signature = 60 55 8B EC 81 EC ?? ?? ?? ?? 53 56 57 C6 85 F4 FE FF FF 00 C6 85 F5 FE FF FF 00 C6 85 F6 FE FF FF 00 C6 85 F7 FE FF FF 00 8D BD F8 FE FF FF 33 C0 B9 3F 00 00 00 F3 AB C6 85 A4 FD FF FF 00 C6 85 A5 FD FF FF 00 C6 85 A6 FD FF FF 00 C6 85 A7 FD FF FF 00 8D BD A8 FD FF FF 33 C0 B9 3F 00 00 00 F3 AB
ep_only = true
第一层壳子,esp之
0046924D >-/FF25 08A14600 jmp dword ptr ;05MAC.00455D3F
单步走一回,来到这里
00455D3F 55 push ebp
00455D40 8BEC mov ebp, esp
00455D42 81EC EC020000 sub esp, 2EC
00455D48 53 push ebx
00455D49 56 push esi
00455D4A 57 push edi
00455D4B 56 push esi
00455D4C 57 push edi
00455D4D 52 push edx
00455D4E 51 push ecx
00455D4F 53 push ebx
00455D50 50 push eax
00455D51 833D 402B4600 00 cmp dword ptr , 0
00455D58 0F85 8B150000 jnz 004572E9
00455D5E C685 C0FEFFFF 49 mov byte ptr , 49
00455D65 C685 C1FEFFFF 73 mov byte ptr , 73
00455D6C C685 C2FEFFFF 44 mov byte ptr , 44
00455D73 C685 CAFEFFFF 50 mov byte ptr , 50
00455D7A C685 CBFEFFFF 72 mov byte ptr , 72
00455D81 C685 CCFEFFFF 65 mov byte ptr , 65
00455D88 C685 CDFEFFFF 73 mov byte ptr , 73
00455D8F C685 CEFEFFFF 65 mov byte ptr , 65
00455D96 A1 582B4600 mov eax, dword ptr
00455D9B 8985 D4FEFFFF mov dword ptr , eax
00455DA1 A1 682B4600 mov eax, dword ptr
00455DA6 8985 A4FEFFFF mov dword ptr , eax
00455DAC C785 80FEFFFF 00000000mov dword ptr , 0
如果有狗的话,可以插上加密狗,直接esp之,没有的话,需要patch一下,今天不讲,日后在说!:)
我有狗,再esp之,走一步,就是OEP了,到了OEP之后,可以发现,输入表调用被处理了,他修改了
jmp dword ptr
call dword ptr 这两种的调用
变成了
nop
jmp xxxxxxxx
nop
call xxxxxxxx
这个样子,我不会在壳解码的时候patch,所以只能写脚本,由于刚刚分析,而且最近一直忙着找工作,所以没有时间写脚本了,我讲一个大概的思路,有条件有兴趣的同学可以自己去写这个脚本。
随便找一个调用的地方, 先找jmp api的地方,我们跟入,慢慢的走啊走啊走,走到如下位置的时候,就出现了API地址了
004553DA BB E8030000 mov ebx, 3E8
004553DF 2BD2 sub edx, edx
004553E1 F7F3 div ebx
004553E3 3BC8 cmp ecx, eax
004553E5 76 13 jbe short 004553FA
004553E7 8B45 DC mov eax, dword ptr
004553EA 8945 04 mov dword ptr , eax
004553ED 5F pop edi
004553EE 5E pop esi
004553EF 5A pop edx
004553F0 59 pop ecx
004553F1 5B pop ebx
004553F2 58 pop eax
004553F3 C9 leave
004553F4 C3 retn //到这里的时候, dword ptr 就是要跳转到的api地址, esp+4是返回调用的地址
二进制搜索特征码
BB E8 03 00 00 2B D2 F7 F3 3B C8 76 13 8B 45 DC 89 45 04 5F 5E 5A 59 5B 58 C9 C3
这个数据是固定的,根据我研究发现 call 和jmp 调用都是要到这里的,所以修复的思路也就出来了。 我们先定义代码段的 开始和结束 地址,然后 搜索特征码,比如 jmp 这种的可以搜索90 EB ?? ?? ?? 00call的可以搜索 90 e8 ?? ?? ?? 00 ,这个样子,具体问题具体分析,搜索到特征码后,修改eip到jmp或者call的地方,在 retn 那里下断点,run,然后根据esp指向的api数据对搜索到的地方进行修改,脚本跑完后,再用uif工具修复一下,然后dump+fix iat 就 O 啦, 重定位表没加密,dll脱壳后改一下基址为OD里看到的就OK了。
好了,教程到此结束,谢谢收看!
ps:其实他原来的输入表根本没擦除,所以,如果把代码修复后,直接dump,然后改一下输入表段,就直接能用了,嘿嘿!点到为止,下面的不讲不讲~~~ 看不懂,不过还是顶一下。 飞过!! 有时间再慢慢学习,现在帮你顶。 不明白!!!! 保留很多呵! 看不懂,慢慢学 感觉教的很笼统…… 笼统了些. 无法真正用于实战. 虽然不能实战,因为我们也没狗呀,学习一下思路还是可以的,感谢