吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 6220|回复: 10

[转载技术] 第五十一章-ASProtect v2.3.04.26脱壳-Part1

[复制链接]
Shark恒 发表于 2015-1-20 17:33 | 显示全部楼层 |阅读模式

                     第五十一章-ASProtect v2.3.04.26脱壳-Part1
从本章开始,我将会换一种讲解的方式,采用互动的方式来讲解。也可以说是引导的方式来讲解。本章我们的脱壳对象是ASProtect最新版(PS:作者当年的最新版)。本章就由我解决简单的部分,大家来完成复杂的部分,嘿嘿,给大家充分练手的机会。
这里我们的目标程序UnPackMe_ASProtect.2.3.04.26.a.exe,该目标程序并没有添加全保护。只是较为简单的一个版本。这里大家需要注意一点,如果OD加载目标程序以后,到达OEP之前就由于该壳的保护报错了的话,大家可以将其复制到别的路径下,然后重启加载试试。譬如说如下错误框:
image002.jpg
(PS:我实验的时候,采用XP SP3的虚拟机,所有异常都忽略了,但是直接运行起来,还是报这个错误框,后来我换成XP SP2的虚拟机,忽略所有异常又是正确的,具体原因还不清楚。所以这里大家遇到这个问题实在搞不定的话,就换XP SP2的系统吧)
这里我给大家介绍两款新的插件OllyBone和Weasle。
OllyBone这款插件的安装说明如下:
Installation:
Copy ollybone.dll and i386/ollybone.sys to your OllyDbg directory。
安装说明的意思就是说安装OllyBone插件的方法就是将ollybone.dll放到OD目录下的Plugin文件夹下,然后将i386文件夹下的ollybone.sys放到OD的目录下。
image004.jpg
如上图所示,我们将ollybone.sys置于OD同目录下了,ollybone.dll放到了OD目录下的Plugin文件夹中了。
至于Weasle这个插件,我们将Importer.dll置于OD同目录下,然后将RL!Weasle.dll放到OD目录下的Plugin文件夹下。
大家在脱ASProtect这款壳的时候要格外小心,因为它会对INT3断点以及硬件断点进行检测,如果检测到的话,就会报错,那我们就只能重新再来了。所以在定位OEP之前,我们需要配置OllyBone这款插件,首先我来给大家介绍一下OllyBone这款插件,首先根据ollybone.sys的扩展名来看就知道这是一个驱动程序,这个插件主要是用来模拟执行断点的,协助我们的OD(我们前面章节介绍的专门用于定位OEP的那款OD)更快的定位到OEP,但是这个插件有个缺点,就是我们不能对程序进行单步,所以说我们在调试之前先要将异常选项中Debugging options-Exceptions-Single-step break 这一项的对勾去掉。关于这一点OllyBone插件的作者的官网给了详细说明,网址如下:
image006.jpg
image008.jpg
其他的忽略异常选项我们还是勾选上。
image010.jpg
此时我们处于入口点处,即ASProtect壳的入口点位于第一个区段中,我们单步往下跟踪几步就会跳转到别的区段。
image012.jpg
我们大概按4,5下F7键就可以由第一个区段跳转到起始地址为460000的这个区段。下面我们打开区段列表窗口,给第一个区段设置break-on execute(执行断点,该功能是OllyBone插件提供的)。
image014.jpg
断在了这里。
image016.jpg
这里对于一般的壳来说,我们现在应该就到了OEP处了,但是对于ASProtect来说,我们断在了这里,这里明显不像OEP,这里我们单步执行这个RET指令,会发现还是返回到了壳创建的区段中,接着我们直接运行起来。
image018.jpg
等了一段时间,就断在了OEP处。
(PS:依然是作者定位OEP的方法,我按照作者的方式选择Set break-on-execute这一项,Bingo蓝屏了)
image020.jpg
怎么会这样呢?其实啊,这是OllyBone插件要求环境导致的。
我们来看看官方的说明:
image022.jpg
可以看到OllyBone的作者在其主页上已经说明清楚了,使用OllyBone插件的时候不能开启DEP,不然会蓝屏。
关闭DEP的方法如下:
image024.jpg
在我的电脑上单击鼠标右键选择属性。
image026.jpg
我们先来查看一下DEP是不是确实开启了,选择性能的设置按钮。
切换到高级选项卡。
image028.jpg
切换到数据执行保护选项卡。
image030.jpg
可以看到确实启用了DEP,未启用DEP的时候这个选项卡的对话框是灰下去的,无法选择。
下面我们来关闭DEP,选择设置启动和故障修复按钮。
image032.jpg
选择编辑按钮(即可以编辑boot.ini文件)。
image034.jpg
接着讲/noexecute这个选项的值由option修改为AlwaysOff即可关闭DEP。
image036.jpg
修改完毕以后保存文件。然后重启电脑即可关闭DEP了。
好了,现在我已经重启电脑了。
我来看看DEP是否已经关闭了。
image038.jpg
可以看到已经灰下去了,说明DEP已经关闭了。
下面我们继续使用OllyBone插件来Set break-on-execute。
(PS:但是我尝试了多遍,OllyBone压根不起作用,根本断不下来。可能是年代比较久远的原因吧。我查了下资料,softworm大叔09年的时候写了篇帖子提到了OllyBone,说这个插件不大好用,经常断不下来。可能在PTE上做了手脚,softworm大叔就用DEP又实现了一遍BreakOnExecute的功能,贴出来实现代码,等我后面有时间,再来尝试下写BreakOnExecute这个插件吧。具体什么时候,那就不得而知了,哈哈)
好了,下面说说我是怎么定位OEP的吧。
我实验的环境是XP SP2。
image040.jpg
物理地址扩展我是开启的。
image042.jpg
DEP我也关闭了,这里其实没有什么影响。大家随意。
我采用的是最后一次异常法,大家应该很熟悉了吧。
直接用专门定位OEP的那款OD(PS:不用我多说的了,内存单元被Patch,之前章节介绍过很多遍了)加载目标程序。
image044.jpg
停在了壳的入口点处。
image046.jpg
查看区段列表可以得知,壳的入口点也在于代码段(PS:OEP实际上也位于代码段)。
image048.jpg
实际上这是ASProtect作者玩的伎俩。
接下来我们将忽略异常的选项都勾选上。
image050.jpg
然后直接运行起来。
image052.jpg
可以看到,程序直接正常运行起来了。
接下来我们打开日志窗口查看下都发生了哪些异常。
image054.jpg
可以看到最后一次异常是EEC91A处产生的。
接下来,我们将忽略内存访问异常这个选项的对勾去掉。
image056.jpg
重启OD,依然断在了入口点处,然后按F9键直接运行起来。
image058.jpg
断在了这里,并不是最后一次异常处。
我们按shift+F9,忽略掉该异常继续运行。
image060.jpg
接着断在了这里,还不是最后一次异常处,我们继续按shift+F9,忽略掉该异常继续运行。
image062.jpg
好,这里就断在了最后一次异常处了。
接下来我们给代码段设置内存访问断点(PS:这里该OD的内存访问断点实际上只有执行的时候才会断下来。)
image064.jpg
然后继续按shift+F9,忽略掉该异常继续运行。
image066.jpg
好,断在了这里。这里就是OEP了。
这里我们在反汇编窗口中单击鼠标右键选择Analysis-Remove analysis from module选项重新分析代码。
image068.jpg
好,现在的显示就正常了。啧啧...成功定位到了OEP。
下面我们来进行dump,我们打开OllyDump插件,我个人不太习惯用OllyDump来修复IAT,所以这里我不勾选Rebuild Import这个选项。
image070.jpg
下面我们来定位IAT。
image072.jpg
这里我们可以看到OEP下方有一条指令调用了GetVersion这个API函数,说明其是IAT中的一项,好了,现在我们在数据窗口中定位到这一项,接着我们来定位IAT的起始地址。
image074.jpg
这里我们可以看到IAT的起始地址为460818。接着我们可以看出IAT的结束位置为460F28。
image076.jpg
所以我们可以得到:
OEP = 4271B0
IAT的起始地址 = 460818
IAT的长度 = 710
这次我不用IMP REC来修复IAT了。这里我给大家演示如果用Weasle这个插件来修复IAT。
image078.jpg
image080.jpg
我们找到ImpRec Options这一项,填充OEP ,IAT起始地址,IAT大小。
image082.jpg
这里我们需要将OEP,IAT的起始地址,IAT的大小,以及从什么地址开始搜索,搜索的范围大小是多少都填充上,接着将搜索模式选择为Search+1。这样理论上就可以开始进行搜索了。但是,这款插件有时候会漏掉某些DLL,我们就需要手动将DLL添加上,这里我们单击Add按钮来添加DLL,譬如这里的460F24这个IAT项所在的DLL就被遗漏了。我们来看看该项的参考引用。
image084.jpg
image086.jpg
这里明显我们可以看到oledlg.dll这个DLL被遗漏了。我们添加上这个DLL然后再次单击Search按钮进行搜索。这样就OK了。但是由于这个插件还是一个测试版本,所以可能搜索的结果会有一些错误。我迫不及待的想试试发布版了,嘿嘿。下面我们来看看修复的效果如何。
image088.jpg
这里我们可以看到提示找到了429处API函数调用处。总共定位到API函数429个。
我们直接单击Fix dump按钮修改dump文件。
image090.jpg
我们运行修复后的dump文件,直接报错了,可以看到错误提示是无法定位在kernel32.dll中定位到RtlSizeHeap这个函数。当然无法定位到啦,RtlSizeHeap这个API函数压根就不是Kernel32.dll导出的,它是ntdll.dll导出的。还好,该插件提供了一个修复ntdll.dll中的API函数的功能,我们单击鼠标右键选择Fix ntdll.dll calls即可。
image092.jpg
现在我们将刚刚修复的exe后缀的文件删除掉,然后将bak后缀的文件重命名为exe后缀,然后再次单击Fix dump按钮修复dump
文件。这里IAT就被修复了。但是我们直接运行修复后的文件发现还是无法正常运行,说明还存在AntiDump。我们再次用OD加载修复后的程序。
image094.jpg
这里我们可以看到API函数显示正常了,说明IAT已经修复了。我们单击鼠标右键选择Search for-All intermodulate calls查看所有API函数调用处。
image096.jpg
这里我们可以看到有多处CALL的目标地址都是19B0000(大家的机器上这个地址可能不太一样,以自己机器为准)。下面给大家的任务就是修复AntiDump。大家不必太担心,因为我会给出一些提示。
给大家的任务就是15天之内编写出一个脚本来修复AntiDump。完成任务的童鞋可以发邮件给我,我会一个一个的看并进行点评。在下一个章节中,我会给出一个在我看来最简单最高效的脚本。
15天以内完成任务的童鞋可以给我发送邮件,附上脚本以及您的ID,修复了AntiDump的童鞋将在下一章节中被提名以资鼓励。
下面给大家一点提示。
我们用OD加载原程序,并且定位到OEP处。
image098.jpg
这里我们比较将未dump之前的OEP下方的4272D5这处CALL与dump并修复IAT以后的进行比较会发现下面还存在其他指令。
image100.jpg
针对于4272D5这一行dump并修复IAT后,我们可以看到调用了GetStartupInfoA这个API函数。4272D5到4272DB一共占6个字节。而未修复IAT之前ASProtect将其替换成了一个占5个字节的CALL(很明显第6个字节是垃圾指令)。未修复IAT的情况下4272D5这个CALL的返回地址处的指令如下:
004272D5    E8 268D5801   CALL 019B0000
004272DA    D9F6         FDECSTP
这里我就不给出原作者的提示了,作者的提示比较隐晦。
这里我给出我的提示。
大家可以给4272D5这一行设置一个断点,运行起来,就断在了这一行。然后我们利用OD自带的跟踪功能来定位修改AntiDump的关键点。我们需要定位处于哪一条指令处时的通用寄存器中保存了GetStartupInfoA这个API函数的地址。跟踪停止后,如果大家感觉停下来的地方不是很像关键点的话,就继续自动跟踪,直到确认是关键点为止。我们还有另一个切入点可以更加精确的定位关键点。就是执行完CALL 019B0000 这条指令后,正常情况下会返回到4272DA这个地址处,但是4272DA处这个字节是垃圾指令。所以ASProtect壳在调用完GetStartupInfoA这个API函数并且返回到之前势必会将4272DA这个字节修改掉,并且将返回地址修改为4272DB,这样接下来才能够正常继续往下执行。所以基于这个切入点,我们可以对4272D5开始的多个字节设置内存访问断点,将这两个切入点结合起来,就可以让大家更加精确的定位关键点了。
大家要做的就是尽自己所能在2006年8月17号之前编写能够在各个系统上都能够良好执行的脚本。对于完成任务的童鞋我会在下一章节中予以提名以资鼓励。

