手动脱FSG壳实战

作者:Fly2015

对于FSG壳,之前没有接触过是第一次接触,这次拿来脱壳的程序仍然是吾爱破解论坛破解培训的作业3的程序。对于这个壳折腾了一会儿,后来还是被搞定了。

 

1.查壳

首先对该程序(吾爱破解培训第一课作业三.exe)进行查壳:


很遗憾,这次DIE也不行了,不过没事。


2.脱壳

OD载入该加壳的程序进行分析,下面是入口点的汇编代码:


起初对于该种加壳程序也是比较陌生,但是由于OD使用的还算熟悉,以及结合该加壳程序获取函数的API调用地址的特点,很快发现了该程序的关键点汇编:


于是在地址004001D1F2下断点,然后F9运行到该地址004001D1处,地址0041DDAC就是被加壳程序真实的OEP的地址。


F7单步跟进到地址0041DDAC处,遗憾的是没有看到我们熟悉的入口点的汇编代码,但是不要急,OD没有将汇编代码正确的显示出来,需要我们自己手动的进行数据的反汇编解析:


选中地址0041DDAC处没有正确显示的数据,然后 右键 如图,选择 分析-->分析代码 即可正确显示了。


手动选择分析代码以后,地址0041DDAC处的数据的显示,是不是很有亲切感啊,令人熟悉的入口点汇编代码出现了,但是不要急,这才是第一步。


很自然的下一步就是使用OD的插件OllyDump进行程序的脱壳操作,但是这里对于这种壳这样直白的脱壳方式并不管用,需要使用Load PE结合RECImport工具进行完美脱壳。因为被FSG加壳的程序的IAT表不是连续的,脱壳工具不能智能的识别那些内存数据是函数的地址,因此需要我们自己手动的识别那些是函数的地址那些不是函数的地址,然后使用工具脱壳。


需要脱壳程序暂停在地址0041DDAC处,使用Load PE工具将其此时的内存PE镜像手动Dump出来(完全脱壳方式),如图。


注意,此时Dump出来的程序还不能运行,需要为该Dump程序正确的修复IAT表,它才能运行起来。

通过上面的调试,了解到程序的真实OEPRVA地址为001DDAC,使用RECImport工具进行该Dump程序的IAT表的修复。


1.常规的修复IAT表的方式:

RECImport工具的OEP处手动填写001DDAC,然后点击 IAT 自动搜索-->获取导入表-->修正转储


IAT表修复后的脱壳程序的运行,如图。

很显然,刚才的IAT表的修复没有修复成功,如果IAT表修复成功的话,运行脱壳后的程序就不会出现下面这个不友好的界面提示。


2.手动修复IAT表的方式:

遗憾啦,RECImport工具没用使用好,通过OD查看内存数据发现,RECImport工具对Dump后的程序的IAT的修复不完全。

RECImport工具中,IAT自动搜索到的程序的导入表的函数不完全。如图,函数导入表的起始RVA地址是000320BC,函数导入表的结束RVA地址是000320BC+200=000322BC也就导入表函数的个数是0x200,但是经过OD的观察发现,这两个参数有误。


回到OD调试程序中,在HEX数据区,Ctrl+G定位到地址00410000地址处,然后如图,设置数据的显示方式:长整型-->地址 显示方式。


OD数据视窗-地址显示方式视图:


经过手动拖动查找的方式,发现该被加壳程序的导入表的入口RVA地址应该是00032000 不是地址000320BC处,并且导入表的结束RVA地址是00032554,因此导入表函数的大小应该是32554 - 32000 = 554 个(十六进制)。

 

导入表的起始RVA地址:00032000.


导入表的结束RVA地址:00032554 ,因此导入表函数的大小应该是32554 - 32000 = 554 。


经过上面的分析和观察以后,如下图填写RECImport工具中需要的参数,然后直接点击 获取导入表 千万不要点 IAT自动获取 否则前功尽弃。


点击 显示无效的  函数发现,在获取到的导入表中的函数存在无效的函数地址,确实通过OD也发现了函数的地址不是连续的,有些函数之间是0x7FFFFFFF不是有效的函数地址。


由于0x7FFFFFFF不是有效的函数地址,因此需要去掉这些无效的函数地址。右键选择中这些无效的函数地址,然后如图选择 剪切指针 即可删除这些无效的函数地址。


Ok,现在就可以使用这些剩下的有效的IAT表的导出函数地址进行Dump程序的修正转储了,如图。


运行经过有效的IAT修复的程序的视图。


FSG脱壳分析文档的和脱壳后的程序的下载地址:http://download.csdn.net/detail/qq1084283172/8883891








这个工具的工作原理,它的特征和编译器特征保存在HackFans.txt里面,能识别出来的,基本上都有对应的脱壳函数,用特征脱壳,可以脱壳,对于一些不好特殊的你可以用OEP侦测来脱壳,这要依赖编译器特征,你也可以自己添加编译器特征到HackFans.txt 对某些未知,可能能用未知脱壳选项搞定,它里面的原理也是用了编译器入口处信息. 修改历史: 1.对有IAT加密情况的,才进行IAT解密,避免了有时候不需要解密也去解密,导致后程序不能执行 2.支持文件拖拽功能 3.未知时,如果IAT加密了,请选上解密加密IAT项,进行IAT还原 下面是它能: upx 0.5x-3.00 aspack 1.x--2.x PEcompact 0.90--1.76 PEcompact 2.06--2.79 NsPack nPack FSG 1.0--1.3 v1.31 v1.33 v2.0 VGCrypt0.75 expressor 1.0--1.5 dxpack v0.86 v1.0 !Epack v1.0 v1.4 mew1.1 packMan 1.0 PEDiminisher 0.1 pex 0.99 petite v1.2 - v1.4 petite v2.2 petite v2.3 winkript 1.0 pklite32 1.1 pepack 0.99 - 1.0 pcshrinker 0.71 wwpack32 1.0 - 1.2 upack v0.10 - v0.32 upack v0.33 - v0.399 RLPack Basic Edition 1.11--1.18 exe32pack v1.42 kbys 0.22 0.28 morphine v1.3 morphine v1.6 morphine v2.7 yoda's protector v1.02 yoda's protector v1.03.2 yoda's crypt v1.2 yoda's crypt v1.3 EXE Stealth v2.72--v2.76 bjfnt v1.2 - v1.3 HidePE 1.0--1.1 jdpack v1.01 jdpack v2.0 jdpack v2.13 PEncrypt v3.1 PEncrypt v4.0 Stone's PE Crypt v1.13 telock v0.42 telock v0.51 telock v0.60 telock v0.70 telock v0.71 telock v0.80 telock v0.90 telock v0.92 telock v0.95 v0.96 v0.98 v0.99 ezip v1.0 hmimys-packer v1.0 jdprotect v0.9b lamecrypt UPolyX v0.51 StealthPE 1.01 StealthPE 2.2 depack 涛涛压缩器 polyene 0.01 DragonArmour EP Protector v0.3 闪电(expressor) BeRoEXEPacker PackItBitch 木马彩衣 mkfpack anti007 v2.5 v2.6 yzpack v1.1 v1.2 v2.0 spack_method1 v1.0 v1.1 v1.2 v1.21 spack_method2 v1.1 v1.2 v1.21 xj1001 xj1000 xj看雪测试版 xj1003 xpal4 仙剑-凄凉雪 仙剑-望海潮 mslrh0.31 v0.32 [G!X]'s Protect =================================================================
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值