如何生成带有“指令伪装”混淆的二进制文件?

逆向工程 工具 混淆
2021-06-21 01:37:30

我想知道使用指令伪装生成代码二进制文件的最简单方法是什么(请参阅此问题)。

这里的问题是您首先必须生成正确的汇编代码,然后使用给定的方法将其直接隐藏到二进制文件中。手工操作非常痛苦,尤其是当您必须处理代码中的静态跳转时。现在,我正在使用nasm,更准确地说是它的预处理器来执行伪装操作。但是,我想知道是否有更好的方法来做到这一点。

那么,您使用什么工具或技巧来生成此类二进制文件?

1个回答

一般来说,您要做的是在可执行文件中创建一个新段,将入口点更改为新段。您的新段具有原始代码的解密代码,现在更改的入口点意味着加载可执行文件时要执行的第一个代码是您的解密代码。

然后,您的加密代码要么映射一个段,通常在原始可执行段所在的地址处,然后将源段解密为映射的段,要么直接就地解密该段。如果您的代码就地解密了该段,您需要确保从原始可执行文件中删除任何重定位。

在所有情况下,除非您将解密的可执行文件段映射到其原始预期地址,否则您需要在解密后自己进行重定位,以免可执行文件崩溃。我个人会实施重定位以支持 ASLR 之类的东西。解密和重定位后,您只需调用原始入口点。

这样您就不必为特定的二进制文件创建加密或“屏蔽”代码,并且将来应该可以将其应用于任意二进制文件。