手脱FSG 2.0 -> bart/xt

声明:

只为纪录自己的脱壳历程,高手勿喷

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了

原文地址:https://www.cnblogs.com/JianXu/p/5158408.html