ELF64檔案逆向分析知識 2 製作靜態庫SIG

2021-07-25 03:44:51 字數 2932 閱讀 1813

在搭建ida除錯遠端linux的環境過程中,我在linux上使用file工具檢視elf檔案得到了一下資訊:

這個可執行檔案是使用的是靜態編譯,同時在最終生成可執行檔案時,刪除了符號表和重定位資訊。所以在ida中看到的彙編**如下:

函式呼叫都顯示的是ida生成的「啞」名(eg,sub_414410),這對分析函式功能時造成了很大障礙,因為花了很大精力分析了某乙個函式呼叫的功能後,發現這是乙個靜態庫函式,這將浪費很多的時間。

可以通過一些技巧快速的分析函式功能:

如果分析函式體內容並不多,並且沒有大量的呼叫其他函式呼叫(eg,strlen函式),可以結合ida提供的函式流程圖很容易分析出函式的功能。

如果函式體**很多或者內部呼叫的很多其他函式,可以通過觀察和函式執行相關的資料(eg,引數或其它關係的資料)變化,來猜測函式的功能。如果執行前後關鍵的資料都沒有變化那通常說明這個函式並不是分析的重點(當然這也不是絕對的,至少要在這個函式位置打上可疑記號)。

但仍有假設之外的情況,又或者你是乙個逆向偏執狂,那我們有沒有其他辦法呢?這裡再次感謝ida提供的高階功能「flirt簽名」。

庫快速識別和鑑定技術,簡稱flirt。是ida用於識別庫**的一組技術。為了讓ida為我們識別程式需要我們為分析的程式應用簽名,可以通過shift-f5快捷方式開啟應用簽名視窗:

但顯然ida並沒有提供linux下的編譯器gcc關聯的庫,因為linux版本很多且自帶的libc.a也不相同,所以就需要自己來建立簽名。

建立簽名可歸結為以下4個步驟:

獲得你希望為其建立簽名檔案的靜態庫。

利用其中乙個flair解析器為該庫建立乙個模式檔案。

執行sigmake.exe來處理生成的模式檔案,並生成乙個簽名檔案。

將新的簽名檔案複製到/sig目錄中,安裝這個檔案。

其實在搭建ida的遠端除錯環境時,已經提到為了建立sig檔案,已經選好了linux版本centos-6.5-x86_64。在linux中找到/usr/lib64/libc.a,這個就是要建立簽名的c標準庫。

接下來,開始建立模式檔案。把合適版本的flirt解析器拷貝到linux上,這裡我把/bin/linux下的所有檔案都拷貝到linux上,其實只需要pelf和sigmake這兩個檔案即可。

可以通過下面的命令來建立模式檔案:

其中,libc.a檔案已經被我從/usr/lib64/libc.a拷貝到和pelf相同目錄下。解析器指出被解析的libc.a檔案中有5個函式被忽略、有1441個函式生成了函式模式。gcc_4.4.7_libc.pat就是最終生成的模式檔案。

我們使用sigmake使用工具從模式檔案建立簽名檔案,通過下面的命令來執行:

可以看到並沒成功的建立簽名檔案,結果資訊提示在生成簽名檔案過程中發現了簽名模式的「衝突」。所謂「衝突」就是庫函式中有相同模式的兩個或多個函式(eg,index和strchr,因為那倆函式基本上**完全一致),如果不解決「衝突」就生成簽名的話,在應用改簽名分析時ida是不知道該使用哪個函式。在我們建立簽名過程中一共發現了15個衝突檔案。

發生「衝突」後sigmake會生成乙個排斥檔案以指導如何解決「衝突」,在資料夾中發現的gcc_4.4.7_libc.exc就是排斥檔案。用vim開啟看一下:

這裡顯示了兩部分資訊,第一部分是告訴該如何解決衝突,也就是「;」開頭的**:

翻譯一下這段**告訴我們的解決衝突的要點:

為最大限度的減少衝突,請刪除排斥檔案開頭的4個注釋行。

最多只能給衝突函式組中乙個函式附加+/-。

如果乙個衝突函式組僅包含乙個函式,不要再該函式前面附加+/-,讓他保持原樣。

sigmake連續執行失敗後會將資料(包括注釋行)附加到現有的排斥檔案後。在再次執行sigmake之前必須確保已經刪除了額外的資料,並更正了原始資料(如何這些資料時正確的)。

這裡需要解釋「+/-」,「+」號代表你很確信要選擇函式衝突組中的函式,這是ida會使用這個函式顯示而忽略其他函式,「-」代表你並不是很缺陷你的選擇,這時ida會在資料庫中新增一段關於這個函式的注釋。如果你什麼都不加的話,ida就會忽略這個簽名,不做任何處理。

第二部分資訊就是要解決的函式衝突組:

對函式衝突組的選擇,可能需要我們對這些函式的理解基礎上才能做抉擇。當解決完所有衝突後,需要執行和之前一樣的命令:

很幸運一次就解決了「衝突」,通常可能需要我們解決多次,這個過程是不斷反覆的過程,不過只要我們按照解決衝突的要點去做,這不是問題。

說明安裝成功,選擇這個簽名後,來看看反彙編視窗中的變化:

我們看到ida為我們匹配4個庫函式,沒有匹配的函式呼叫顯然是乙個指標函式。

linux逆向分析之ELF檔案詳解

前言 首先如果大家遇到elf二進位制檔案的逆向首先考慮的可能就是通過ida進行靜態逆向分析演算法,那麼我們首先就要了解elf executable and linking format 的檔案格式。elf檔案格式主要分為以下幾類 1 可重定位檔案 relocatable file 這類檔案包含了 和...

逆向工程之ELF檔案格式分析

1.elf全稱executable and linkable format,可執行連線格式,elf格式的檔案用於儲存linux程式。elf檔案 目標檔案 格式主要三種 一般的 elf 檔案包括三個索引表 elf header,program header table,section header t...

ELF檔案格式(2) 檔案結構

在前面我們已經大概看到過elf檔案的整體布局情況,本文將更詳細地對elf的檔案結構進行闡述。乙個典型的elf檔案結構如下圖所示 elf檔案格式標準中提供了兩種檢視,分別是鏈結檢視和執行檢視。鏈結檢視是以節 section 為單位,執行檢視是以段 segment 為單位。顧名思義,鏈結檢視就是在程式鏈...