在受 VMProtect v3.0 保护的恶意软件中查找 OEP

逆向工程 恶意软件 开箱 反调试 反倾销
2021-06-22 00:32:46

我一直在尝试对一个包含VMProtect v3.0. 我的第一直觉是为此在谷歌上搜索一种自动化方式,然后我找到了一个脚本。不幸的是,解压VMProtect受保护二进制文件的脚本不适用于 3.0 版。

到目前为止,我已经看到加壳程序将部分的访问权限更改为可写,解密原始代码并将代码写入这些部分,然后将这些部分的访问权限更改回其初始值。我通过在VirtualProtectAPI上放置断点看到了这一点在最后一次调用后,VirtualProtect我将访问断点放在executable正确的部分上,当我的断点被击中时,我希望它是,OEP但是当我转储进程时它没有运行。

根据我的研究,我了解到您需要重建IAT和工具,例如UIF&Scylla不会有任何帮助。你能给我一些关于如何找到OEP或如何处理这种打包机制的提示吗?

PS 这是我第一次处理VMProtect受保护的恶意软件。

更新

Sha256 哈希: 8200755cbedd6f15eecd8207eba534709a01957b172d7a051b9cc4769ddbf233

4个回答

以下是一些可以广泛解决您的问题的链接:

在“VM 退出”指令上设置断点(尽管如果示例使用多个 VM 选项,我不记得其专有名称,则可能会有多个断点)。从这里您可以看到 VM 在退出时将控制权转移到何处。在“packer”模式下它会退出几次。最终它将退出 OEP。

既然你说它是恶意软件,请提供目标的SHA256/MD5哈希或病毒总数/混合分析链接,以便我快速查看它。

在某些情况下,VMP 及其保护机制在版本之间甚至构建之间的复杂性和特征方面存在巨大差异

例如,当尝试使用 VMP v3.xx打包的目标时,许多找到 OEP 和重建 IAT 的技术对于打包有 VMP v2.xx 的目标是成功的

因此,不可能描述和给出详细的规范答案来解决所有问题并涵盖所有版本的 VMP。

我想可以做的是,如果你给我们的恶意软件的链接/哈希,我将能够看看它,然后在上下文讨论的答案版本VMProtect用于包装的恶意软件。

注意::由于 VMProtect 是一种商业保护程序,我理解仅在逆转受其保护恶意软件的上下文中讨论它是合适的,以避免此问题因偏离主题或过于宽泛而被关闭。

因此,我想除非您能向我们提供有关您试图逆转的目标的更多详细信息,否则我们无法进一步进行。

注意:我从来没有自己解压过 VMProtect。

通过查看示例 unpackme,所有通常指向 IAT 的模块间调用都被直接调用替换为对我认为是 VMProtect 部分中的混淆重定向的直接调用,最终导致 .dll 中的代码。如果在不重建导入表的情况下正确转储,可执行文件可能会起作用,但是当 .dll 地址更改时,它在重新启动后将无法运行。知道哪个重定向导致哪个导入函数的简单但不可靠的方法是通过在导入的 .dll 上跟踪或设置执行断点并调用重定向。您还可以深入了解 VMProtect 的导入解析机制。

一些保护虚拟化了整个入口点功能,但我不知道 VMP 是否具有该功能。这意味着在可执行部分上设置页面保护不会在 OEP 上中断 - 它会在 OEP 函数调用的第一个非虚拟化函数上中断。虚拟化 OEP 功能在保护器部分内执行。因此,如果 OEP 是虚拟化的,我会尝试做的是找到该函数的 VM 条目(在 VMProtect 中,它是一种推送 + 调用模式)并在转储时将入口点设置为该入口点。您还可以从另一个未受保护的可执行文件中粘贴入口点函数 - 例如,如果您在同一环境中编译了该恶意软件的早期未受保护版本,在这种情况下,您甚至可以借用导入。