检查ELF是否在Linux中包装了UPX

时间:2011-02-03 15:43:41

标签: c linux packer upx

我对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编写代码,这很难理解。

谢谢,欢迎任何帮助。

编辑:关于赏金。他们的答案必须给出一个有效的例子,因为我尝试了不同的方法而且它们并不总是有效,如下面的示例 谢谢

2 个答案:

答案 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

查看如何指定文件中的偏移量。

例如,在你的程序中你应该:

  1. 打开正在测试的文件进行阅读
  2. 跳至其中一个偏移
  3. 检查是否存在预期的字符串
  4. 重复直到不再有抵消
  5. 有趣的是,在我的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的源代码。