本系列文章汉化版转载看雪论坛

感谢原作者:RicardoNarvaja(西班牙人)
原作者个人主页:http://www.ricardonarvaja.info/

感谢热心翻译的朋友:
1~3章译者:BGCoder
4~58章译者:安于此生

全集配套程序下载地址:

链接: http://pan.baidu.com/s/1eQzTWfo 密码: vytv




评分

参与人数 13HB +10 THX +6 收起 理由
lies + 1
Jawon + 1
DDK4282 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
一路走来不容易 + 1
娄胖胖 + 1
风动鸣 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
冷亦飞 + 1
消逝的过去 + 1
阿枫 + 1
zyyujq + 1 + 1
hackysh + 1
hnymsh + 1
雨季 + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!!.

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
vigers 发表于 2015-3-8 11:10 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
hackysh 发表于 2022-2-22 09:37 | 显示全部楼层


[快捷回复]-感谢楼主热心分享!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
别管我了行 发表于 2022-3-3 04:32 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zg2600 发表于 2022-7-12 15:02 | 显示全部楼层

[吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!做的不错哦,楼主加油,期待更好的作品!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
阿枫 发表于 2022-7-13 10:36 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2022-10-31 20:10 | 显示全部楼层

不懂,只能看热闹!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
风动鸣 发表于 2022-10-31 22:09 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2022-11-20 19:35 | 显示全部楼层

楼主威武!!!!!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2023-4-7 08:00 | 显示全部楼层

我来继续学习,谢谢~!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表