-
-
[原创]Enigma6.8脱壳+修复(下)
-
发表于:
2021-8-12 21:02
36796
-
最近家里电路有问题总是跳闸,拖拖拉拉就到了今天才写。
这种处理IAT的就算单纯的进行运算解密出对应新的FF25表对应的函数地址跳转,每个加密过的IAT都有对应不同的push xxxxxxxx一个值,EG壳这种处理手法和老版本几乎是一样的,没有太大的变动。
如果大家想详细跟下他的解密可以进入这个CALL
EAX就是返回的地址,就是壳自己创建的FF25跳转表对应的函数跳转,如果我们写脚本处理就很简单了,这个解密CALL是公用的所有函数的解密都是调用这一个解密CALL
我简单的来说下脚本的实现思路吧
由于这个样本是VC++编译的所有的函数调用都是以FF15 CALL的形式简接调用我们只需从00401000开始往下找FF15开头的汇编语句即可
当我们找到FF15汇编语句是我们可以+4取间接调用地址里的值是否小于5FF00000(系统函数地址都是高地址,壳申请的都是低的地址)
我们可以在壳创建的FF25地址表选择地址表所处的全部区域下内存访问断点,再按照2的方法获取对应的函数地址填充会1的地址里即可
EG壳对于这种方法还有一个线程干扰,怎么回事呢?就是当你用脚本跑修复IAT时他会时不时调用sleep函数来暂停线程干扰修复,根据我的观察可以发现加壳程序对比没加壳的程序多了2条线程,当我终止这2条线程后程序会退出,就是一个简单的ExitProcess函数的调用退出我们直接在函数内部ret掉程序就不会退出,正常运行了,也不再会调用sleep函数干扰我们修复了。
脚本代码如下:
最后一种加密也是最难还原的,我把EG壳翻了底朝天我还是无法找到这种IAT处理出现对应原函数的地方,我猜测EG壳在SDK处理的时候就将这一小部分函数给按字节获取重写进壳程序保存起来了,现场就不会再二次获取函数出现暴露的风险。EG壳这种模拟虽然力度比较大但是也是有前提条件的不是任何函数都可以模拟的,更具对比发现他主要是挑一些编译语言所必带的函数来进行加密,不仅如此在这部分函数里再挑选整个函数没有call的调用没有跳转的函数进行重写。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-8-14 17:31
被大道在我编辑
,原因: