【发布时间】:2017-06-24 15:16:48
【问题描述】:
我见过一些二进制文件,其中开发人员似乎有点偏执,并混淆了二进制文件中的所有文本。我以前从未见过类似的东西,也没有找到任何明显的选项来编译带有隐藏文本的 ELF。甚至标准的操作系统 API 字符串也被隐藏了,这很奇怪,因为它们通常是可见的。
这些程序在运行时不会有任何未公开的文本。未知文本除外。但隐藏全部内容只是危险信号,它看起来很可疑。
有没有简单的方法可以隐藏编译成 ELF 的文本?使用简单的编译器/链接选项即可。我想可以在 main() 中插入一个解码器,但是如何轻松编码文本部分?
我可以想象一种自定义的方法是在代码中使用一个带有密钥的隐式解码器。然后使用该键对 ELF 的文本进行编码。这样就很容易编码了。
【问题讨论】:
-
你有什么问题?如果您所追求的只是混淆,只需使用固定密钥对其进行异或运算……但是,“标准操作系统 API 字符串”是什么意思?从共享库导入的符号?这确实很奇怪,我唯一能想到的确实是一个自定义加载器首先解密整个文件(就像
upx用于压缩一样)。 -
我想知道是否有一种简单的方法可以做到这一点。无论混淆方法如何。假设为编译器选项添加一个开关,该开关将隐藏二进制文件中的文本。我检查了 ELF 格式,但在标志或将文本指定为隐藏的任何内容中都没有突出显示。然后由 ELF 加载程序解码。我所说的“标准 OS API 字符串”是指库或 solib 的名称。有一种有趣的说法。 :-)
-
不,没有“简单”的方法,这样的功能通常没有多大意义。好吧,除了 -- 看到 chqrlie 的回答并重新阅读我自己的评论 --
upx(或类似工具)确实如此!它不加密任何东西,但当然,压缩文本也不能直接读取;)
标签: c encryption elf