在Linux中检查ELF是否与UPX打包在一起
收藏

我对elf格式的工作原理以及如何通过代码访问其头和数据一无所知,但是我需要检查elf二进制文件是否已被压缩(打包?)使用UPX for Linux。
strings检查二进制文件,我看到了字符串UPX!,所以我想我可以使用它。hexediting二进制文件显示字符串,对于二进制文件中的位置,我可以假设它是elf头文件的一部分(如果我错了,请纠正我)。这是一堆垃圾:

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

查看如何指定文件中的偏移。
例如,在您的程序中,您应该:
打开测试文件进行读取
跳到这些偏移中的一个
检查期望的字符串是否存在
重复直到不再偏移
有趣的是,在我的ubuntu64位系统中,没有检测到upx压缩文件,因为/usr/share/misc/magic中缺少这个测试:
>>180   string      UPX!        UPX compressed (64-bit)

公众号