PE32+ 可执行文件:.text 段加密

逆向工程 C++ 加密 x86-64
2021-06-18 14:32:14

我正在研究 PE 段加密(在 C++ 中)。我完成了 PE32 .text 段加密。我将存根段添加到将在运行时解密 .text 段的 PE。在存根函数中使用内联汇编。但是我无法在 PE32+ 可执行文件(64 位 exe)中实现相同的方法,因为它不支持内联汇编。我能够添加存根并加密文本段。

问题在于存根中的解密逻辑。

我尝试添加单独的 .asm 文件但失败了,因为我是汇编语言的新手。可以不用汇编语言吗?请帮助我提供有关 PE32+ 段加密的任何好的文档或示例。

2个回答

如果您要使用程序集存根,则可以直接将其修补到二进制文件中。你真的不需要使用 C++ 来为你做这件事。
要为 32 位和 64 位执行此操作,您可以使用CreateFileCreateFileMappingMapViewOfFile这将允许您转储 PE 的 .text 部分,基本上是所有部分,您可以对其进行任何操作。然后你可以添加一个函数来解密它或其他任何东西和/或编写一个存根来在足够大的空间中完成它的解密部分以适合该存根,或者只是将另一个部分添加到 PE

您不需要汇编语言来为该.text部分添加解码器存根您可以只用 C/C++ 编写代码,将其编译为与位置无关的可执行文件,并提取.text它将拥有的唯一部分。之后,您只需使用普通的 PE 编辑器(CFF 资源管理器非常强大)手动添加该.stub部分并粘贴.text从与位置无关的编译代码中提取部分内容如果您不想遇到创建位置独立代码的麻烦,您可以使用github 上提供的位置独立 Shellcode