IDA Pro
IDA Pro
互動式反彙編器專業版(Interactive Disassembler Professional),人們常稱其為IDA Pro,或簡稱為IDA。是目前最棒的一個靜態反編譯軟體,為眾多0day世界的成員和ShellCode安全分析人士不可缺少的利器!IDA Pro是一款互動式的,可編程的,可擴展的,多處理器的,交叉Windows或Linux WinCE MacOS平台主機來分析程序,被公認為最好的花錢可以買到的逆向工程利器。IDA Pro已經成為事實上的分析敵意代碼的標準並讓其自身迅速成為攻擊研究領域的重要工具。它支持數十種CPU指令集其中包括Intel x86,x64,MIPS徠,PowerPC,arm,Z80,68000,c8051等等。
互動式反彙編器專業版,是總部位於比利時列日市(Liège)的Hex-Rayd公司的一款產品。開發IDA的是一位編程天才,名叫Ilfak Guilfanov。十年前誕生時,IDA還是一個基於控制台的MS-DOS應用程序,這一點很重要,因為它有助於我們理解IDA用戶界面的本質。除其他內容外,IDA的非Windows和非GUI版本仍然繼續採用源於最初DOS版本的控制台形式的界面。
就其本質而言,IDA是一種遞歸下降反彙編器。但是,為了提高遞歸下降過程的效率,IDA的開發者付出了巨大的努力,來為這個過程開發邏輯。為了克服遞歸下降的一個最大的缺點,IDA在區分數據與代碼的同時,還設法確定這些數據的類型。雖然你在IDA中看到的是彙編語言形式的代碼,但IDA的主要目標之一,在於呈現儘可能接近源代碼的代碼。此外,IDA不僅使用數據類型信息,而且通過派生的變數和函數名稱來盡其所能地註釋生成的反彙編代碼。這些註釋將原始十六進位代碼的數量減到最少,並顯著增加了向用戶提供的符號化信息的數量。
IDA PRO簡稱IDA(Interactive Disassembler) ,是一個世界頂級的互動式反彙編工具,有兩種可用版本。標準版(Standard)支持二十多種處理器。高級版(Advanced)支持50多種處理器。
IDA PRO不存在任何註冊機、註冊碼或破解版,除了測試版和一個5.0 的免費版外,網路上能下載的都是包含用戶許可證的正版,因為所有的安裝包都是OEM版,所以IDA官網不提供軟體下載,並且軟體也沒有註冊的選項(可以正常使用,但這也是一種盜版侵權的行為)。
IDA是Hex-Rays公司的旗艦產品。因此,他們對於未經授權就使用IDA的做法深惡痛絕。過去,該公司發現,盜版IDA的發布與公司銷售量的下滑有著直接的因果關係。為此,IDA的前發行公司DataRrscus甚至將盜版者的姓名張貼在他的“恥辱堂”(Hall of Shame)中。為打擊盜版,IDA採用了幾項反盜版技術,並實施了許可限制。
用戶需要了解的第一種技術是:每一份IDA都帶有水印,以將它與購買者一對一地對應起來。如果一份IDA出現在盜版軟體站中,Hex-Rays就能夠通過水印追蹤到購買者,並將其列入銷售黑名單。我們常常可以在Hex-Rays的IDA支持論壇上發現有關IDA 的“泄露”版本的討論。
為實施許可策略,IDA採用的另一種技術,是掃描在區域網中運行的其他IDA程序。例如,Windows版本的IDA啟動后,它會在埠23945上廣播一個UDP包,並等待響應,看相同子網中是否有其他使用相同許可證密鑰的IDA實例在運行。然後,IDA會將得到的響應數量與使用該許可證的用戶數量進行比較,如果發現網路中存在過多的IDA實例,IDA會拒絕啟動,但是要注意,用戶可以在一台計算機上使用相同的許可證運行多個IDA實例。
IDA實施許可策略的最後一種方法,是使用密鑰文件將每一名購買者與產品聯繫起來。在啟動時,IDA會搜索一個有效的ida.key文件。如果無法定位有效地密鑰文件,IDA就會立即關閉。密鑰文件還用於用戶升級IDA的資格。基本上,ida.key文件就像是用戶的購買收據,要想在將來獲得升級資格,用戶必須保管好這個文件。
Hex-Rays為希望了解IDA基本功能的用戶提供了一個功能有限的免費版本,但是,該免費版本並不是工最新版本的功能。該免費版本為IDA4.9的簡化版,除免費版本外,Hex-Rays還提供當前版本的功能有限的演示版。如果你在討論逆向工程的地方發現的對於IDA的稱讚尚不足以吸引你購買IDA ,那麼花一些時間熟悉免費版或演示版的功能,將有助於你了解IDA的強大功能及周到服務,促使你購買這一產品。
從功能上看,IDA Pro共有兩個版本:標準版和高級版。這兩個版本的主要區別,在於他們支持反彙編的處理器體系結構數量不同。快速瀏覽一下它們所支持的處理器體系結構列表,即可發現:標準版支持30多種處理器,而高級版則支持50多種處理器。高級版支持的其他體系結構包括Itanium、AMD64、MIPS、PPC和SPARC等。
IDA有兩種許可證。一種是已命名許可證,與某一特定的用戶有關,可安裝到該用戶使用的任意多個計算機上。另一種是計算機許可證,與某一台特定的計算機有關,任何使用該計算機的用戶都可以使用這種許可證,但一次只能允許一名用戶使用該許可證。注意,雖然已命名許可證可以讓你在任意多台計算機上安裝IDA軟體,但是只有你才能運行這些IDA軟體。而且,對於單個許可證,在某一給定的時刻,IDA只能在其中一台計算機上運行。
說明 與許多其他專有軟體的許可證不同,IDA的許可證特別賦予了用戶對IDA進行逆向工程的權利。
升級IDA
發布新版本的IDA后,Hex-RAYS通常會在IDA網站上公布升級鏈接和升級過程中的要求,該要求一般包括升級所適用的產品購買日期。一般情況下,在升級過程中,用戶必須向Aex-Rays提交ida.key文件。然後,Hex-Rays會驗證用戶的密鑰,並提供如何獲得升級版本的詳細信息。如果你發現你的IDA版本過低,沒有升級資格,請記得利用Hex-Rays向過期的用戶提供的折扣升級價格。
如果不小心丟失密鑰文件,未授權用戶可能會假冒你提出升級請求,導致你無法升級IDA.
最後,強烈建議在升級IDA時備份現有的IDA版本,或將升級版本安裝到一個完全不同的目錄,以避免丟失你修改的任何配置文件。為了恢復你之前所做的任何修改,你可能需要編輯升級版本中的相應文件。同樣,你還需要重新編譯或以替他形式獲得新版的IDA 定製插件。
作為一名IDA用戶,你可能想知道,如果遇到與IDA有關的問題,該從什麼地方需求幫助。如果我們做的還不錯的話,本文也許能夠解決用戶遇到的大多數問題。如果你需要額外的幫助,請參考下面一些常用的資源。
正式的幫助文檔。IDA確實提供了Windows風格的幫助文檔,但是,該文檔主要介紹IDA的用戶界面和腳本子系統,它對於我們了解IDA,SDK(軟體開發工具包),以及解決類似於“我該如何處理.....”的問題並沒有多大幫助。
Hex-Rays的支持頁面和論壇。Hex-Rayd運行著一個支持頁面,提供各種與IDA有關的資源的鏈接,包括針對得到許可證的用戶的在線論壇。用戶會發現,Ilfak經常訪問這些論壇,並親自解答問題。用戶可以通過這些論壇獲得SDK方面的非正式支持,因為在這裡,有許多經驗豐富的IDA用戶樂於根據他們自己的經驗為大家提供幫助。
有關如何使用SDK的問題,人們常常會告訴你“閱讀包含文件”。但是,購買IDA產品,並不能獲得SDK方面的正式支持。不過,Hex-Rays倒是提供一個年度支持計劃,每年收費10000美元。要想了解SDK,Steve Micalle的著作IDA PLUG-IN WRITING IN C/C++是一個非常有用的資源。
Openree.。openree是一個活躍的逆向工程社區,其中包含大量介紹IDA應用的文章,以及一些用戶論壇。與Hex-Rays網站上的論壇類似,Openree,org也吸引了許多經驗豐富的IDA用戶,他們常在論壇上與其他用戶彼此交流、分享經驗,也許能幫助你解決在使用IDA時遇到的問題。
RCE論壇。逆向代碼工程(RCE)論壇中包含大量與使用IDA Pro有關的帖子。這個論壇的內容非常廣泛,其主體不僅涉及如何使用IDA Pro,而且涵蓋了許多用於對二進位文件進行逆向工程的工具和技巧。
IDA Palace。IDA Palace是一個專門提供IDA相關資源的網站。在這網站上,訪問者可以找到大量介紹如何使用IDA的文章的鏈接,以及用於擴展IDA功能的腳本和插件。
Ilfak的博客。Ilfak的博客中包含許多詳細介紹IDA用法的文章,可幫助用戶解決通用反彙編、調試及惡意軟體分析等各種問題。
從收到嶄新的IDA光碟的興奮中平靜下來后,開始安裝IDA吧。在打開光碟后,你會看到一下很多內容,這裡的EXE文件(ida52.exe)是Windows安裝文件。OSX和Linux目錄分別包含針對OS X和Linux系統的IDA安裝程序的tar壓縮文件gzip)。Sdk目錄包括IDA SDK,還有他幾個實用工具。
Windows
在Windows系統上安裝IDA非常簡單。啟動IDA的Windows安裝程序后,你會看到幾個對話框,其中只有一個對話框需要你操作。你可以在這個對話框中知道IDA的安裝目錄,或接受安裝程序默認的安裝目錄。在IDA目錄中,你將發現密鑰文件ida.key和下列IDA 可執行文件。
Idag.exe: IDA的Window GUI版本。
Idaw.exe: IDA的Iindows文本模式版本。
OSX和Linux
要在OSX或Linux系統上安裝IDA,首先必須用gunzip和untar程序解壓相應的壓縮文件。在Linux系統中,解壓命令為:
# tar –xvzf linux52adv.gz
在OS X系統中,解壓命令為:
# tar –xvzf Ogx52adv.gz
無論是哪一種情況,你將得到一個名為idaavd或idastd的頂層目錄(取決於你購買的版本)。完成IDA的解壓后,需要將密鑰文件有Windows安裝目錄複製到新的IDA目錄中。另外,你可以創建一個名為﹩HOME/.idapro的目錄,並將密鑰文件複製到新目錄中。
在OS X和Linux系統中,可執行文件的名稱均為idal,而且,它們僅提供類似於idaw.exe的文本模式的界面。IDA的Linux版本需要libstdc++.so5才能運行,因此必須確保系統上安裝有libstdc++.so5。
在可是使用IDA之前,你不一定需要熟悉IDA安裝目錄的結構。但是,既然現在討論的主題是安裝IDA ,還是初步了解一下安裝目錄的基本結構。在本書的後續章節,我們將接受IDA的高級功能,到那時,了解IDA安裝目錄的結構將變得更加重要。下面簡要介紹IDA安裝目錄中的各個子目錄。
Cfg。Cfg目錄包含各種配置文件,包括基本IDA配置文件ida,cfg、GUI配置文件idagui.cfg以及文本模式用戶界面配置文件idatui,cfg。我們將在後面的章節介紹IDA的一些更加重要的配置功能。
Idc。Idc目錄包含IDA的內置腳本語言IDC所需的核心文件。我們將在後面詳細介紹如何使用IDC便攜腳本。
Ids。Ids目錄中包含一些符號文件(IDA語法中的IDS文件),這些文件 用於描述可被載入在到IDA的二進位文件引用的共享庫的內容。這些DIS文件包含摘要信息,其中列出了有某一個指定庫導出的所有項目。這些項目包含描述某個函數所需的參數類型和數量的信息、函數的返回類型(如果有)以及與該函數的調用約定有關的信息。
Ioaders。Ioaders目錄包含在文件載入過程中用於識別和解析PE或ELF等一直文件格式的IDA擴展。
Procs。Procs目錄包含已安裝的IDA版本所支持的處理器模塊。處理器模塊為IDA提供機器語言-彙編語言轉換功能,並負責生成在IDA用戶界面中顯示的彙編語言。
Sig。Sig目錄包含IDA在各種模式匹配操作中利用的現有代碼的簽名。通過模式匹配,IDA能夠將代碼序列確定為一直的庫代碼,從而節省大量的分析時間。這些簽名有IDA 的“快速的庫識別和鑒定技術”(FLIRT)生成,這一內容將在第12章詳細介紹。
Til。til目錄包含一些類型庫信息,DIA通過這些信息記錄特定於各種編譯器庫的數據結構的布局。我們講在第13章詳細介紹如何定製IDA類型庫。
IDA從MS-DOS繼承的特性至今仍然十分明顯。無論使用哪一種界面(文本界面或GUI),IDA都大量用到熱鍵。雖然這並非壞事,但是,如果你想當然地認為自己正使用文本輸入模式,並且發現幾乎每一次點擊都會導致相當意外的後果,那就說明IDA執行了某種熱鍵操作。例如,在使用GUI時,如果你定位游標以進行修改,並且希望你輸入的內容全部出現在游標位置,這是就可能會出現令人意外的情況(IDA可不像字處理程序)。
從數據輸入的角度看,IDA通過對話框接受所有輸入。因此,如果你希望在IDA中輸入任何數據,則必須調出輸入數據的對話框。
最後,需要記住的是:IDA不提供撤銷功能,因為你根本找不到。同樣,你也無法找到命令歷史記錄列表,以查明你剛剛執行的操作。
如果你是一名非Windows用戶,並且希望使用IDA的GUI界面,基本上,你有兩種選擇。Linux用戶可以考慮使用WINE。據稱,IDA可以在WINE下成功運行。就第二個選擇,使用主機操作系統只的虛擬軟體,在Windows虛擬機中運行IDA。無論採用哪一種選項,都需要運行IDA的Windows版本。因此,如果選擇使用IDA的內置調試器進行本地調試(下對於遠程調試),你只能調試Windows可執行文件。