资讯详情

逆向脱壳实训 #2 手脱FSG及寻找IAT

逆向脱壳训练 #2 手脱FSG及寻找IAT

文章目录

  • 逆向脱壳训练 #2 手脱FSG及寻找IAT
      • 环境 & 工具
      • 脱壳
        • 单步跟踪
          • 查壳
          • OEP寻找
          • IAT校准
之前的ASPACK和NSPACK跟UPX脱下来差不多,就不再写文章记录了

但FSG与前三者相比,在脱壳和修复上都有很大的差异,所以记录下手脱的经验

环境 & 工具

  • win xp系统(试用win10系统复制失败,在调试环境中浪费的时间比实际学习的时间长。只能说是值得的windows)
  • 吾爱破解版ollydbg
  • exeinfope(可使用其他类似的查壳工具)
  • ImportREC
  • LordPE

脱壳

单步跟踪

同理,,注意

查壳

image-20211230093001703

OEP寻找

前期一路单步到此

试着跳起来跳起来

程序进入运行态,说明主程序已经运行,说明跟踪程序入口点丢失:-(

但是全程,说明程序的入口点应该在这个向上跳前面

那么0x4001D1处无条件跳转有最大的嫌疑

将断点设到0x4001D一个地方,直接运行到这里,然后f8跟进跳转

发现这是一个长途无条件跳转,跟进后到达OEP

IAT校准

(Import Address Table)即,需要调用程序时对应函数保存在函数指针表中

函数入口地址之所以需要进行这样的转折,而不是在程序中直接保存,是因为如果位置一旦发生变化*(既然都叫dynamic link library动态一点正常 [doge])*,所有程序的相应函数入口跳转地址都需要更改。使用跳转后,当dll当位置发生变化时,操作系统根据所指数据段中的字符串可以,大幅增加dll的

所以先看看ImportREC中自动获取IAT大致位置

在尝试使用自动获IAT地址修复程序结束后,发现完整转存的镜像文件无法正常运行,不得不手动查找IAT的RVA(Relative Virtual Addresses)

已知IAT总体位置在0左右x250XX使用表中函数时,程序的位置将直接call IAT所以在程序中找到一个地址,比如call 0x250xx的语句

输入命令行d 425210,然后在数据窗口看到地址0x4025210的内容

将数据窗口向上滚动,直到空内容出现。空内容下方的第一个地址是RVA

最后一项和最后一项一直向下滚动kernel相关值减去RVA的值即为IAT的大小

所以这个程序RVA地址0x425000,大小0x280

把RVA和大小填入

自动搜索IAT对比

其实还有一种懒惰的方法,直接把大小填成0x1000

然后点击->->->->即可

修复后

标签: fsg电位器an1575z51

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台