gpt4 book ai didi

在 Linux 中检查 ELF 是否使用 UPX 打包

转载 作者:可可西里 更新时间:2023-11-01 11:47:50 25 4
gpt4 key购买 nike

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

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

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

我不知道这是否好看,抱歉。

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

我确实查看了 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

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

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

  1. 打开被测文件进行阅读
  2. 跳到这些偏移量之一
  3. 检查是否存在预期的字符串
  4. 重复直到没有偏移

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

>>180   string      UPX!        UPX compressed (64-bit)

关于在 Linux 中检查 ELF 是否使用 UPX 打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4888237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com