脱壳进阶篇
1.壳程序常用API下断
根据壳的原理,在壳需要的一些API处下断点(例如VirtualAlloc,VirtualFree等),然后单步若干次即可找到程序入口点。关于od下断点的方法请参考od下断方法总结。
点击打开链接
2.最后一次异常法
od->选项->调试选项->异常,把所有的√去掉
f9运行n次后程序飞,然后重新载入,f9运行n-1次,然后在右下角堆栈窗口找到注释为SE句柄处,记下该处存放的数值,然后在代码窗口按ctrl-g转到该数值,按F4运行到该位置,单步若干次即可到达入口点。
原理:当处理完之后的最后一次异常,壳将会把控制权交换给应用程序, OEP ,也就不远了。
3.利用入口点API
例如一般的Vc++6.0程序,程序入口点处会调用GetVersion函数,故而我们在命令行输入at GetVersion然后按F4运行到这儿,然后执行到返回就会到达入口点附近了。
常用关键API
VC++6.0(Visual C++ 6.0) GetVirsion
VC++7.1(Visual Studio 2003) msvcrt._set_app_type
VC++8.0(Visual Studio 2005) GetSystemTimeAsFileTime
VC++9.0(Visual Studio 2008) GetSystemTimeAsFileTime
VC++10.0(Visual Studio 2010) GetSystemTimeAsFileTime
Delphi 7 GetModuleHandleA
BC++ GetModuleHandleA
4.利用入口点代码特征码进行定位
例如VS2010代码入口点如下,则我们可以在od中查找E8????????E9????????8BEF558BEC这样的指令,当然这样做的前提是你要确定宿主程序OEP处已被解压解密。
常用各种入口点特征码
VS2010:
E8 74 04 00 00 call 00111719
E9 B3 FD FF FF jmp 0011105D
8B FF mov edi,edi
55 push ebp
8B EC mov ebp,esp
VB:
004012D4 > 68 54474000 push QQ个性网.00404754
004012D9 E8 F0FFFFFF call
004012DE 0000 add byte ptr ds:[eax],al
004012E0 0000 add byte ptr ds:[eax],al
004012E2 0000 add byte ptr ds:[eax],al
004012E4 3000 xor byte ptr ds:[eax],al
004012E6 0000 add byte ptr ds:[eax],al
004012E8 48 dec eax
delphi:
004A5C54 > 55 push ebp
004A5C55 8BEC mov ebp,esp
004A5C57 83C4 F0 add esp,-10
004A5C5A B8 EC594A00 mov eax,openpro.004A59EC
BC++:
00401678 > /EB 10 jmp short btengine.0040168A
0040167A |66:623A bound di,dword ptr ds:[edx]
0040167D |43 inc ebx
0040167E |2B2B sub ebp,dword ptr ds:[ebx]
00401680 |48 dec eax
00401681 |4F dec edi
00401682 |4F dec edi
00401683 |4B dec ebx
00401684 |90 nop
00401685 -|E9 98005400 jmp 00941722
0040168A \A1 8B005400 mov eax,dword ptr ds:[54008B]
0040168F C1E0 02 shl eax,2
00401692 A3 8F005400 mov dword ptr ds:[54008F],eax
00401697 52 push edx
00401698 6A 00 push 0
0040169A E8 99D01300 call
0040169F 8BD0 mov edx,eax
VC++:
0040A41E > 55 push ebp
0040A41F 8BEC mov ebp,esp
0040A421 6A FF push -1
0040A423 68 C8CB4000 push 跑跑排行.0040CBC8
0040A428 68 A4A54000 push
0040A42D 64:A1 00000000 mov eax,dword ptr fs:[0]
0040A433 50 push eax
0040A434 64:8925 0000000>mov dword ptr fs:[0],esp
0040A43B 83EC 68 sub esp,68
0040A43E 53 push ebx
0040A43F 56 push esi
0040A440 57 push edi
MASM(汇编):
004035C9 > 6A 00 push 0
004035CB E8 A20A0000 call
004035D0 A3 5B704000 mov dword ptr ds:[40705B],eax
004035D5 68 80000000 push 80
004035DA 68 2C754000 push 11.0040752C
004035DF FF35 5B704000 push dword ptr ds:[40705B]
004035E5 E8 820A0000 call
004035EA E8 87070000 call 11.00403D76
004035EF 6A 00 push 0
004035F1 68 0B364000 push 11.0040360B
004035F6 6A 00 push 0
004035F8 6A 64 push 64
004035FA FF35 5B704000 push dword ptr ds:[40705B]
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
