吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3113|回复: 10

[转载技术] 第三十五章-手脱ASPack V2.12

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

                         第三十五章-手脱ASPack V2.12
本章我们继续介绍脱壳,稍微增加一点难度。
我们要脱的壳是ASPack,比UPX稍微复杂那么一点点,拿UnPackMe_ASPack2.12.exe作为实验对象,这个程序我们在第三十二章介绍OEP的时候遇到过,大家应该还记得吧。
Dump的话我们用OD的插件OllyDump来完成,大家将其放到OD的插件目录下。
将OD的反反调试插件配置好,然后加载。
image002.jpg
OD提示该程序入口点位于代码段之外,对于大部分加壳程序OD都会弹出此警告窗口,大家不必大惊小怪。
image004.jpg
我们可以看到第一条指令是PUSHAD,按F7键执行PUSHAD。
image006.jpg
在ESP寄存器值上面单击鼠标右键选择-Followin Dump,就可以在数据窗口中定位到刚刚通过PUSHAD指令保存的寄存器环境了,选中前4个字节,单击鼠标右键选择-Breakpoint-Hardware,onaccess-Dword,这样就可以给这4个字节设置硬件访问断点了。
image008.jpg
按F9键运行起来。
image010.jpg
断在了POPAD指令的下一行,我们直接按F7键单步跟踪到OEP处。
image012.jpg
这里我们到了OEP处,OD这里解析有误,将代码解析为数据了,我们在反汇编窗口中单击鼠标右键选择-Analysis-Remove analysis from module,删除掉OD的分析结果,这样就能正常解析了。
image014.jpg
image016.jpg
我们可以看到虽然已经被解析成代码了,但是解析的还不够完整,我们还需要解析一次,继续单击鼠标右键选择-Analysis-Analyse code。
image018.jpg
image020.jpg
现在我们可以对该进程进行dump了,在菜单栏中找到OllyDump插件。
image022.jpg
image024.jpg
该插件的窗口的弹了出来,有一些选项可供我们修改,我们可以对Base of Code进行修改,这里Base of Code = 4000(RVA),该选项相当于对代码段进行了指定,不需要像上一章那样在数据窗口中的PE头中去修改。我们应该还记得ASPack加壳程序的原程序代码段并不是第一个区段,而是第三个区段,4000(RVA),即404000(VA),OEP也是404000,刚好在代码段中,所以Base of Code这一项我们不需要修改。
我们可以看到下面还有一个选项Rebuild Import(重建IAT),跟IMP REC的功能类似,提供了两种方式来重建IAT,这个选项对于一些简单的壳还是有效的,大家可以试一试。
我们这里就不使用这个功能了,去掉RebuildImport的对勾,为了保险起见,我们还是使用IMP REC来修复IAT。
image026.jpg
单击dump按钮。
image028.jpg
这里我们将dump出来的文件命名为dumpaspack.exe。这里我们没有修复IAT直接运行起来,看看会不会报错。
image030.jpg
提示无效的win32程序,我们需要修复IAT,打开IMP REC,定位到UnPackMe_ASPack2.12所在的进程,当前该进程停在了OEP处。
我们回到OD中,我们需要定位IAT的起始地址以及大小,还有OEP的值。
现在OEP的值我们知道了,等于404000,IMP REC要求的是RVA(相对虚拟地址),404000(VA:虚拟地址) -400000(映像基址) = 4000(RVA)。
接下来我们需要定位IAT的起始地址以及大小,我们随便找一个API函数的调用处,好,OEP的下面正好有一处CALL GetModuleHandleA。
image032.jpg
选中CALL GetModuleHandleA这一行,单击鼠标右键选择-Follow。
image034.jpg
image036.jpg
这里我们可以看到直接来到了GetModuleHandleA的入口点处,并没有间接跳转(并不是所有的程序调用API函数都是通过间接跳转来实现的,该程序就没有使用间接跳转)。
这里是通过一个间接CALL来调用API函数的。
显然,4011F4是IAT其中的一项,该内存单元中保存了GetModuleHandleA的入口地址。
image038.jpg
我们直接搜索二进制串FF 25,看看能不能定位到跳转表。
image040.jpg
我们可以看到定位到了跳转表,接着我们在数据窗口中定位到IAT。
image042.jpg
我们将最后一个DLL中的IAT项用绿色标注出来了,地址是7C8XXXXX的形式,单击工具栏中的M按钮,在区段列表窗口中看看这类地址是属于哪个DLL。
这里我们可以看到这些地址是属于kernel32.dll的代码段。
这里IAT中的最后一个元素起始地址为401214,即401218是IAT的结束位置,现在我们再来看看IAT的起始地址是多少。
image044.jpg
每个DLL的IAT项都是以零隔开的。
image046.jpg
这里我们可以看到这部分绿色标注出来的数值为10XX 或者 11XX的形式,明显不属于任何一个DLL,而且这些数值比当前进程空间中分配内存单元中的最小地址还要小。
image048.jpg
所以这些数值不属于任何一个DLL,也不属于任何一个区段,有可能是壳存放的一些垃圾数据,我们继续往下拉。
image050.jpg
这部分地址是77DXXXXX的形式,我们在区段列表窗口中看看这些地址属于哪个DLL。
image052.jpg
属于user32.dll。
区段列表窗口中还有些其他的DLL,如:GDI32.dll,NTDLL.dll,原程序并没有用到,这几个DLL有可能是壳加载的,我们在反汇编窗口中单击鼠标右键选择-Search for-All intermodular calls看看该程序调用了哪些DLL中的API函数。
image054.jpg
image056.jpg
这里我们可以看到原程序总共调用了3个DLL的API函数,我们只找到了两个DLL的IAT项,NTDLL的IAT项呢?我们随便找一个NTDLL的API函数调用处。
image058.jpg
这一项的地址为401200,和Kernel32.dll的IAT项混在了一起。
image060.jpg
401210这一项也被混在了Kernel32.dll的IAT项中。
image062.jpg
好,现在我们来看看IAT的起始位置在哪里,IAT的所有元素这里我们用绿色标注出来了。
image064.jpg
IAT的起始地址为40119C,跟跳转表中的最小地址一致。
image066.jpg
好了,现在我们有了以下三条数据:
OEP = 4000 (RVA)
IAT的起始地址 = 119C (RVA)
IAT的大小 = 401218 - 40119C = 7C。
image068.jpg
我们将这三个值填到IMP REC中去,单击Get Imports,获取IAT项。
image070.jpg
中间一条记录是垃圾数据,我们单击kernel32.dll这条记录左边的+号,可以看到401200和401210 这两项和kernel32.dll中的IAT项混在了一起。
image072.jpg
可以看到这里ntdll.dll中分配内存空间的两个函数用kernel32.dll中两个类似的函数HeapAlloc,HeapFree替换掉了。
image074.jpg
这里日志信息中也提示说这两个函数跟ntdll.dll中的RtlAllocateHeap,RtlFreeHeap完成的功能类似,壳也可以对这些IAT项进行修改和混淆。
好了,现在我们需要剔除掉垃圾数据,即valid显示为NO的项(无效数据),我们单击左边的+号将其展开。
image076.jpg
我们选中第一项,单击鼠标右键选择-Disassemble/HexView(以反汇编或者16进制方式显示)。
image078.jpg
提示读取失败,下面我们来将这些垃圾数据删除掉。
image080.jpg
单击Show Invalid,显示无效的数据,然后单击鼠标右键选择-Cut thunk(s)(剪切掉)。
image082.jpg
这里这些无效数据就被剪切掉了,程序运行的时候就不会提示尝试加载不存在的API函数了。
现在,我们单击FixDump,选择我们之前dump出来的文件。
image084.jpg
好了,修复完毕,我们双击运行修复完毕的程序dumpaspack_.exe。
image086.jpg
运行很正常,本章的内容就结束了。

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

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

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

全集配套程序下载地址:
链接: http://pan.baidu.com/s/1eQzTWfo 密码: vytv



评分

参与人数 11HB +15 THX +4 收起 理由
lovxyj123456 + 2 + 1 文件链接挂了....
Jawon + 2
Soul1999 + 1
sjtkxy + 1 + 1
消逝的过去 + 2
temp + 1 + 1
风里去 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
l278785481 + 1
jaunic + 2
hnymsh + 2
菜鸟也能飞 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!

查看全部评分

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

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

感谢楼主分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2022-11-19 17:44 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
一生逍遥 发表于 2022-12-4 10:47 | 显示全部楼层

受教了  收藏学习一波
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
创客者V2.0 发表于 2022-12-15 22:44 | 显示全部楼层

谢谢分享  大佬图文应该弄个合集
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
sjtkxy 发表于 2022-12-16 05:14 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2023-4-4 13:57 | 显示全部楼层


谢谢分享新手
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!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

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