2011-02-03 73 views
3

擠滿了UPX我的ELF格式是如何工作以及如何通過代碼來訪問它的頭和數據零知識,但是我需要檢查的ELF二進制文件是否已被壓縮(打包的?)與UPX的Linux。檢查是否已ELF在Linux中

檢查與strings二進制文件我看到字符串UPX!所以我想我可以使用它。對二進制進行二進制編碼顯示字符串和二進制位置,我可以認爲它是ELF頭文件的一部分(如果我錯了,請糾正我的錯誤)。這是一個轉儲:

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

我不知道這看起來不錯,對不起。

有誰知道如何檢測Linux上的UPX?如果沒有,如何訪問標題並獲得UPX!字符串(標題的名稱?)?

我也考慮了UPX的源代碼,但一切是C++,我期待在C代碼這一點,這真的很難跟進。

謝謝,歡迎任何幫助。

編輯:關於賞金。他們的回答必須給出一個可靠的例子,因爲我嘗試了不同的方法,而且他們並不總是有效,就像下面的例子。
謝謝

回答

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 64bit中,沒有檢測到UPX壓縮文件,因爲這個t EST從/usr/share/misc/magic丟失:

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

謝謝。我完全糊塗壽。 `magic`是具有`file`所有引用的文件嗎?我如何從我的代碼中調用這個? – Jessica 2011-02-03 17:32:04

2

在源代碼UPX,有一個功能int PackW32Pe::canUnpack()這是第一次運行的測試權當你做一個upx -d <file>(解壓縮可執行文件)。它顯示要測試哪些偏移以檢測文件是否與UPX打包在一起。我發現代碼清晰易懂。我推薦一個帶語法高亮的編輯器。

您可以在project site下載源代碼UPX。