反彙編器

反彙編器

反彙編器是一種工具程式,可以將機器代碼轉換為目標處理器專用的彙編代碼或彙編指令。將機器代碼轉換為彙編代碼的過程稱為反彙編。就操作而言,反彙編就是彙編/交叉彙編的逆過程。

簡述

彙編最早是一個動詞,指的是將原始碼翻譯成機器碼的過程,翻譯過程結束以後,得到的就是彙編代碼。彙編代碼只有機器能夠識別並且直接執行,而不方便程式設計師編寫和閱讀,於是人們就發明了彙編助記符,用英文縮寫來對應相應的機器代碼。彙編語言的編譯程式所完成的工作就是將程式設計師用彙編助記符編寫的彙編程式翻譯成機器代碼,讓計算機按照用戶的意圖執行指令。人們已經將彙編和彙編助記符的概念混淆了。機器代碼可以直接對應到彙編助記符的形式,反彙編器的作用就是將機器代碼反向翻譯到彙編助記符,讓我們能夠理解只有機器才能理解的二進制代碼的含義。

例如一條指令:xor ebx,ebx,將ebx暫存器自身與自身進行異或操作,結果就是將ebx暫存器清零,這條指令對應的機器碼是0x33,0xDB,這條指令在存儲器上就是按照0x33,0xDB代碼形式保存的,要看懂這條指令的含義就必須藉助反彙編器將它翻譯到彙編助記符的形式xorebx,ebx。

在調試器中必然會自帶簡單的反彙編引擎,但是這些反彙編引擎功能有限,除了反彙編功能以外沒有太多的額外功能,要完成更多的功能,必須有專業反彙編程式的幫助。用得比較多的反彙編器有IDA Pro和W32Dasm。其中IDA Pro功能最為強大,能將可執行代碼反彙編到多種硬體平台的指令集,配有眾多的反彙編選項,能根據目標程式的編譯器識別出很多函式和參數甚至結構體並且自動標註。此外還支持改名、內建簡單調試器及支持很多高級功能,完全可以滿足各種的工作需要。

套用場景

通常,使用反彙編器是為了在沒有原始碼的情況下對程式進行理解,需要進行反彙編的常見情況包括以下幾種。

(1)分析惡意軟體。通常,惡意軟體的作者很少會提供他們“作品”的原始碼,除非是一種基於腳本的蠕蟲。由於缺乏原始碼。要準確地了解惡意軟體的運行機制是很困難的。動態分析和靜態分析是分析惡意軟體的兩種主要技術。動態分析是指在嚴格控制的環境中執行惡意軟體,並使用系統檢測實用工具記錄其所有行為。相反,靜態分析則試圖通過瀏覽程式代碼來理解程式的行為。此時要查看的就是對惡意軟體進行反彙編之後得到的代碼清單。

(2)分析閉源軟體的漏洞。為了簡單起見,將整個安全審核過程劃分成3個步驟:發現漏洞、分析漏洞和開發破解程式。無論是否擁有原始碼,都可以採用這些步驟來進行安全審核。但是,如果只有二進制檔案,那就更加困難。這個過程的第一個步驟是發現程式中潛在的可供利用的條件。一般情況下,可以通過模糊測試等動態技術來達到這一目的,也可通過靜態分析來實現(相對比較困難)。一旦發現漏洞,通常需要對其進行深入分析,以確定該漏洞是否可被利用,如果可利用,可在什麼情況下利用。至於編譯器究竟如何分配程式變數,反彙編代碼清單提供了詳細的信息。例如,程式設計師聲明的一個70位元組的字元數組,在由編譯器分配時,會擴大到80位元組,知道這一點會非常有用。另外,要了解編譯器到底如何對全局聲明或在函式中聲明的所有變數進行排序,查看反彙編代碼清單是唯一的辦法。在開發破解程式時,了解變數之間的這些空間關係往往非常重要。最後,通過使用反彙編器和調試器,就可以開發出破解程式。

(3)分析閉源軟體的互操作性。如果僅以二進制形式發布一個軟體,競爭對手要想創建可以和它互操作的軟體,或者為該軟體提供外掛程式。將會非常困難。針對某個僅有一種平台支持的硬體而發布的驅動程式代碼,就是一個常見的例子。如果廠商暫時不支持,或者拒絕支持在其他平台上使用他們的硬體,那么為了開發支持該硬體的軟體驅動程式,可能需要完成大董的逆向工程工作。在這些情況下,靜態代碼分析幾乎是唯一的補救方法。通常,為了理解嵌入式固件,還需要分析軟體驅動程式以外的代碼。

(4)分析編譯器生成的代碼,以驗證編譯器的性能和準確性。由於編澤器或彙編器的用途是生成機器語言,因此優秀的反彙編工具通常需要驗證編譯器是否符合設計規範。除準確性外,分析人員還可以從中尋找最佳化編譯器輸出的機會,查知編譯器本身是否容易被攻破,以至於可以在生成的代碼中插入後門等。

(5)在調試時顯示程式指令。在調試器中生成代碼清單,可能是反彙編器最常見的一種用途。遺憾的是,調試器中內嵌的反彙編器往往相當簡單(OllyDbg是一個例外)。它們通常不能批量反彙編。在無法確定函式邊界時,它們有時會拒絕反彙編。因此,在調試過程中,為了解詳細的環境和背景信息,最好是結合使用調試器與優秀的反彙編器。

常見反彙編器

1.IDA PRO反彙編器

互動式反彙編器專業版( Interactive Disassembler Professional,IDA PRO) ,是一個世界頂級的互動式反彙編工具。從本質上說,IDA PRO是一種遞歸下降反彙編器,既能區分數據與代碼,還設法確定這些數據的類型,這樣可以更好地反彙編和更深層地分析。從功能上看,IDA PRO共有兩個版本:標準版和高級版。這兩個版本的主要區別在於他們支持反彙編的處理器體系結構數量不同。標準版支持30多種處理器,而高級版則支持50多種處理器。高級版支持的其他體系結構包括Itanium、AMD64、MIPS、PPC和SPARC等。

2.W32Dasm反彙編器

W32Dasm是一種強大的反彙編工具,操作簡單,使用方便,通常為程式設計師所使用,當然也可被用來Crack軟體,很適合Cracker使用。

W32Dasm是一個靜態反彙編工具,也是破解員常用的工具之一,被稱為破解人的“屠龍刀”。W32Dasm10.0修改版是經Killer在W32Dasm8. 93基礎上修改的,修改後的W32Dasm功能更強大,能完美顯示中文字元串及VB程式,內含16進制編輯器,破解修改軟體更容易,可謂是反彙編極品。

相關詞條

熱門詞條

聯絡我們