我一直在尝试反向工程已经装满VMProtect v3.0的恶意软件。我的第一个直觉是为此搜索一种自动化方法,然后我找到了一个脚本。不幸的是,解压缩受保护的二进制文件VMProtect的脚本在3.0版中不起作用。然后对这些部分进行编码,然后将这些部分的访问权限更改回其初始值。通过在VirtualProtect API上设置断点,我看到了这一点。在最后一次调用VirtualProtect之后,我将访问断点放在了executable正确的部分上,当我遇到断点时,我希望它是OEP,但是当我转储该进程时,它没有运行。根据我的研究,我知道您需要重建IAT,而像UIFScylla这样的工具将无济于事。您能否给我一些有关如何找到OEP或如何处理这种打包机制的提示?

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

UPDATE

Sha256哈希:8200755cbedd6f15eecd8207eba534709a01957b172d7a051b9cc4769ddbf233

评论

好的,因此该恶意软件甚至可以使用有效的标记剂通过VMProtect(v3.0.465)进行保护。由于VMP是一种商业保护程序,因此如果我详细讨论步骤,管理员希望评论它是否会违反本网站的规则根据OP的要求,找到OEP并重建IAT。我不愿意花几个小时来写答案,而只是删除它,因为我发现这些天来很频繁(抱歉)。等待确认继续。谢谢。

等待的手指越过...

#1 楼

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


VMAttack:对基于虚拟化的打包二进制文件进行混淆处理链接到使用VMAttack IDA PRO插件的PDF Paper。

解开Rolf Rolles的虚拟化混淆器。

评论


您还应该提到syntia(github.com/RUB-SysSec/syntia)。 (论文:usenix.org/system/files/conference/usenixsecurity17/…)

–kn000x
18 Mar 9 '18 at 10:10



#2 楼

在“ VM exit”指令上设置一个断点(尽管如果示例使用的是multi VM选项,我可能不记得其中的多个名称,但是可能会有多个中断点)。从这里可以看到VM退出时将控制权转移到哪里。在“打包程序”模式下它将退出多次。最终它将退出到OEP。

评论


嘿,我问了问题之后,我读了您有关反转FinFisher的文章。阅读它们之后,我意识到这不像在API调用上设置断点那样容易。我从他们那里学到了很多东西。现在,我试图找到Vm退出指令。至少对我来说,要与VMProtect打交道并不容易

–rustam Shirinov
18年3月12日在23:15

#3 楼

既然您说的是恶意软件,请提供目标的SHA256 / MD5哈希值或Virustotal / Hybrid-analysis链接,以便我们快速进行研究。

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

例如,当尝试对VMP v3.xx打包的目标进行尝试时,许多成功找到OEP和重建IAT的技术对失败的尝试都是失败的。

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

我想可以做的是,如果您向我们提供该恶意软件的链接/哈希,我将能够对其进行研究,然后在该版本的VMProtect上下文中讨论答案。用于打包恶意软件。

注意::由于VMProtect是一种商业保护程序,因此我认为仅在逆转受其保护的恶意软件的情况下才讨论它,以避免此问题被关闭。 -topic或太宽泛。.

因此,我想除非您能向我们提供您想要反转的目标的更多详细信息,否则我们将无法继续进行。

评论


我用示例的sha256hash更新了我的问题

–rustam Shirinov
18 Mar 8 '18 at 10:33

#4 楼

注意:我从来没有自己解压缩VMProtect。最终导致.dlls内部的代码。如果可执行文件正确转储而不重建导入表,则可执行文件可能会运行,但是.dll地址更改后,重启后它将无法工作。通过跟踪或设置导入的.dll的执行断点并调用重定向,可以轻松,但不可靠地知道哪种重定向导致导入的函数。您还可以深入研究VMProtect的导入解析机制。

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