使用 rtld / 免费加载器/链接器加载加密共享对象
我正在做一些加密/软件保护方面的研究。我想链接动态加密的共享对象(Linux,x86架构,ELF32/64格式)
- 要保护的代码包含(加密的,没有有效的ELF)在共享对象中。
- 对象本身是一个有效的 ELF 文件,包含一个 init 方法。
- 应该开始解密,具体取决于加载程序调用的 init 函数中的可用许可证。
- 加密后,代码将作为有效的 ELF 文件存在于内存中。
还有一些进一步的要求:
- 解密的代码不得存储(即使暂时存储在磁盘上) - 防止容易的对象转储和代码重用
- 保护算法不得发布,因此我可能不会使用部分 GNU 代码(即使人们做了很棒的工作!)
我认为困难的方法是重新实现提供所需功能的加载器/链接器...也许有一种方法可以使用 Linux rtld 或其一部分,其他链接器? 有没有更简单的方法?
感谢您的每一个想法/提示
一些相关链接/信息
- 打包程序解决类似的问题: http://www.upx .org/ (不适用于我的测试共享对象之一)
- 有关加载共享对象的一些详细信息http://smilax。 org/135/dsohowto.pdf
I am doing some research in encryption/software protection. I want to link dynamically encrypted shared objects (Linux, x86 Architecture, ELF32/64 format)
- The code to be protected is contained (encrypted, no valid ELF) in the shared object.
- The object itself is a valid ELF-file, containing an init method
- The decryption should be started, dependend on a available license in the init function called by the loader.
- After encryption the code is present as valid ELF-file in memory.
There were some further requirements:
- The decrypted code must not be stored (even temporarily on disk) - prevent easy object dump and code reuse
- The protection algorithm must not be published, so I may not use parts of the GNU code (even people do a great work there!)
I think the hard way is to reimplement a loader/linker providing the needed functionality... Perhaps there may be a way to use the Linux rtld, or parts of it, other linkers?
Is there an easier way?
Thanks for every idea/hint
Some related links/Infos
- a packer solving a similar kind of problem: http://www.upx.org/
(did not work for one of my test shared objects) - Some details about loading shared objects http://smilax.org/135/dsohowto.pdf
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您对此感兴趣,请查看 Shiva。没有向公众发布源代码,但理论仍然存在。
Take a look at Shiva if you're interested in this. There was no source code released to the public but the theory is still there.
很久以前,Phrack 推荐了一篇关于 ELF 的文章加密。很久以前,就有一个名为 BurnEye 的程序来加密 ELF 二进制文件。
A long time ago, Phrack featured an article on ELF encryption. Also a long time go, there was a program called BurnEye to encrypt ELF binaries.