複製鏈接
請複製以下鏈接發送給好友

反彙編器

鎖定
反彙編器是一種工具程序,可以將機器代碼轉換為目標處理器專用的彙編代碼或彙編指令。將機器代碼轉換為彙編代碼的過程稱為反彙編。就操作而言,反彙編就是彙編/交叉彙編的逆過程。 [1] 
中文名
反彙編器
外文名
disassembler
作    用
將機器代碼反向翻譯到彙編助記符
常用反彙編器
IDA Pro和W32Dasm
應    用
分析惡意軟件等
學    科
計算機科學

反彙編器簡述

彙編最早是一個動詞,指的是將源代碼翻譯成機器碼的過程,翻譯過程結束以後,得到的就是彙編代碼。彙編代碼只有機器能夠識別並且直接執行,而不方便程序員編寫和閲讀,於是人們就發明了彙編助記符,用英文縮寫來對應相應的機器代碼。彙編語言的編譯程序所完成的工作就是將程序員用匯編助記符編寫的彙編程序翻譯成機器代碼,讓計算機按照用户的意圖執行指令。人們已經將彙編和彙編助記符的概念混淆了。機器代碼可以直接對應到彙編助記符的形式,反彙編器的作用就是將機器代碼反向翻譯到彙編助記符,讓我們能夠理解只有機器才能理解的二進制代碼的含義。
例如一條指令:xor ebx,ebx,將ebx寄存器自身與自身進行異或操作,結果就是將ebx寄存器清零,這條指令對應的機器碼是0x33,0xDB,這條指令在存儲器上就是按照0x33,0xDB代碼形式保存的,要看懂這條指令的含義就必須藉助反彙編器將它翻譯到彙編助記符的形式xorebx,ebx。
在調試器中必然會自帶簡單的反彙編引擎,但是這些反彙編引擎功能有限,除了反彙編功能以外沒有太多的額外功能,要完成更多的功能,必須有專業反彙編程序的幫助。用得比較多的反彙編器有IDA Pro和W32Dasm。其中IDA Pro功能最為強大,能將可執行代碼反彙編到多種硬件平台的指令集,配有眾多的反彙編選項,能根據目標程序的編譯器識別出很多函數和參數甚至結構體並且自動標註。此外還支持改名、內建簡單調試器及支持很多高級功能,完全可以滿足各種的工作需要。 [2] 

反彙編器應用場景

通常,使用反彙編器是為了在沒有源代碼的情況下對程序進行理解,需要進行反彙編的常見情況包括以下幾種。
(1)分析惡意軟件。通常,惡意軟件的作者很少會提供他們“作品”的源代碼,除非是一種基於腳本的蠕蟲。由於缺乏源代碼。要準確地瞭解惡意軟件的運行機制是很困難的。動態分析和靜態分析是分析惡意軟件的兩種主要技術。動態分析是指在嚴格控制的環境中執行惡意軟件,並使用系統檢測實用工具記錄其所有行為。相反,靜態分析則試圖通過瀏覽程序代碼來理解程序的行為。此時要查看的就是對惡意軟件進行反彙編之後得到的代碼清單。
(2)分析閉源軟件的漏洞。為了簡單起見,將整個安全審核過程劃分成3個步驟:發現漏洞、分析漏洞和開發破解程序。無論是否擁有源代碼,都可以採用這些步驟來進行安全審核。但是,如果只有二進制文件,那就更加困難。這個過程的第一個步驟是發現程序中潛在的可供利用的條件。一般情況下,可以通過模糊測試等動態技術來達到這一目的,也可通過靜態分析來實現(相對比較困難)。一旦發現漏洞,通常需要對其進行深入分析,以確定該漏洞是否可被利用,如果可利用,可在什麼情況下利用。至於編譯器究竟如何分配程序變量,反彙編代碼清單提供了詳細的信息。例如,程序員聲明的一個70字節的字符數組,在由編譯器分配時,會擴大到80字節,知道這一點會非常有用。另外,要了解編譯器到底如何對全局聲明或在函數中聲明的所有變量進行排序,查看反彙編代碼清單是唯一的辦法。在開發破解程序時,瞭解變量之間的這些空間關係往往非常重要。最後,通過使用反彙編器和調試器,就可以開發出破解程序。
(3)分析閉源軟件的互操作性。如果僅以二進制形式發佈一個軟件,競爭對手要想創建可以和它互操作的軟件,或者為該軟件提供插件。將會非常困難。針對某個僅有一種平台支持的硬件而發佈的驅動程序代碼,就是一個常見的例子。如果廠商暫時不支持,或者拒絕支持在其他平台上使用他們的硬件,那麼為了開發支持該硬件的軟件驅動程序,可能需要完成大董的逆向工程工作。在這些情況下,靜態代碼分析幾乎是唯一的補救方法。通常,為了理解嵌入式固件,還需要分析軟件驅動程序以外的代碼。
(4)分析編譯器生成的代碼,以驗證編譯器的性能和準確性。由於編澤器或彙編器的用途是生成機器語言,因此優秀的反彙編工具通常需要驗證編譯器是否符合設計規範。除準確性外,分析人員還可以從中尋找優化編譯器輸出的機會,查知編譯器本身是否容易被攻破,以至於可以在生成的代碼中插入後門等。
(5)在調試時顯示程序指令。在調試器中生成代碼清單,可能是反彙編器最常見的一種用途。遺憾的是,調試器中內嵌的反彙編器往往相當簡單(OllyDbg是一個例外)。它們通常不能批量反彙編。在無法確定函數邊界時,它們有時會拒絕反彙編。因此,在調試過程中,為了解詳細的環境和背景信息,最好是結合使用調試器與優秀的反彙編器。 [3] 

反彙編器常見反彙編器

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進制編輯器,破解修改軟件更容易,可謂是反彙編極品。 [4] 
參考資料
  • 1.    (美)SHIBU K V著;伍微譯.嵌入式系統原理、設計及開發:清華大學出版社,2012.01
  • 2.    程光,張豔麗,江潔欣編著.信息與網絡安全:清華大學出版社,2008.6
  • 3.    任向民,王克朝,王喜德等編著.高級彙編語言程序設計實用教程 第2版:清華大學出版社,2015.06
  • 4.    張瑜著.計算機病毒進化論:國防工業出版社,2015.06