3

我对 ELF 格式的工作原理或如何通过代码访问其标头和数据的知识为零,但是我需要检查 ELF 二进制文件是否已使用 UPX for Linux 进行压缩(打包?)。

strings用我看到的字符串检查二进制文件,UPX!所以我想我可以使用它。对二进制文件进行十六进制编辑会显示字符串,对于二进制文件中的位置,我可以假设它是 ELF 标头之一的一部分(如果我错了,请纠正我)。这是一个转储:

00000000    .ELF........................4...
00000020    ........4. ...(.................
00000040    ........................@...@...
00000060    @.....................[.UPX!....
00000080    ............T............?d..ELF

不知道好不好看,不好意思。

有谁知道如何在 Linux 上检测 UPX?如果没有,如何访问标题并获取该UPX!字符串(标题的名称?)?

我确实查看了 UPX 源代码,但一切都是 C++,我正在寻找用 C 编写代码,这真的很难理解。

谢谢,欢迎任何帮助。

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

4

2 回答 2

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. 重复直到没有更多的偏移

有趣的是,在我的 ubuntu 64 位中,没有检测到 UPX 压缩文件,因为以下测试缺少/usr/share/misc/magic

>>180   string      UPX!        UPX compressed (64-bit)
于 2011-02-03T16:06:23.043 回答
2

在 UPX 的源代码中,有一个函数在您执行(解压缩可执行文件)int PackW32Pe::canUnpack()时首先作为测试权运行。upx -d <file>它显示要测试哪些偏移量以检测文件是否使用 UPX 打包。我发现代码清晰易懂。我推荐一个带有语法高亮的编辑器。

您可以在项目站点上下载 UPX 的源代码。

于 2011-02-09T11:55:20.293 回答