吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2906|回复: 9

[转载技术] 第四十四章-ACProtect V1.09脱壳(修复AntiDump)

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

                 第四十四章-ACProtect V1.09脱壳(修复AntiDump)
我们上一章节介绍了如何定位stolen bytes,以及IAT的修复。我们利用上一章编写的脚本可以很方便的修复IAT并且定位到OEP,接下来我们的任务就是dump。
image002.jpg
我们依然用OD加载UnPackMe_ACProtect1.09,并对KiUserExceptionDispatcher入口以及下方的ZwContinue调用处分别设置断点,并且清除之前设置的硬件断点。
image004.jpg
接着我们执行OEP.txt这个脚本定位到OEP处。
image006.jpg
image008.jpg
好了,现在我们到达了OEP处。
image010.jpg
接下来进行dump。
image012.jpg
image014.jpg
这里我们不勾选Rebuild Import的选项,将转储出来的文件重命名为dumped.exe。接下来我们重启OD,执行修复IAT的脚本。
image016.jpg
接下来打开Import Reconstructor,定位到该程序所在进程。
接着就需要填上OEP(RVA),IAT起始地址(RVA),IAT的大小。
OEP = 271B5
IAT的起始地址(RVA) = 60818
IAT的大小 = 460F28 - 460818 = 710
点击Get Imports。
我们会发现有一项是无效的,其他项都是有效的,是不是我们哪里处理的有问题?
我们来跟一下,看看哪里出了问题,重启OD,我们选中上面显示无效的IAT项,设置内存写入断点。
image018.jpg
运行起来,断在了尝试对460DE8该内存单元进行写入的指令处。
image020.jpg
我们会发现ESP - 0C指向的栈空间中并没有保存API函数的入口地址,而是保存了46E5CB这个值。
image022.jpg
我们可以看到通过IAT.txt脚本,460DE8这个IAT项被保存的是46E5CB这个值,那么不通过脚本呢?我们按F7执行该指令。
image024.jpg
我们可以看到不通过脚本460DE8这个内存单元中保存的值是46BD5B。
image026.jpg
我们转到46BD5B地址处看看是什么。
这里我们可以看到首先是将一个常量压入堆栈,接着与另一个常量进行异或就可以得到某个API函数的入口地址,我们一起来计算一下。
942C0892 xor 946aed59
如果你不想通过计算器来算的话,那么也可以通过OD执行这几条指令来得到结果。
image028.jpg
image030.jpg
这里我们可以看到异或得到的结果是46E5CB,跟执行IAT.txt脚本得到的结果是一致的。也就是问题并不是出在脚本上。应该是其他的某个环节出了问题。我们重启OD,随便找一个API函数跟一下。
image032.jpg
我们执行OEP.txt脚本到达了OEP处,接着依然对刚刚的460DE8这个无效的项设置内存访问断点,看看会断在哪里。
image034.jpg
断在了这里,我们跟进去看看。
image036.jpg
我们跟到RET指令处,继续跟进。
image038.jpg
这里我们可以看到第一条指令是PUSHAD,那么根据堆栈平衡原理,可以很自然的想到后面应该有个POPAD指令,我们按F7键往下跟若干行会到达这里。
image040.jpg
这里我们可以看到调用了MessageBoxA这个API函数。
另一种更加快捷的方法就是通过OD的自动跟踪功能来定位,我们设置自动跟踪的终止条件为EIP大于500000,也就是说从当前区段转入到系统DLL中去执行API函数的时候就会断下来,我们一起来看一看。
image042.jpg
这里我们选中EIP is outside the range。范围设置为0~500000。下面我们一起来看看效果。
image044.jpg
image046.jpg
我们可以看到断在了MessageBoxA的入口处,为了验证API函数的正确性,我们来看看该函数的调用处是哪里,看看堆栈中的返回地址。
image048.jpg
这里我们可以看到返回地址是40E51B,我们直接转到这个地址。
image050.jpg
这里返回到的是调用处的下一行,好了,这里我们就得到了正确的API函数,我们重启OD,执行IAT.txt脚本,就OEP,IAT起始地址,IAT大小等数据都填入到IMP REC中。
image052.jpg
我们定位到这个无效的项,双击之,将其修改为MessageBoxA。
image054.jpg
好了,现在所有的项都有效了。接下来修复dump文件,选中dumped.exe,单击Fix dump。
image056.jpg
修复后的dump文件被重命名为了dumped_.exe,别忘了stolen bytes我们还没有填充回去,我们用OD打开dumped_.exe。
image058.jpg
停在了假的OEP处,我们准备好stolen bytes。
image060.jpg
我们将stolen bytes以汇编指令的形式填充上。
image062.jpg
image064.jpg
我们通过计算可知stolen bytes总共占5个字节长度,4271b5往上5个字节就是4271b0,也就是说正确的OEP应该是4271b0。
我们从4271b0地址处开始写入stolen bytes。
image066.jpg
接下来我们通过单击鼠标右键选择-Copy to executable-All modifications将刚所做的修改保存到文件。接着我们来将其OEP更正。
用OD加载刚刚保存的文件,我们可以通过在数据窗口中单击鼠标右键选择-Go to-Expression,输入400000定位到PE头。
image068.jpg
单击鼠标右键选择Special-PE header将显示模式切换为PE头视图,接下来定位到AddressOfEntryPoint,将其修改为271b0并保存。
image070.jpg
image072.jpg
好了,现在我们就修复完毕了,但是我们运行修复后的程序会发现无法正常运行,程序崩溃了。好,那么我们不勾选忽略异常的选项,加载刚刚修复过的程序,运行起来,看看会提示哪些异常。
image074.jpg
我们可以看到日志窗口中显示了一个非法访问异常。我们通过单击工具栏中的K按钮查看调用堆栈。
image076.jpg
这里我们可以看到最后一次调用来至于429806,我们通过单击鼠标右键选择-Show call定位到该调用处。
image078.jpg
image080.jpg
单击鼠标右键选择-Follow看看这个CALL里面是什么。
image082.jpg
嘿嘿,这里我们我们可以看到一个跳转表,正是由于这些跳转表的目标地址诸如177658这类地址才导致程序无法正常运行报错的。
该地址所属的区段是由壳创建的,但是我们并没有dump出来。下面我们就来解决这个问题。
我们再开一个OD,加载原始的程序,执行OEP.txt脚本到达OEP处。
image084.jpg
我们到了这里,我们定位到上面的跳转表。
image086.jpg
我们在数据窗口中定位跳转表中唯一一个目标地址,这里我们定位1775C4。
image088.jpg
我们往上定位到第一个跳转,我这里是46C0F5。
image090.jpg
这些跳转指令都占6个字节长度,我们随便挑一个目标地址,这里我们选择目标地址为178250,转到这个地址处,我们会发现其执行会6个字节长度的指令,然后返回。
image092.jpg
这里我的想法是用这6个字节替换掉那跳转表中的6个字节。
image094.jpg
我们选中这三行指令,单击鼠标右键选择-Binary-Binary copy。
然后定位到相应的跳转指令处,单击鼠标右键选择-Binary-Binary paste。
image096.jpg
这里我们可以看到覆盖后的效果。
image098.jpg
下面我们来将整个跳转表都替换掉。
我们可以看到跳转表开始于1772B4。
image100.jpg
该跳转表的最后一项为1782B4,其中的值为1799BA。(PS:该跳转表的地址在你们的机器上可能不一样)
image102.jpg
这里将所有的代码都以二进制的形式拷贝出来,接着以二进制的形式粘贴到跳转表所在区域。
image104.jpg
这里我们会发现没有覆盖完全。
image106.jpg
可能该壳做了一些干扰吧,没有关系,到目前为止,我们的思路是正确的。好,那么我们直接定位dump文件所在的OD,就这部分二进制数据粘贴上去。效果同上。
(PS:作者处理有点冗余,这里我稍微修改了下,让大家更好理解)
接着保存所做的修改到文件,运行修复过的文件看看效果。
image108.jpg
我们可以看到程序可以正常运行了,至此关于ACProtect V1.09的OEP定位,stolen bytes,IAT,AntiDump的修复我们就介绍完毕了。

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

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

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

全集配套程序下载地址:

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




评分

参与人数 12HB +10 THX +6 收起 理由
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
24567 + 2
大学的 + 1
Jawon + 1
琉璃天空 + 1
一路走来不容易 + 1
Soul1999 + 1
消逝的过去 + 1
king51999 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
hackysh + 1
hnymsh + 2
lies + 1

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
hackysh 发表于 2022-2-8 17:14 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
别管我了行 发表于 2022-3-2 03:59 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zg2600 发表于 2022-7-10 11:06 | 显示全部楼层

[吾爱汇编论坛52HB.COM]-每天都能学到新知识,赞!正在寻找,非常感谢楼主!顶帖,不仅谢谢楼主,也能赚HB
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zg2600 发表于 2022-7-26 10:38 | 显示全部楼层

[吾爱汇编论坛52HB.COM]-Thanks~向楼主致敬!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2022-10-31 19:53 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2022-11-20 19:33 | 显示全部楼层

楼主辛苦了,谢谢分享!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
一生逍遥 发表于 2022-12-5 08:00 | 显示全部楼层

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

这个必须点个赞!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
一生逍遥 发表于 2023-4-22 17:18 | 显示全部楼层

老大推荐必是精品
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!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

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