本帖最后由 姐又寡闻了 于 2019-6-6 22:19 编辑
声明:
1.纪录自己成长历程,与大家分享
2.由于技术与能力,如有疏漏错误,欢迎指出,高手轻喷
简述:
在学习ximo的视频教程中的第22课中留下了一个练习供学习研究,在脱壳的过程中发现多了一些变化,最后一次异常法并不是像教程里的那么顺利,搜索论坛后发现没有具体的过程,在自己的尝试下还是脱了壳。
1.发送到PEID
ASProtect 1.22 - 1.23 Beta 21 ->Alexey Solodovnikov 用PEID插件的VerA(Asprotect版本扫描器)0.15查看具体信息。Version: ASProtect 1.23 Beta 18
2.载入OD,不勾选内存访问异常,其他异常全部勾选 [Asm] 纯文本查看 复制代码 00401000 > 68 01604D00 push YTB.004D600100401005 E8 01000000 call YTB.0040100B
0040100A C3 retn
0040100B C3 retn
0040100C 42 inc edx
0040100D D9F3 fpatan
0040100F FB sti
00401010 8BA3 BF213EF1 mov esp,dword ptr ds:[ebx-0xEC1DE41]
00401016 1E push ds
00401017 35 BFBE3DFB xor eax,0xFB3DBEBF
3.最后一次异常法运行到最后一次(第17次),第18次跑飞。尝试在最近的retn处下断点(F2),shift+F9后程序跑飞。
[Asm] 纯文本查看 复制代码
7C812AEB 5E pop esi ; YTB.0047A69C
7C812AEC C9 leave
7C812AED C2 1000 retn 0x10
4.考虑用最后一次异常法运行到倒数第2次(第16次)
[Asm] 纯文本查看 复制代码 00A22AA6 3100 xor dword ptr ds:[eax],eax
00A22AA8 64:8F05 0000000>pop dword ptr fs:[0]
00A22AAF 58 pop eax
00A22AB0 833D 786DA200 0>cmp dword ptr ds:[0xA26D78],0x0
00A22AB7 74 14 je short 00A22ACD
00A22AB9 6A 0C push 0xC
00A22ABB B9 786DA200 mov ecx,0xA26D78
00A22AC0 8D45 F8 lea eax,dword ptr ss:[ebp-0x8]
00A22AC3 BA 04000000 mov edx,0x4
00A22AC8 E8 63E1FFFF call 00A20C30
00A22ACD FF75 FC push dword ptr ss:[ebp-0x4]
00A22AD0 FF75 F8 push dword ptr ss:[ebp-0x8]
00A22AD3 8B45 F4 mov eax,dword ptr ss:[ebp-0xC]
00A22AD6 8338 00 cmp dword ptr ds:[eax],0x0
00A22AD9 74 02 je short 00A22ADD
00A22ADB FF30 push dword ptr ds:[eax]
00A22ADD FF75 F0 push dword ptr ss:[ebp-0x10]
00A22AE0 FF75 EC push dword ptr ss:[ebp-0x14]
00A22AE3 C3 retn ; //运行到最近的retn处
00A22AE4 5F pop edi
5.运行到最近的retn处(F2下段,SHIFT+F9,F2取消断点) ,查看堆栈窗口地址填堆栈窗口 (程序名下的第二行)的地址,在命令行下硬件断点 hr 12FFA4。然后shift+F9运行。
[Asm] 纯文本查看 复制代码 0012FF5C 00A3313C
0012FF60 00400000 ASCII "MZP" ;// MZP下的第二行,即0012FFA4
0012FF64 FE4EB7A6
0012FF68 0012FFA4
0012FF6C 00A10000
0012FF70 009F0000
6.跳转如下,删除硬件断点,F8单步跟。
[Asm] 纯文本查看 复制代码 00A33867 - FFE0 jmp eax ; YTB.0048C760
00A33869 8BD7 mov edx,edi
00A3386B BD 8F8C2274 mov ebp,0x74228C8F
00A33870 81F5 A1BAA335 xor ebp,0x35A3BAA1
00A33876 F7D5 not ebp
00A33878 8BF5 mov esi,ebp
00A3387A BA 254F6FAB mov edx,0xAB6F4F25
00A3387F C1CA D1 ror edx,0xD1
7.来到OEP(delphi入口点特征)
[Asm] 纯文本查看 复制代码 0048C760 55 push ebp; //OEP入口
0048C761 8BEC mov ebp,esp
0048C763 83C4 F0 add esp,-0x10
0048C766 B8 90C34800 mov eax,YTB.0048C390
8.用loadPE修复镜像大小再完整转存, 打开ImportREC修复文件。打开YTB(因为接下来要用插件修复防止程序卡住),OEP输入8C760,查取IAT获取输入表后显示无效函数。先用等级1修复后还有十几个无效的指针,用AsProtect 1.22插件修复后没有无效的指针。修复。
9.运行查壳
成功运行,查壳:BorlandDelphi 6.0 - 7.0。脱壳成功。
|