声明:
只为纪录自己的脱壳历程,高手勿喷
第一种:两次内存法
注:
①这是在win7x32系统上运行的脱壳,所以可能地址不同
②修复的时候用等级三修复,最后修复不了的剪切掉然后转存合一正常运行,已测试
1.载入OEP,一上来就是个达跳转,我也是醉了
004C6BD6 >^\E9 25E4FFFF jmp 第八九课.004C5000 //入口
004C6BDB add byte ptr ds:[eax],al
004C6BDD add byte ptr ss:[ebp+edx*+0x61],ah
004C6BE1 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,eax
004C5D28 02C1 add al,cl
004C5D2A 02C1 add al,cl
004C5D2C 85FF test edi,edi
004C5D2E 0AC9 or cl,cl
3.接着打开内存窗口在00401000地址下断,然后shift+F9运行,直接到达OEP
0045D4F6 push ebp //这里就是OEP了
0045D4F7 8BEC mov ebp,esp
0045D4F9 6A FF push -0x1
0045D4FB push 第八九课.
0045D500 D4024600 push 第八九课.004602D4
0045D505 :A1 mov eax,dword ptr fs:[]
0045D50B push eax
0045D50C : >mov dword ptr fs:[],esp
0045D513 83EC sub esp,0x58
4.修复脱壳
第二种:最后一次异常法
1.忽略所有异常shift+F916次,来到这个位置
004C6833 ^\ DC jnb short 第八九课.004C6811 //入口
004C6835 CD20 64678F06 vxdcall 0x68F6764
004C683B add byte ptr ds:[eax],al
004C683D pop eax
004C683E popad
2.右下角SE处理句,跟随地址004C6817,来到这个位置
004C6817 8B6424 mov esp,dword ptr ss:[esp+0x8] //落脚点
004C681B EB 1A jmp short 第八九课.004C6837
004C681D ::FF36 push dword ptr fs:[]
004C6823 :: mov dword ptr fs:[],esp
004C6829 9C pushfd
3.然后在004C6817位置F2,SHIFT+F9,F2
4.然后F8,58次往下跟(注意带数字的call全部F7)一直到这个位置,他是个向上跳转,在这个跳转的下一行F2,shift+F9,F2,
004C68DB ^\ BE jns short 第八九课.004C689B //下一行F2,SHIFT+F9,F2
004C68DD EB jmp short 第八九课.004C68E0
004C68DF :C1E8 DF shr ax,0xDF
004C68E3 popad
004C68E4 F9 stc
5.然后一直F8,38次就可以到达OEP
0045D4F6 push ebp //OEP位置
0045D4F7 8BEC mov ebp,esp
0045D4F9 6A FF push -0x1
0045D4FB push 第八九课.
0045D500 D4024600 push 第八九课.004602D4
0045D505 :A1 mov eax,dword ptr fs:[]
0045D50B push eax
0045D50C : >mov dword ptr fs:[],esp
0045D513 83EC sub esp,0x58
6.修复脱壳