我不知道ELF格式是如何工作的,也不知道如何通过代码访问它的头和数据,但是我需要检查ELF二进制文件是否已被压缩(压缩?)用于Linux的UPX。
使用strings检查二进制文件时,我看到了字符串UPX!,所以我想我可以使用它。十六进制编辑二进制文件会显示字符串,对于二进制文件中的位置,我可以假设它是ELF的一个头文件的一部分(如果我错了,请纠正我)。这是其中的一个转储:
00000000 .ELF........................4...
00000020 ........4. ...(.................
00000040 ........................@...@...
00000060 @.....................[.UPX!....
00000080 ............T............?d..ELF我不知道这看起来好不好,抱歉。
有谁知道如何在Linux上检测UPX?如果没有,如何访问报头并获取UPX!字符串(报头的名称?)?
我确实研究了UPX的源代码,但所有的东西都是C++的,我正在寻找用C语言编写代码,这真的很难理解。
谢谢,欢迎任何帮助。
编辑:关于赏金。他们的回答必须给出一个可靠的例子,因为我已经尝试了不同的方法,但它们并不总是有效的,就像下面的示例。
谢谢
发布于 2011-02-04 00:06:23
以下是用于检测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)发布于 2011-02-09 19:55:20
在UPX的源代码中,有一个函数int PackW32Pe::canUnpack(),当你执行upx -d <file> (解包可执行文件)时,它第一次作为测试运行。它显示了要测试哪些偏移量,以检测文件是否打包了UPX。我发现代码清晰易懂。我推荐一个带有语法突出显示的编辑器。
你可以在project site上下载UPX的源代码。
https://stackoverflow.com/questions/4888237
复制相似问题