【发布时间】:2019-03-16 21:03:12
【问题描述】:
我正在做一些加密/软件保护方面的研究。我要链接动态加密的共享对象(Linux、x86 架构、ELF32/64 格式)
- 要保护的代码包含在共享对象中(加密,没有有效的 ELF)。
- 对象本身是一个有效的 ELF 文件,包含一个 init 方法
- 应该开始解密,取决于加载程序调用的 init 函数中的可用许可证。
- 加密后,代码作为有效的 ELF 文件存在于内存中。
还有一些进一步的要求:
- 不得存储解密的代码(即使是临时存储在磁盘上) - 防止对象转储和代码重用
- 保护算法不得公开,所以我可能不会使用部分 GNU 代码(即使人们在那里做了很棒的工作!)
我认为困难的方法是重新实现一个提供所需功能的加载器/链接器......也许有一种方法可以使用 Linux rtld 或它的一部分,其他链接器?
有没有更简单的方法?
感谢您的每一个想法/提示
一些相关链接/信息
- 解决类似问题的打包程序:http://www.upx.org/ (不适用于我的一个测试共享对象)
- 关于加载共享对象的一些细节http://smilax.org/135/dsohowto.pdf
【问题讨论】: