-
-
[原创]Safengine Shielden v2.40 IAT修复及脚本编写(x64dbg)
-
发表于:
2019-4-28 01:15
34987
-
[原创]Safengine Shielden v2.40 IAT修复及脚本编写(x64dbg)
常见:
1.call dword ptr [iat]
2.jmp dword ptr [iat]
3.mov reg,dword ptr [iat]
call reg
少见:
4.call @ jmp dword ptr [iat]
jmp dword ptr [iat]
call @ jmp dword ptr [iat]
jmp dword ptr [iat]
中的call
4.3如果都不相等,则是
jmp dword ptr [iat]
至此,IAT的调用类型就判断完了,然后按照各自情况修复就可以了,可以直接参考脚本。
(特殊API如CreateThread不会填充push xxxxxx,手动修复即可)
再来说说
2.跑脚本时奇奇怪怪的异常崩溃:
也是把EIP设置到call上后,步进追踪可能崩溃,可能出现异常访问(偏偏手动单步执行脚本就不会出现,换个系统也有可能不会再出现)。遇到这种情况,只能把地址加入ignore表,到时候手动修复。所幸这都是少数,一般就3个左右
3.跑脚本跑得x64dbg崩溃:
这个还好,跑脚本前把GUI更新关闭,堆栈更新关闭,日志更新关闭即可。出现特殊情况了,再解开GUI更新,分析情况。
首先感谢L4nce前辈写的“
浅谈Safengine系列脱壳
”,给了我很大帮助,让我开始入门脱加密壳。
L4nce的这篇文章已经算是“巨人的肩膀”了,但我觉得仍有一些东西可以细写。由于是自己第一次研究脱壳写脚本,没有人指点,错误纰漏处还请指正包涵
没看文章的务必先看看这篇文章 。其在
“浅谈Safengine系列脱壳”已经谈及的东西,这里就不细谈了,一笔带过。
到这里,我就假设大家已经看完L4nce的文章了。接下来我想谈一些他文章中没有写到或者写全的东西,以及一些我的“奇妙旅途”
关于研究脱壳写脚本,我是先从简单程序(只有几个API调用的汇编程序)入手,分析调用iat的代码有什么特征和功能,然后写个简易脚本,测试脱壳成功了。再用相对复杂程序(易语言静态编译程序)测试脚本并完善修改。
这个方法在我看来或许比较耗时,但可以逐步解决难关,避免在莫名其妙的问题上“卡关”。
再来谈谈SE的IAT加密。。。刚开始按照L4nce的思路写脚本,最后测试脱壳什么的都成功了。。。直到我√上了“使用散列API函数名称”再测试脱壳,就失效了。
分析看了一下,不再走获得API地址的add edi,eax这条路了。这样就只能另辟蹊径获得API地址
这逼的我重新分析两种情况下call sedata_section的流程,以图寻找共同点和突破点。
[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!
最后于 2019-4-28 07:12
被Lixinist编辑
,原因: 图挂了,修补一下