gpt4 book ai didi

c++ - 将数据作为代码执行?

转载 作者:可可西里 更新时间:2023-11-01 13:27:52 25 4
gpt4 key购买 nike

我的客户要求我编写一个自定义的加密可执行文件,以防止轻易破解许可系统。现在,我明白这是一种虚假的安全感,但尽管如此,他还是坚持了下来。

因此,我挖掘了我对可移植可执行文件的了解并提出了这个想法:

  • 加密可执行文件
  • 将其连同大小一起粘贴到加载器可执行文件的末尾
  • 加载程序解密数据
  • 它将代码复制到分配有具有可执行权限的VirtualAlloc的页面
  • 它找到应用程序的入口点
  • 跳到那里,我们都准备好了。

我对跳到那里的部分有疑问。我怎样才能做到这一点?如果我要为它设置一个函数指针,那么签名是什么?加载的可执行文件的 main() 函数的签名?还是我需要诉诸组装?

我知道加载代码后可能需要更正绝对地址。我如何检查是否需要,以及如何实际执行此操作?

编辑:在 Windows 上工作并使用 GCC 进行编译。如有必要,我可以切换 Microsoft 编译器。

Edit2:澄清一下:我知道这几乎毫无意义。我相信它代表任何类型的 DRM。由我的客户决定,尽管我警告过他,他仍然想要。

提前致谢。

最佳答案

不幸的是,跳转到代码的入口点是您最不担心的事情。 Portable Executable (PE) 文件(Windows 上用于 EXE 和 DLL 文件的文件格式)不是您可以加载到单个内存块中然后运行的文件。您的自定义 PE 加载程序必须处理以下工作:

  • 将 PE 文件中的各种代码和数据部分加载到单独的内存块中。

  • 从导入表中解析依赖关系以加载您的 EXE 所依赖的 DLL。

  • 执行重定位。

正确处理所有细节可能是一项非常复杂的工作。我建议您寻找一种您可以购买的工具来执行这种 EXE 加密。

编辑:快速谷歌建议您可能想看看以下内容:

  • EXECryptor (专有)

  • RLPack (专有)

  • UPX (GPL) 据我所知,这个仅进行压缩,但您可以使用 The Source 添加加密(如果 GPL 符合您的需求)。

肯定会有更多这样的工具 -- 这只是快速搜索的结果。

另一个编辑:

MSDN 杂志刊登了 Matt Pietrek 的一篇文章,名为“深入了解 Win32 可移植可执行文件格式”(Part 1Part 2)。它包含很多关于 PE 文件格式的信息,应该对您有用。一个有趣的信息:Microsoft 链接器的最新版本默认情况下似乎忽略了 EXE 的基址重定位。您可能希望指示链接器将它们放回原处,因为您的包装器 EXE 可能已经加载到您的有效负载 EXE 的首选加载地址。或者,您可以尝试为您的包装器 EXE 提供一个奇异的首选加载地址,希望它不会干扰有效负载 EXE。

我还找到了一个 page that discusses a rudimentary PE file compressor .虽然它似乎并不完全通用,但您可能需要一些额外的工作才能使用它。

关于c++ - 将数据作为代码执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com