【发布时间】:2010-08-14 21:41:22
【问题描述】:
我的客户要求我编写一个自定义的加密可执行文件,以防止许可系统被轻易破解。现在,我明白这是一种虚假的安全感,但尽管如此,他还是坚持了下来。
所以,我挖掘了可移植可执行文件的知识并提出了这个想法:
- 加密可执行文件
- 将此粘贴到加载程序可执行文件的末尾以及它的大小
- 加载器解密数据
- 它将代码复制到分配有具有可执行权限的 VirtualAlloc 的页面
- 它找到应用程序的入口点
- 跳到那里,我们都准备好了。
我在跳转那里的部分有问题。我怎样才能做到这一点?如果我要设置一个指向它的函数指针,签名会是什么?加载的可执行文件的 main() 函数的签名?还是我需要诉诸组装?
我了解在加载代码后可能需要更正绝对地址。如何检查是否需要,以及如何实际执行此操作?
编辑:在 windows 上工作并使用 GCC 编译。如果需要,我可以切换微软编译器。
Edit2:澄清一下:我知道这几乎没有意义。我相信它代表任何类型的 DRM。由我的客户决定,尽管我警告过他,但他仍然想要。
提前致谢。
【问题讨论】:
-
在我看来,您输入的解决方案有点问题,您的函数在做什么会跳转到其他函数?它们是固定的其他地址,我看到这个解决方案有很多问题,比如静态链接库在哪里?谁使用加密代码?
-
我会说 - 如果你真的想要 DRM。买它。为什么?即使您确实得到了“某些东西”并开始工作。当它破裂时,你在六个月内做什么?跟上饼干的步伐是一项全职工作。
-
这由我的客户决定。我真的不在乎他是否做出了错误的决定。我诚实地警告过他,他仍然想要它。
-
这里有一些不错的提示:inner-smile.com/nocrack.phtml#howto
标签: c++ windows assembly loader