我有一个奇怪的问题。我有一个 tararchive.tar.gz
档案,里面装满了纯文本文件。然后将该存档 gpg 加密为archive.tgz.gpg
. 总共archive.tgz.gpg
小于 100KB。
现在,我想让它archive.tgz.gpg
看起来像一个 linux 二进制文件,并使用大多数 unix 标准实用程序对其进行非混淆处理。我知道它(很可能)不会作为二进制可执行文件工作,这没关系。但粗略一看,它应该大致显示为损坏的二进制可执行文件。
我得到的最远的尝试是尝试使用修改标题cat
,dd
因此file
无法正确返回文件类型,但我在网上找到有关执行此操作的大量信息方面还没有走得太远。
如果有人能够帮助我指出正确的方向,我将不胜感激。谢谢!
您可以将有效负载完全嵌入到工作可执行文件中。
包含
unsuspicious.c
任何程序:使用这种技术,有效载荷将最终出现在二进制文件的 .data 部分中。要检索它,请提取整个数据部分:
其他一些数据在我的 104 字节有效载荷之前。我曾经
nm unsuspicious
确定 和 之间的确切差异__data_start
,_binary_message_txt_gpg_start
在我的例子中是 16 个字节。知道了这一点,我可以检索有效负载:这是否是您目标的有效实现取决于您是否考虑
nm
,objcopy
和dd
“标准实用程序”。当然,您始终可以向程序本身添加一些逻辑,以便在询问得当时打印有效负载。重点是什么?只需制作一个嵌入文件的可执行文件。
会给你一些实际上是 ELF 可执行文件的东西。它不会运行(没有
_start
可以执行的符号)。如果你想要,编写一个带有
main
函数的 C/C++/... 程序,例如 main.cint main(){}
,然后使用构建包含数据的目标文件ld --relocatable --format=binary archive.tgz.gpg mixin.o
,最后与你的程序一起构建gcc main.c mixin.o -o main
。您可以相当简单地取出数据,并且可以使用相当标准的 binutils 工具
readelf
或objcopy
. 更简单的是,您可以让程序仅在满足特定条件时才将内容提取到文件中。(例如检查某个字符串是否在 中environ
)现在,任何专家都不会被这一点所迷惑——您的嵌入式存档具有很高的经验熵
radare2
,并且无论您做什么混淆,诸如二进制分析工具之类的都会检测到这一点。您可以做的是通过例如将密文的每个字节映射到来自现实世界的一组典型机器代码摘录(甚至不一定是恒定长度,但无前缀)的不同成员来人为地扩大加密档案的大小C 程序。但是,您必须对其进行去映射——这将需要您的字典,并且仅使用标准工具会变得相当烦人。