我对ELF格式如何工作或如何通过代码访问其标头和数据一无所知,但我需要检查是否已使用UPX for Linux压缩(打包?)ELF二进制文件。
用strings
检查二进制文件我看到字符串UPX!
所以我想我可以使用它。对二进制进行Hexediting显示字符串,对于二进制文件中的位置,我可以假设它是ELF标题之一的一部分(如果我错了,请纠正我)。这是一个转储:
00000000 .ELF........................4...
00000020 ........4. ...(.................
00000040 ........................@...@...
00000060 @.....................[.UPX!....
00000080 ............T............?d..ELF
我不知道这看起来不错,对不起。
有谁知道如何在Linux上检测UPX?如果没有,如何访问标题并获取UPX!
字符串(标题的名称?)?
我确实查看了UPX源代码,但一切都是C ++,我希望用C编写代码,这很难理解。
谢谢,欢迎任何帮助。
编辑:关于赏金。他们的答案必须给出一个有效的例子,因为我尝试了不同的方法而且它们并不总是有效,如下面的示例 谢谢
答案 0 :(得分:4)
这些是检测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
查看如何指定文件中的偏移量。
例如,在你的程序中你应该:
有趣的是,在我的ubuntu 64位中,未检测到UPX压缩文件,因为/usr/share/misc/magic
缺少此测试:
>>180 string UPX! UPX compressed (64-bit)
答案 1 :(得分:2)
在UPX的源代码中,有一个函数int PackW32Pe::canUnpack()
,当你执行upx -d <file>
(解包可执行文件)时,它首先作为测试权运行。它显示了要测试哪些偏移以检测文件是否使用UPX打包。我发现代码清晰易懂。我推荐一个带语法高亮的编辑器。
您可以在project site上下载UPX的源代码。