我正在做一些关于加密/软件保护的研究。我想链接动态加密的共享对象(Linux、x86架构、ELF32/64格式)
- 要保护的代码包含在共享对象中(已加密,没有有效的 ELF)。
- 对象本身是一个有效的 ELF 文件,包含一个 init 方法
- 应该开始解密,这取决于加载程序调用的 init 函数中的可用许可证。
- 加密后,代码作为有效的 ELF 文件存在于内存中。
还有一些进一步的要求:
- 不得存储解密后的代码(即使是临时存储在磁盘上)- 防止容易的对象转储和代码重用
- 不得发布保护算法,因此我可能不会使用部分 GNU 代码(即使人们在那里做了很棒的工作!)
我认为困难的方法是重新实现一个提供所需功能的加载器/链接器...也许有一种方法可以使用 Linux rtld 或它的一部分,其他链接器?
有没有更简单的方法?
感谢您的每一个想法/提示
一些相关链接/信息
- 解决类似问题的加壳器:http://www.upx.org/ (不适用于我的一个测试共享对象)
- 有关加载共享对象的一些细节 http://smilax.org/135/dsohowto.pdf
最佳答案
看看Shiva如果你对此感兴趣。没有向公众发布源代码,但理论仍然存在。
关于c - 使用 rtld/free loader/linkers 加载加密的共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5740853/