基础脱壳教程4:手脱FSG壳
FSG 2.0 -> bart/xt
重点为修复
手动、查找IAT
一、单步跟踪法
单步跟踪就是和之前一样的套路,直接单步向下,遇到向上跳转直接用F4跳过就可以了,主要是在单步的时候注意一些跳转,可能跳转到的地方就是程序的OEP
也有可能跳转到OEP的指令会被略过,所以要仔细观察,比如这次的壳
这里我们还是进行单步跟踪,当我们遇到一些比较特殊的跳转时,就要注意了,比如一些比较大幅度的JMP,或者是jmp+寄存器的值,这种也有可能是跳转到OEP,因为可能会讲偏移存放到寄存器里
比如这里我们就遇到了三个跳转,第三个JMP就是跳转到OEP(说实话,我也不知道为啥,也没看出来他有很大程度的跳转,但是视频里是这么讲的),而且这一条语句如果是顺序向下的话,会跳过这条语句,所以我们要直接右键运行到这条语句,然后跟进去就可以了
这里就是OEP,然后我们进行脱壳
打开LordPE,选中我们调试的程序
先右键选中修正镜像大小,然后完整转存
转存完之后打开ImpRec,选中我们调试的程序,将OEP的地址减去基址,填到OEP里
然后点击自动查找IAT和获取输入表
点击无效函数,正常是没有,如果有右键把无效函数剪切掉就可以了,,然后点击转储到文件,存到我们用lordPE dump的文件里,就完成了之前的ASPACK壳和UPS壳都是到这里就结束了,但是FSG壳需要其他步骤
接下来我们进行剩余步骤
我们在OEP之后的程序里随便找到一个函数
比如这里这个函数的地址是0x425210,我们在命令行窗口输入d 425210
在左下方的窗口里,出现一堆函数,我们翻到最上面和最下面,记录下两个地址
最上面
最下面
然后再ImpRec里找到
将开始的地址减去基址填到Rva里,整个的长度填到size里
然后点击获取输入表,注意,这里size可以直接填1000,只不过要点一下无效函数,把空指针剪切到就可以了,比较方便
然后我们再点击转储就可以了
二、esp寻址法
普通的esp寻址法,和之前一样,找到一条只改变esp的指令就可以使用,这里介绍一种比较特殊的方法,只适合FSG壳,就是找到一条改变所有寄存器的指令
比如这里,我们继续右键esp点击数据窗口跟随,
不过这里我们要看堆栈
我们右键最后一个压栈的地址,选择反汇编窗口中跟随
右键第一句选择硬件执行,然后按shift+F9,就可以直接跳转到OEP