wanttobeno 发表于 2015-3-14 18:10

分享 FSG 2.0的一次脱壳经历,IAT API修复

       今天早上在论坛下载了一个软件 DeepFreezePasswordRemover,看了下软件的大小23k,本能反应应该是加壳了,看看是什么壳。右键Peid


      FSG 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:19

本帖最后由 wanttobeno 于 2016-4-29 09:23 编辑

错过的指尖 发表于 2016-4-28 17:11
你好,拜读你的帖子,所以按你的思路有两处不太明白的地方麻烦指点
1:如何使用LordPE添加API并查看(新手 ...
第一个问题,如图

第二个问题
   是对比自己脱壳的文件的输入表和脱壳机脱壳的文件,发现自己脱壳的少了一个api,这个api的TAV为1038。仔细看图哦!

wanttobeno 发表于 2015-3-15 07:28

Hmily 发表于 2015-3-15 00:01
我帮你把帖子编辑了下,图片上传后直接点击图片就可以贴到帖子里了。

fsg的iat是打乱排序的,获取IAT的 ...

谢谢
当时这方法都试试了,还是不行。
但是今天在试的时候,Import居然找到了缺少的那个指针
      以后脱壳多次失败,应该选择重启一下电脑,我之前的电脑都是处于开机状态的

白小痴 发表于 2015-3-14 22:04

前排围观,
前来膜拜大神,
虽然我没看懂,
火前留名

wgz001 发表于 2015-3-14 22:53

你修复IAT的时候手动输入地址和大小看看  无效的删除试试

Hmily 发表于 2015-3-15 00:01

我帮你把帖子编辑了下,图片上传后直接点击图片就可以贴到帖子里了。

fsg的iat是打乱排序的,获取IAT的大小可以写大一些,然后把无用的剪切掉就好了应该。

aska80 发表于 2015-3-15 00:57

前来膜拜大神啊

wanttobeno 发表于 2015-3-15 07:27

wgz001 发表于 2015-3-14 22:53
你修复IAT的时候手动输入地址和大小看看  无效的删除试试

当时两种方法都试试了,还是不行。
但是今天在试的时候,Import居然找到了缺少的那个指针      以后脱壳多次失败,应该选择重启一下电脑,我之前的电脑都是处于开机状态的
感谢提示

ollydebug 发表于 2015-3-15 08:09

可以把大小弄大一些

错过的指尖 发表于 2016-4-28 17:09

Hmily 发表于 2015-3-15 00:01
我帮你把帖子编辑了下,图片上传后直接点击图片就可以贴到帖子里了。

fsg的iat是打乱排序的,获取IAT的 ...

我的IAT写到5000还是错的{:1_908:}

错过的指尖 发表于 2016-4-28 17:11

本帖最后由 错过的指尖 于 2016-4-28 17:13 编辑

你好,拜读你的帖子,所以按你的思路有两处不太明白的地方麻烦指点
1:如何使用LordPE添加API并查看(新手请多包涵)

2:从哪里看出来RAV为1038对应的地址会是0040106A

页: [1] 2
查看完整版本: 分享 FSG 2.0的一次脱壳经历,IAT API修复