我对ELF格式如何工作或者如何通过代码访问它的头文件和数据没有任何了解,但是我需要检查一个ELF二进制文件是否被UPX for Linux压缩(压缩?)。
用strings
检查二进制文件我看到stringUPX!
所以我想我可以使用它。 hex的二进制显示string和二进制中的位置,我可以认为它是ELF头文件的一部分(请纠正我,如果我错了)。 这是一个转储:
00000000 .ELF........................4... 00000020 ........4. ...(................. 00000040 ........................@...@... 00000060 @.....................[.UPX!.... 00000080 ............T............?d..ELF
我不知道这看起来不错,对不起。
有谁知道如何检测Linux上的UPX? 如果没有,如何访问标题并获得该UPX!
string(标题的名称?)?
我查看了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
看看如何指定文件内的偏移量。
例如在你的程序中你应该:
有趣的是,在我的Ubuntu 64位,UPX压缩文件没有被检测到,因为这个测试从/usr/share/misc/magic
丢失:
>>180 string UPX! UPX compressed (64-bit)
在UPX的源代码中,有一个函数int PackW32Pe::canUnpack()
,当您执行upx -d <file>
(解压缩可执行文件)时,它首先作为测试权利运行。 它显示了要测试哪些偏移来检测文件是否与UPX打包在一起。 我发现代码清晰易懂。 我推荐一个带语法高亮的编辑器。
您可以在项目网站上下载UPX的源代码。