虚拟机如何使二进制的本地静态和动态反转变得更加困难?


5

反向工程中实际上常见的知识是尝试在“虚拟机保护”或虚拟化程序上使用本机调试器或反汇编程序更难以分析。但是,我想知道具体的具体方式以及原因。请列出一些原因以及是否有各种原因已被人工克服(不使用脚本)的相关工作。

如果这个问题被认为过于笼统,让我们关注一个具体的例子。示例是我们试图使用本地调试器(如x64Dbg)来查找对Windows API CreateFile的调用,并找出文件写入的位置。在一个不受保护的程序中,我们可以打开它,在CreateFile上放置一个断点并在检查交叉引用的调用之后找到调用。

这个过程如何成功地被Themida Protector阻挡?显然,在这一天结束时,程序仍然必须写入文件,但是哪些步骤会严重阻碍分析?

  0

这不只是关于使用调试器/反汇编更加困难这是整个分析过程。问题不集中。 当我看到这个主题时,对此太多了。具体关于最后一部分。如果您有示例,请将其添加到问题中以便于回答。 23 11月. 172017-11-23 11:05:18

  0

@ EWD-0-你的意思是要检查的特定文件或特定类型的虚拟机? 23 11月. 172017-11-23 11:27:36

  0

查看新增示例 23 11月. 172017-11-23 11:38:54

  0

http://www.msreverseengineering。 com/blog/2018/1/23/a-walk-through-tutorial-with-code-on-staticically-unpacking-the-finspy-vm-part-one-x86-deobfuscation,https://www.welivesecurity。 COM /可湿性粉剂内容/上传/ 2018/01/WP-FinFisher.pdf 24 1月. 182018-01-24 13:48:17

0

所以据我所知,这个问题有两个主要部分。首先,为什么很难反转/分析虚拟化代码。标准汇编指令具有特定的字节码,因此您可以了解程序中发生了什么。通过使用虚拟化,可以创建任意字节代码,然后将其转换为系统可以理解的原始代码。这意味着通过查看代码,您无法了解发生了什么。

当我们遇到虚拟化机器时,它会在运行时部分产生原始代码部分,而不是一次性生成所有代码。所以作为一名分析师,您可以在运行时看到实际装配的小部分。

关于CreateFile/WriteFile的第二部分。如果通过这个例子,你的意思是分析一个程序的行为,大多数情况下,虚拟化或正常的可执行程序没有区别。在这两种情况下,您都可以在调试器中将BP放在CreateFile/WriteFile中,或者更好的方法是进行黑盒监控。

值得一提的是,我们面临的扭转虚拟化代码的另一个问题是,它们大多也受益于重型保护器/反调试技术。

http://resources.infosecinstitute.com/reverse-engineering-virtual-machine-protected-binaries/#gref

http://resources.infosecinstitute.com/tutorial-building-reverse-engineering-simple-virtual-machine-protection/#gref