首页
社区
课程
招聘
[旧帖] [原创]手脱ASProtect 1.23RC4 补回OEP头 0.00雪花
发表于: 2010-5-7 18:41 3314

[旧帖] [原创]手脱ASProtect 1.23RC4 补回OEP头 0.00雪花

2010-5-7 18:41
3314

ASProtect 1.23RC4  是ASProtect发展的一个重要里程碑,而且是经常偷代码的其中一个壳,现在对他进行脱壳,补充OEP头。
菜鸟第一贴,请各大虾把不对的地方指出,本人水平有限,表达能力有限,望谅解。好,现在开现:
1、首先在选项设置一下,隐藏一下OD,采用最后一次异常法去脱

2、SHIFT+F9运行
(第17次跑飞,第16次为最后一次异常,重裁)
其实对这个壳不数次数也可以,当出现如下特征码,即证明为最后一次异常
je
。。。。
。。。。
CALL
。。。。
。。。。
je
。。。。
。。。。
retn     

3、在RETN外F2下断,SHIFT+F9运行到此,F2取消断点

4、此时观察堆栈窗口,用数值为00400000下面的第二个地址下硬件断点
HR 0012FF30

5、下好断点后,SHIFT+F9运行,断在下面地方,之后F8单步走

6、来到papad后跟一个jmp时,改用F7单步进去

7、跳到下面地址,此时开始追踪被偷代码

F7继续单步走

来到此处发现第一外被偷代码
第一处被偷代码找到
021068DD    896C24 00            mov dword ptr ss:[esp],ebp
021068E1    8BEC                 mov ebp,esp
021068E3    6A FF                push -1
021068E5    68 E0984000          push 4098E0
021068EA    68 AC664000          push 4066AC                        ; jmp 到
021068EF    64:A1 00000000       mov eax,dword ptr fs:[0]
记录下来,继续F7走

第二处被偷代码找到
0210691D    894424 00            mov dword ptr ss:[esp],eax
02106921    64:8925 00000000     mov dword ptr fs:[0],esp
02106928    83EC 68              sub esp,68
记录下来,继续F7走

第三处被偷代码找到
02106953    895C24 00            mov dword ptr ss:[esp],ebx
记录下来,继续F7走

第四处被偷代码找到
0210697F    897424 00            mov dword ptr ss:[esp],esi
记录下来,继续F7走

第五处被偷代码找到
021069AB    897C24 00            mov dword ptr ss:[esp],edi
021069AF    8965 E8              mov dword ptr ss:[ebp-18],esp
021069B2    33DB                 xor ebx,ebx
021069B4    895D FC              mov dword ptr ss:[ebp-4],ebx
021069B7    6A 02                push 2
记录下来,继续F7走

此时被偷代码全部找到,F8走

此处跳去OEP

到达OEP

7、开始补回OEP头
记录下来的被偷代码如下:
第一处被偷代码
021068DD    896C24 00            mov dword ptr ss:[esp],ebp
021068E1    8BEC                 mov ebp,esp
021068E3    6A FF                push -1
021068E5    68 E0984000          push 4098E0
021068EA    68 AC664000          push 4066AC                        ; jmp 到
021068EF    64:A1 00000000       mov eax,dword ptr fs:[0]
第二处被偷代码
0210691D    894424 00            mov dword ptr ss:[esp],eax
02106921    64:8925 00000000     mov dword ptr fs:[0],esp
02106928    83EC 68              sub esp,68
第三处被偷代码
02106953    895C24 00            mov dword ptr ss:[esp],ebx
第四处被偷代码
0210697F    897424 00            mov dword ptr ss:[esp],esi
第五处被偷代码
021069AB    897C24 00            mov dword ptr ss:[esp],edi
021069AF    8965 E8              mov dword ptr ss:[ebp-18],esp
021069B2    33DB                 xor ebx,ebx
021069B4    895D FC              mov dword ptr ss:[ebp-4],ebx
021069B7    6A 02                push 2
对代码处理一下:
每一处第一个代码命令改为PUSH,修改后为:
Push ebp
mov ebp,esp
push -1
push 4098E0
push 4066AC
mov eax,dword ptr fs:[0]
Push eax
mov dword ptr fs:[0],esp
sub esp,68
Push ebx
Push esi
Push edi
mov dword ptr ss:[ebp-18],esp
xor ebx,ebx
mov dword ptr ss:[ebp-4],ebx
push 2
此时开始修复OEP

