我对 ELF 格式的工作原理或如何通过代码访问其 header 和数据一无所知,但是我需要检查是否已使用 UPX for Linux 压缩(打包?)ELF 二进制文件。
使用 strings
检查二进制文件我看到了字符串 UPX!
所以我想我可以使用它。对二进制文件进行十六进制编辑会显示字符串,对于二进制文件中的位置,我可以假设它是 ELF header 之一的一部分(如果我错了,请纠正我)。这是一个转储:
00000000 .ELF........................4...
00000020 ........4. ...(.................
00000040 ........................@...@...
00000060 @.....................[.UPX!....
00000080 ............T............?d..ELF
不知道这样好看不,抱歉。
有谁知道如何在 Linux 上检测 UPX?如果没有,如何访问标题并获取该
UPX!
字符串(标题的名称?)?我确实查看了 UPX 源代码,但一切都是 C++,我希望用 C 编写代码,这真的很难理解。
谢谢,欢迎任何帮助。
编辑:关于赏金。他们的回答必须给出一个有效的例子,因为我尝试了不同的方法,但它们并不总是有效,如下面的示例。
谢谢
最佳答案
这些是检测 UPX 压缩文件的测试:
>>>>(0x3c.l+0xf8) string UPX0 \b, UPX compressed
>>>>(0x3c.l+0xf8) search/0x140 UPX2
>>>(&0x7c.l+0x26) string UPX \b, UPX compressed
>>>&0x26 string UPX \b, UPX compressed
>>85 string UPX \b, UPX compressed
用
man 5 magic
查看文件内的偏移量是如何指定的。
例如在你的程序中你应该:
有趣的是,在我的 64 位 ubuntu 中,未检测到 UPX 压缩文件,因为
/usr/share/misc/magic
中缺少此测试:>>180 string UPX! UPX compressed (64-bit)
关于在 Linux 中检查 ELF 是否包含 UPX,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4888237/