首页
社区
课程
招聘
[旧帖] [原创]两次内存断点法、ESP定律手脱ASPack 2.12加壳[求邀请码][邀请码已发]] 0.00雪花
发表于: 2011-10-18 17:44 2278

[旧帖] [原创]两次内存断点法、ESP定律手脱ASPack 2.12加壳[求邀请码][邀请码已发]] 0.00雪花

2011-10-18 17:44
2278
【文章标题】:两次内存断点法、ESP定律手脱ASPack 2.12加壳
【目标名称】: UltraISO.exe(比较好用的一个光驱软件)
【文件下载】: http://www.onlinedown.net/soft/614.htm
【软件加密】: ASPack 2.12 -> Alexey Solodovnikov
【作者声明】: 只是兴趣使然,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】: WinXP、Ollydbg、PEiD、LordPE、ImportREC
【菜鸟作者】: 万俟飘然

PEiD查壳
ASPack 2.12 -> Alexey Solodovnikov

Ollydbg载入:

00C04001 >  60                  pushad
00C04002    E8 03000000         call UltraISO.00C0400A
00C04007  - E9 EB045D45         jmp 461D44F7
00C0400C    55                  push ebp
00C0400D    C3                  retn
00C0400E    E8 01000000         call UltraISO.00C04014
00C04013    EB 5D               jmp short UltraISO.00C04072
00C04015    BB EDFFFFFF         mov ebx,-13
00C0401A    03DD                add ebx,ebp
00C0401C    81EB 00408000       sub ebx,UltraISO.00804000
00C04022    83BD 22040000 00    cmp dword ptr ss:[ebp+422],0
00C04029    899D 22040000       mov dword ptr ss:[ebp+422],ebx
00C0402F    0F85 65030000       jnz UltraISO.00C0439A
00C04035    8D85 2E040000       lea eax,dword ptr ss:[ebp+42E]
00C0403B    50                  push eax

方法一:ESP定律法

1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。

ESP 0012FFA4  //数据变红

2. 右键—>数据窗口跟随

0012FFA4  7C930208  ntdll.7C930208

3.选中上面的地址,断点--->硬件访--->WORD断点。

4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。

00C043B0   /75 08               jnz short UltraISO.00C043BA
00C043B2   |B8 01000000         mov eax,1
00C043B7   |C2 0C00             retn 0C
00C043BA   \68 20164000         push UltraISO.00401620
00C043BF    C3                  retn                 //返回到OEP

到达OEP ,入口点特征判断是Borland C++写的程序
00401620   . /EB 10             jmp short UltraISO.00401632  //OEP(记下入口地址)
00401622   . |66:623A           bound di,dword ptr ds:[edx]
00401625   . |43                inc ebx
00401626   . |2B2B              sub ebp,dword ptr ds:[ebx]
00401628   . |48                dec eax
00401629   . |4F                dec edi
0040162A   . |4F                dec edi
0040162B   . |4B                dec ebx
0040162C   . |90                nop
0040162D   .-|E9 98C06300       jmp UltraISO.00A3D6CA
00401632   > \A1 8BC06300       mov eax,dword ptr ds:[63C08B]
00401637   .  C1E0 02           shl eax,2
0040163A   .  A3 8FC06300       mov dword ptr ds:[63C08F],eax
0040163F   .  52                push edx
00401640   .  6A 00             push 0                         ; /pModule = NULL

开始脱壳

LordPE加载本进程—> 纠正映像大小—>完全脱壳 —>保存为Unpack.exe

我们打开看看
出现错误

【修复下】
打开ImportREC找到我们的进程
OEP填00001620  [00401620-00400000(基址)] —>自动查找IAT
CF(207D)个无效函数,我们用修复等级一试试,全部失败



打开 发现没用处 全部剪切掉



修复转存文件,抓取我们刚脱壳的,修复完成

好了可以打开了,脱壳成功!

方法二:两次内存断点法

开始:
Ollydbg载入:

00C04001 >  60                  pushad
00C04002    E8 03000000         call UltraISO.00C0400A
00C04007  - E9 EB045D45         jmp 461D44F7
00C0400C    55                  push ebp
00C0400D    C3                  retn
00C0400E    E8 01000000         call UltraISO.00C04014
00C04013    EB 5D               jmp short UltraISO.00C04072
00C04015    BB EDFFFFFF         mov ebx,-13
00C0401A    03DD                add ebx,ebp
00C0401C    81EB 00408000       sub ebx,UltraISO.00804000
00C04022    83BD 22040000 00    cmp dword ptr ss:[ebp+422],0
00C04029    899D 22040000       mov dword ptr ss:[ebp+422],ebx
00C0402F    0F85 65030000       jnz UltraISO.00C0439A
00C04035    8D85 2E040000       lea eax,dword ptr ss:[ebp+42E]
00C0403B    50                  push eax

Alt+M 打开内存镜像
在 .rsrc 处F2下断 Shift+F9运行



回到程序窗口
继续Alt+M 打开内存镜像
在 .text (00401000) 处F2下断 Shift+F9运行



直接到达我们的OEP处



LordPE脱壳、ImportREC修复和方法一相同。

方法总结:
方法一:ESP定律法
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)
1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)
2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车!(或者数据窗口跟随,下硬件访问断点一样)
3.选中下断的地址,断点--->硬件访--->WORD断点。(如果是hr XXXXXXXX 就不用下断点了,hr XXXXXXXX 就是硬件访问中断)
4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。

方法二:内存镜像法(两次内存断点法)
1:用OD打开软件!
2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序!
3:按ALT+M,打开内存镜象,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE(也就是00401000处),按F2下断点!然后按SHIFT+F9(或者是在没异常情况下按F9),直接到达程序OEP!

好了就到这了,程序的算法还在研究中,下回在贴出。

总的WORD 在这 手脱ASPack 2.12加壳.rar

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 305
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵 自己顶自己一下!
2011-10-18 17:46
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
还有续帖没?
2011-10-18 19:35
0
雪    币: 305
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
应该有 不是特别有时间 在找工作!
2011-10-18 20:32
0
游客
登录 | 注册 方可回帖
返回
//