分享 FSG 2.0的一次脱壳经历,IAT API修复
今天早上在论坛下载了一个软件 DeepFreezePasswordRemover,看了下软件的大小23k,本能反应应该是加壳了,看看是什么壳。右键PeidFSG 2.0 -> bart/xt的壳,一款很老的壳了。今天周末,那就拿来脱壳练习下吧!
--------------------
FSG脱壳要领:找到OEP后,填写IAT地址,IR修复就可以了
--------------------
那就开始脱壳吧!OD载入
本人OD脱壳的习惯是:
直接在跳转单击,然后按F4,碰到程序执行之后,再按下键盘上的-号按键,OD会自动返回
刚才跑飞的地方,在跑飞的跳转处还有可以的跳转处下断后,在重新载入。
按照上面的方法开始脱壳,在 004001DA ^\EB EE jmp short DeepFree.004001CA按下F4后程序跑飞了
程序跑飞了,说明OEP就在附近了,按下键盘上的-号按键。OD自动返回到
004001DA ^\EB EE jmp short DeepFree.004001CA
OD界面往上拉,仔细观察后没有发现大的跳转,较为可疑的就是
004001D1 FF63 0C jmp dword ptr ds:
直接下断,OD重新载入,运行
程序断下来,看到 信息框显示的内容是
ds:=0040109C (DeepFree.0040109C)
也就是004001D1 FF63 0C jmp dword ptr ds:
的跳转地址就是jmp 0040109C,这是个大跳转,基本可以肯定OEP就是109C (= 0040109C -0040000 )。
单步进入跳转,右键移除分析,看到了熟悉的VB代码的入口点
往上面拉就是此款程序的API了。
使用LoedPe Dump出文件,ImpRECv1.7修复IAT
运行后,就直接错误了!
然后我就纳闷了,哪里错了呢?
于是就打开通用脱壳工具之小米脱壳来脱壳试试
小米脱壳给力,成功脱下了壳,脱壳文件76k,并且能成功运行。
自动脱壳机能脱壳成功,我咋就脱壳失败了,这个壳很简单的。
然后就OD载入脱壳后的错误文件,开始单步调试,调试了很多次,没有结果
于是纠结中。。。哪里错了,程序没有自校验啊!
思考中。。。IAT也修复了!
渐渐忘记了。。。
下午重新想起来的时候,为什么不对比一下IAT呢?
-----------------------
使用LordPE添加API
-----------------------
于是打开了两个LordPE,查看小米脱壳机脱壳的IAT和ImpRECv1.7修复后的IAT
这时有了发现,发现少了一个API,下图中绿色框框住的部分
那么在OD中对应的地址就是0040106A
问题应该就是在这里,立马使用OD分别载入两个脱壳文件
前往0040106A,发现真的是有一个API掉了
0040106A .- FF25 38104000 jmp dword ptr ds:[<&MSVBVM60.#rtcRightCharVar_619>>;msvbvm60.rtcRightCharVar
0040106A FF25 38104000 jmp dword ptr ds:
为了验证下,就直接修改0040106A 处的汇编代码为 jmp msvbvm60.rtcRightCharVar
在OD中按下F9程序成功跑起来了
-----------------------
接下来开始修复,这里使用LordPE添加输入表,然后填写Dll:msvbvm60.dll,API:rtcRightCharVar,
点击加号,点击OK
记下图中的偏移地址:1301F,加上400000,就是0041301F
LordPE保存退出
OD载入脱壳后的文件,在数据窗口中 ctrl + g ,输入0041301F,回车,
手动添加的API,已经成功添加进去了。
接下来就是使用OD修改代码,右击保存修改后的文件为dump_fix.exe
双击,发现错误消失了,程序正常运行起来了,手动脱壳后的文件大小为76K。
----------------------
发现的一些问题,自己无法解决,请教下有经验的人
----------------------
1、为什么ImpREC在修复iat的时候不会自动查到0x401038处的api :msvbvm60.rtcRightCharVar
但是0x401034处的Api msvbvm60.rtcLeftCharVar 却能够找到,两个地址就相差了4。
就算是扩大了ImpREC的搜索大小size还是找不到msvbvm60.rtcLeftCharVar,我就纳闷了。
2、还有像这个错误是不是都是API错误,00000000的00000000错误。
附件下载:
本帖最后由 wanttobeno 于 2016-4-29 09:23 编辑
错过的指尖 发表于 2016-4-28 17:11
你好,拜读你的帖子,所以按你的思路有两处不太明白的地方麻烦指点
1:如何使用LordPE添加API并查看(新手 ...
第一个问题,如图
第二个问题
是对比自己脱壳的文件的输入表和脱壳机脱壳的文件,发现自己脱壳的少了一个api,这个api的TAV为1038。仔细看图哦! Hmily 发表于 2015-3-15 00:01
我帮你把帖子编辑了下,图片上传后直接点击图片就可以贴到帖子里了。
fsg的iat是打乱排序的,获取IAT的 ...
谢谢
当时这方法都试试了,还是不行。
但是今天在试的时候,Import居然找到了缺少的那个指针
以后脱壳多次失败,应该选择重启一下电脑,我之前的电脑都是处于开机状态的
前排围观,
前来膜拜大神,
虽然我没看懂,
火前留名 你修复IAT的时候手动输入地址和大小看看 无效的删除试试 我帮你把帖子编辑了下,图片上传后直接点击图片就可以贴到帖子里了。
fsg的iat是打乱排序的,获取IAT的大小可以写大一些,然后把无用的剪切掉就好了应该。 前来膜拜大神啊 wgz001 发表于 2015-3-14 22:53
你修复IAT的时候手动输入地址和大小看看 无效的删除试试
当时两种方法都试试了,还是不行。
但是今天在试的时候,Import居然找到了缺少的那个指针 以后脱壳多次失败,应该选择重启一下电脑,我之前的电脑都是处于开机状态的
感谢提示
可以把大小弄大一些 Hmily 发表于 2015-3-15 00:01
我帮你把帖子编辑了下,图片上传后直接点击图片就可以贴到帖子里了。
fsg的iat是打乱排序的,获取IAT的 ...
我的IAT写到5000还是错的{:1_908:} 本帖最后由 错过的指尖 于 2016-4-28 17:13 编辑
你好,拜读你的帖子,所以按你的思路有两处不太明白的地方麻烦指点
1:如何使用LordPE添加API并查看(新手请多包涵)
2:从哪里看出来RAV为1038对应的地址会是0040106A
页:
[1]
2