首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查Linux中的ELF是否与UPX一起打包

检查Linux中的ELF是否与UPX一起打包
EN

Stack Overflow用户
提问于 2011-02-03 23:43:41
回答 2查看 6K关注 0票数 3

我不知道ELF格式是如何工作的,也不知道如何通过代码访问它的头和数据,但是我需要检查ELF二进制文件是否已被压缩(压缩?)用于Linux的UPX。

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

代码语言:javascript
复制
00000000    .ELF........................4...
00000020    ........4. ...(.................
00000040    ........................@...@...
00000060    @.....................[.UPX!....
00000080    ............T............?d..ELF

我不知道这看起来好不好,抱歉。

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

我确实研究了UPX的源代码,但所有的东西都是C++的,我正在寻找用C语言编写代码,这真的很难理解。

谢谢,欢迎任何帮助。

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

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-04 00:06:23

以下是用于检测UPX压缩文件的测试:

代码语言:javascript
复制
>>>>(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

使用

代码语言:javascript
复制
man 5 magic

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

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

  1. 打开正在测试的文件以读取
  2. 跳到这些偏移量之一
  3. 检查预期的字符串是否在那里
  4. 重复,直到不再有偏移量

有趣的是,在我的ubuntu64位中,不能检测到UPX压缩文件,因为这个测试在/usr/share/misc/magic中丢失了。

代码语言:javascript
复制
>>180   string      UPX!        UPX compressed (64-bit)
票数 4
EN

Stack Overflow用户

发布于 2011-02-09 19:55:20

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

你可以在project site上下载UPX的源代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4888237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档