声明:
只为纪录自己的脱壳历程,高手勿喷
第一种:两次内存法
注:
①这是在win7x32系统上运行的脱壳,所以可能地址不同②修复的时候用等级三修复,最后修复不了的剪切掉然后转存合一正常运行,已测试
1.载入OEP,一上来就是个达跳转,我也是醉了
004C6BD6 >^\E9 25E4FFFF jmp 第八九课.004C5000 //入口004C6BDB 0000 add byte ptr ds:[eax],al004C6BDD 006455 61 add byte ptr ss:[ebp+edx*2+0x61],ah004C6BE1 8D1E lea ebx,dword ptr ds:[esi]004C6BE3 6C ins byte ptr es:[edi],dx
2.Ait+M打开内存窗口在0047D000地址下断点,然后shift+F9运行,界面应该停在这个位置上
004C5D25 AC lods byte ptr ds:[esi] //落脚点004C5D26 0BC0 or eax,eax004C5D28 02C1 add al,cl004C5D2A 02C1 add al,cl004C5D2C 85FF test edi,edi 004C5D2E 0AC9 or cl,cl
3.接着打开内存窗口在00401000地址下断,然后shift+F9运行,直接到达OEP
0045D4F6 55 push ebp //这里就是OEP了0045D4F7 8BEC mov ebp,esp0045D4F9 6A FF push -0x10045D4FB 68 28704800 push 第八九课.004870280045D500 68 D4024600 push 第八九课.004602D40045D505 64:A1 00000000 mov eax,dword ptr fs:[0]0045D50B 50 push eax 0045D50C 64:8925 0000000>mov dword ptr fs:[0],esp0045D513 83EC 58 sub esp,0x58
4.修复脱壳
第二种:最后一次异常法
1.忽略所有异常shift+F916次,来到这个位置
004C6833 ^\73 DC jnb short 第八九课.004C6811 //入口004C6835 CD20 64678F06 vxdcall 0x68F6764004C683B 0000 add byte ptr ds:[eax],al004C683D 58 pop eax 004C683E 61 popad
2.右下角SE处理句,跟随地址004C6817,来到这个位置
004C6817 8B6424 08 mov esp,dword ptr ss:[esp+0x8] //落脚点004C681B EB 1A jmp short 第八九课.004C6837004C681D 64:67:FF36 0000 push dword ptr fs:[0]004C6823 64:67:8926 0000 mov dword ptr fs:[0],esp004C6829 9C pushfd
3.然后在004C6817位置F2,SHIFT+F9,F2
4.然后F8,58次往下跟(注意带数字的call全部F7)一直到这个位置,他是个向上跳转,在这个跳转的下一行F2,shift+F9,F2,
004C68DB ^\79 BE jns short 第八九课.004C689B //下一行F2,SHIFT+F9,F2004C68DD EB 01 jmp short 第八九课.004C68E0004C68DF 66:C1E8 DF shr ax,0xDF004C68E3 61 popad004C68E4 F9 stc
5.然后一直F8,38次就可以到达OEP
0045D4F6 55 push ebp //OEP位置0045D4F7 8BEC mov ebp,esp0045D4F9 6A FF push -0x10045D4FB 68 28704800 push 第八九课.004870280045D500 68 D4024600 push 第八九课.004602D40045D505 64:A1 00000000 mov eax,dword ptr fs:[0]0045D50B 50 push eax0045D50C 64:8925 0000000>mov dword ptr fs:[0],esp0045D513 83EC 58 sub esp,0x58
6.修复脱壳