声明:
只为纪录自己的脱壳历程,高手勿喷
1.在入口的第二行ESP定律下硬件断点然后F9运行8次(因为第9次就跑飞了)
0040955C > 60 pushad 0040955D EB 04 jmp short UnPackMe.00409563 //ESP定律F9运行8次 0040955F 625CE9 F1 bound ebx,qword ptr ds:[ecx+ebp*8-0xF] 00409563 87EB xchg ebx,ebp 00409565 EB 03 jmp short UnPackMe.0040956A 00409567 ^ E0 BB loopdne short UnPackMe.00409524
2.ESP定律后的落脚点
0040B186 51 push ecx //ESP8次的落脚点,然后F8往下跟 0040B187 87D9 xchg ecx,ebx 0040B189 40 inc eax 0040B18A 48 dec eax 0040B18B 87D9 xchg ecx,ebx 0040B18D 83C4 04 add esp,0x4 0040B190 8B6C24 24 mov ebp,dword ptr ss:[esp+0x24]
3.然后单步,注意点:
①带数字的CALL用F7跟进
②不带数字的CALL直接F8步过
③尽量使用F2,shift+F9,F2来下断运行,因为我常使用F4的时候会跑飞
路上需要注意的下断 地方一:
00400179 ^73 FA jnb short UnPackMe.00400175 //在这个跳转的下一行下断 0040017B 75 3A jnz short UnPackMe.004001B7 //这是一个向下的跳转 0040017D AA stos byte ptr es:[edi] 0040017E ^ EB E0 jmp short UnPackMe.00400160 //在下一行CALL下断点 00400180 FF53 08 call dword ptr ds:[ebx+0x8]
路上需要注意的下断 地方二:
004001CF /75 03 jnz short UnPackMe.004001D4//这个向上跳转下面下断点 004001D1 -|FF63 0C jmp dword ptr ds:[ebx+0xC] //因为这一行直接跳向OEP的 004001D4 50 push eax 004001D5 55 push ebp
4.来到OEP
00401700 55 push ebp //这里就是OEP 00401701 8BEC mov ebp,esp 00401703 6A FF push -0x1 00401705 68 00254000 push UnPackMe.00402500 0040170A 68 86184000 push UnPackMe.00401886 0040170F 64:A1 00000000 mov eax,dword ptr fs:[0] 00401715 50 push eax 00401716 64:8925 0000000>mov dword ptr fs:[0],esp 0040171D 83EC 68 sub esp,0x68
5.然后修复脱壳就OK了