请问有关于如何为打包的 .exe 文件真正定位 OEP(原始入口点)的一般规则吗?在调试的汇编语言中有哪些 OEP 线索可以搜索?
假设有一个包含PC-Guard 5.06.0400的 Windows .exe 文件,我希望将其解压缩。因此,关键条件是在新提取的代码块中找到 OEP。
我会使用通用调试器OllyDBG来做到这一点。
请问有关于如何为打包的 .exe 文件真正定位 OEP(原始入口点)的一般规则吗?在调试的汇编语言中有哪些 OEP 线索可以搜索?
假设有一个包含PC-Guard 5.06.0400的 Windows .exe 文件,我希望将其解压缩。因此,关键条件是在新提取的代码块中找到 OEP。
我会使用通用调试器OllyDBG来做到这一点。
在一般情况下 - 没办法。它高度依赖于打包机。在最常见的情况下,打包程序可能会用其他代码替换 OEP 中的某些代码。
这仅取决于打包程序及其使用打包和/或虚拟化代码的算法。看到你正在使用 ollydbg,我建议检查 tuts4you、woodmanns 和 openrce,它们有很多插件(iirc 有一个设计用于在混淆代码中查找 oep,但我不知道它的性能如何)和 olly 脚本处理拆包各种打包程序(您可以从中获得某种类型打包程序的提示),他们也有很多关于该主题的论文/教程,可能有用也可能没有用。
PC Guard 似乎没有引起太多关注,但这里的视频链接和信息应该会有所帮助(赞美谷歌缓存!)
很难指出任何简单的策略并声称它会普遍有效,因为打包工具的业务是让 OEP 找到一个非常困难的问题。此外,有一个好的封隔器,找到 OEP 还是不够的。话虽如此,我确实有一些建议。
我建议您阅读有关 Justin unpacker 的这篇论文,他们使用了当时相当有效的启发式方法,您或许可以从中获得一些收获。他们至少会将候选入口点的数量减少到可管理的数量:
A study of the packer problem and its solutions (2008) by Fanglu Guo , Peter Ferrie , Tzi-cker Chiueh
还有一些网络分析页面可以告诉你很多关于你打包程序的信息。例如,恶意软件分析器位于: http ://eureka.cyber-ta.org/
这是另一个目前处于关闭状态,但过去做得不错,我想很快就会再次恢复的): http ://bitblaze.cs.berkeley.edu/renovo.html