选定上面一段JMP以下的空代码NOP掉


回补刚才记录下来的代码

回补完成后在PUSH ebp处新建EIP

此时OEP完全修复完成,脱壳。脱壳就不说了。

附上原程序:
Mp3Cutter.rar


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
正需要这个教程,谢谢楼主提供
2010-5-10 10:53
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习,多谢分享
2010-5-10 11:23
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习学习
2010-5-10 11:31
0
雪    币: 1222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习一下
2010-5-23 16:14
0
雪    币: 105
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习了,谢谢楼主分享
2010-5-23 16:16
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
roa
7
学习一下,不错。
2010-5-24 01:03
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
请问下,最后修补偷取代码的地方时如何辨认的,为什么可以再此处填充?

假如是对比的方法,两个同语言不同类型的软件的OEP是不是一样的?

实践简单,原理难。
2010-5-24 01:22
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
很详细,学习一下
2010-5-24 07:04
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主很用心,呵呵,我也跟着学习一下
2010-5-24 07:40
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习学习~~~~~~~~~
2010-5-24 08:51
0
雪    币: 457
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
新发现,楼主所被偷代码都有一特点,都是mov dword ptr ss:[esp],XXX
来到此处发现第一外被偷代码
第一处被偷代码找到
021068DD    896C24 00            mov dword ptr ss:[esp],ebp
021068E1    8BEC                 mov ebp,esp
021068E3    6A FF                push -1
021068E5    68 E0984000          push 4098E0
021068EA    68 AC664000          push 4066AC                        ; jmp 到
021068EF    64:A1 00000000       mov eax,dword ptr fs:[0]

第二处被偷代码找到
0210691D    894424 00            mov dword ptr ss:[esp],eax
02106921    64:8925 00000000     mov dword ptr fs:[0],esp
02106928    83EC 68              sub esp,68

第三处被偷代码找到
02106953    895C24 00            mov dword ptr ss:[esp],ebx

第四处被偷代码找到
0210697F    897424 00            mov dword ptr ss:[esp],esi

第五处被偷代码找到
021069AB    897C24 00            mov dword ptr ss:[esp],edi
021069AF    8965 E8              mov dword ptr ss:[ebp-18],esp
021069B2    33DB                 xor ebx,ebx
021069B4    895D FC              mov dword ptr ss:[ebp-4],ebx
021069B7    6A 02                push 2

学习了。。。谢谢!
2010-5-24 09:01
0
雪    币: 173
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习了~~~
2010-5-24 09:09
0
雪    币: 457
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
小弟知识浅薄,斗胆为楼主补充一下,请大牛修正
补充:修改后的这段代码在程序入口的下一址中插入,再重新在这段代码开头定义新EIP

对代码处理一下:
每一处第一个代码命令改为PUSH,修改后为:
Push ebp
mov ebp,esp
push -1
push 4098E0
push 4066AC
mov eax,dword ptr fs:[0]
Push eax
mov dword ptr fs:[0],esp
sub esp,68
Push ebx
Push esi
Push edi
mov dword ptr ss:[ebp-18],esp
xor ebx,ebx
mov dword ptr ss:[ebp-4],ebx
push 2
此时开始修复OEP
2010-5-24 09:30
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
很不错,学习了
2010-5-26 18:13
0
游客
登录 | 注册 方可回帖
返回
//