可执行文件的加密

encryption of an executable file

是否可以加密 .exe 文件,使用户只能执行该文件,而不能读取或打开该文件?

我知道 C/C++ exe 文件很难反编译,但为了提高安全性,我想实现它。

这可能吗。

如果您需要有关我的要求的更多详细信息,请告诉我。

我想用C语言来实现

是的,在最宽泛的意义上是可能的。

为了执行代码,CPU 需要查看纯文本。所以你必须提供二进制文件中的密钥。加密和打包代码段的唯一远程有效方法是,如果您在功能边界处对它们进行加密和解密,并且仅当解密发生在函数进入时,然后在离开函数时才重新加密。这将提供一个小障碍来防止转储二​​进制文件,因为它是 运行 但必须与强大的混淆相结合,这是一种非常常见的技术并且坦率地说欺骗了很多习惯于标准打包方案的新手逆向者可执行文件或“stub”加密方案。

当您隐藏信息时,在运行时也很好地隐藏信息也很重要。一个称职的逆向工程师会检查你的程序的状态,因为它是 运行。因此,使用在加载时解密的静态变量或使用在加载时完全解压的打包将导致快速查找。请注意您在堆上分配的内容。所有堆操作都通过 API 调用进行,并且可以轻松地记录到文件中并进行推理。堆栈操作通常更难跟踪,因为它们的频率很高。动态分析与静态分析同样重要。您需要随时了解您的程序状态以及信息位于何处。

听起来您的目标是保护您的可执行文件,为此您更直接的目标应该是确保逆向工程师几乎不可能找到稳定的心理基础。你泄漏的信息越少,环境变化越大,学习就越困难。如果您不是经验丰富的逆向工程师,设计难以逆向工程的东西几乎是不可能的。