逆向脱壳训练 #2 手脱FSG及寻找IAT
文章目录
- 逆向脱壳训练 #2 手脱FSG及寻找IAT
-
-
- 环境 & 工具
- 脱壳
-
- 单步跟踪
-
- 查壳
- OEP寻找
- IAT校准
-
但FSG与前三者相比,在脱壳和修复上都有很大的差异,所以记录下手脱的经验
环境 & 工具
- win xp系统(试用win10系统复制失败,在调试环境中浪费的时间比实际学习的时间长。只能说是值得的windows)
- 吾爱破解版ollydbg
- exeinfope(可使用其他类似的查壳工具)
- ImportREC
- LordPE
脱壳
单步跟踪
同理,,注意和
查壳
OEP寻找
前期一路单步到此
试着跳起来跳起来
程序进入运行态,说明主程序已经运行,说明跟踪程序入口点丢失:-(
但是全程,说明程序的入口点应该在这个向上跳前面
那么0x4001D1处无条件跳转有最大的嫌疑
将断点设到0x4001D一个地方,直接运行到这里,然后f8跟进跳转
发现这是一个长途无条件跳转,跟进后到达OEP
IAT校准
(Import Address Table)即,需要调用程序时对应函数保存在函数指针表中
函数入口地址之所以需要进行这样的转折,而不是在程序中直接保存,是因为如果
所以先看看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
然后点击
修复后