三、IDA文件目录介绍及其扩展功能
一、*IDA文件目錄簡介*
IDA的文件目錄一般如下圖所示,接下來介紹其幾個文件夾的作用
cfg:cfg目錄包含各種配置文件,包括基本的IDA配置文件ida.cfg,GUI配置文件idagui.cfg以及文本模式用戶界面配置文件idatui.cfg。
dbgsrv: 在linux動態(tài)調(diào)試 ELF 文件對應(yīng)的組件。
idc:idc目錄包含IDA的內(nèi)置腳本語言IDC所需的核心文件。
ids:ids目錄包含一些符號文件(IDA語法中的IDS文件),這些文件用于描述可被加載到IDA的二進制文件引用的共享庫的內(nèi)容。這些IDS文件包含摘要信息,其中列出了由某一個指定庫導(dǎo)出的所有項目。這些項目包含描述某個函數(shù)所需的參數(shù)類型和數(shù)量的信息,函數(shù)的放回類型以及與該函數(shù)的調(diào)用約定有關(guān)的信息。
Loaders:loaders目錄包含在文件加載過程中用于識別和解析PE或ELF等已知文件格式的IDA擴展。
platform:系統(tǒng)運行需要的庫文件
plugins:plugins目錄包含專門為IDA提供附加功能的IDA模塊。
procs:procs目錄包含已安裝的IDA版本所支持的處理器模塊。處理器模塊為IDA提供機器語言-匯編語言轉(zhuǎn)換功能,并負責生成在IDA用于界面中顯示的匯編語言。
Sig:sig目錄包含IDA在各種模式匹配操作中利用的現(xiàn)有代碼的簽名。通過模式匹配,IDA能夠?qū)⒋a序列確定為已知的庫代碼,從而節(jié)省大量的分析時間。這些簽名有IDA的“快速的庫識別和鑒定技術(shù)”(FLIRT)生成。
til:til目錄包含一些類型庫信息,IDA通過這些信息記錄特定與各種編譯器庫的數(shù)據(jù)結(jié)構(gòu)的布局
二、*IDA擴展功能*
IDA Pro作為功能強大的靜態(tài)反匯編器,具有良好的交互性、可編程性、可擴展性及對多處理器的支持。對于IDA Pro的可擴展性表現(xiàn)在兩個方面,一是采用內(nèi)置的腳本語言IDC寫腳本;二是采用Hex-rays提供的SDK寫插件Plug-in。簡單的任務(wù)交由腳本完成,復(fù)雜的任務(wù)則需要定制滿足需求的插件。
*2.1 IDC腳本*
IDA的功能雖然強大,但是顯然不能滿足每一位用戶的一切需求,于是IDA集成了一個腳本引擎,讓用戶從編程的角度對IDA的操作進行全面控制。IDA的腳本可以看作一個宏,又或者一種查詢語言,它能以編程的方式 訪問IDA的數(shù)據(jù)庫的內(nèi)容。IDA的腳本語言叫做IDC,之所以取這個名稱,可能是因為他的語法與C語言的語法非常相似。
常用IDC:https://www.cnblogs.com/LyShark/p/13100048.html
IDC腳本編寫語法:https://my.oschina.net/u/4261514/blog/4197562
接下來介紹IDC腳本的使用方法和常用的IDC腳本,使用IDC腳本主要有兩種方法:
\1. File->Script File 或使用熱鍵Alt+F7打開以“.IDC”為后綴名的IDC文件執(zhí)行。
\2. File->Script command… 或使用熱鍵Shfit+F2,打開“Execute script”窗口編寫并執(zhí)行IDC文件。
IDC示例1:關(guān)鍵字段定位腳本
該腳本實現(xiàn)查找范圍關(guān)鍵字段如“push ebp”和"mov ebp, esp",并返回其地位地址,腳本源碼:
#include <idc.idc>
static main() {
auto currAddr,startSeg,endSeg;
auto array_ptr = CreateArray(“array”);
auto ptr = GetArrayId(“array”);
SetArrayString(ptr,0,“push ebp”);
SetArrayString(ptr,1,“mov ebp, esp”);
Jump(0x0401000); // 光標跳轉(zhuǎn)到起始位置
currAddr = ScreenEA(); // 反回當前光標所在地址
startSeg = SegStart(currAddr);
endSeg = SegEnd(currAddr);
Message(“OEP = %x 起始地址: %x 結(jié)束地址: %x \n”,currAddr,startSeg,endSeg);
while(startSeg < endSeg)
{
auto x = 0;
auto count=0;
for(x=0;x<2;x++)
{
auto op = GetDisasm(startSeg);
auto st = GetArrayElement(AR_STR,ptr,x);
if(strstr(op,st) == 0) {
count = count +1;
if(count == 2)
{
msg(“匹配地址: %x \n”,startSeg–);
}
}
startSeg++;
}
}
DeleteArray(ptr);
}
Shift + F2調(diào)出IDC窗口,填寫源碼,點擊“Run”執(zhí)行
執(zhí)行結(jié)果
*2.2 IDA軟件開發(fā)工具包*
IDA Pro的功能由四大模塊(modules)支持,分別是(基于Windows/IA-32平臺):
Plug-in 插件:利用SDK提供的API,完善IDA Pro的功能,擴展名plw。
Loaders 加載器:將可執(zhí)行文件載入內(nèi)存,進行分段,擴展名ldw。
Processor 處理器:將可執(zhí)行程序的機器碼反匯編成匯編代碼,擴展名w32。
Debuggers 調(diào)試器:IDA Pro自帶的調(diào)試器。
上述四個模塊均能通過Hex-rays公司提供的SDK得到擴展,因為 SDK提供了大量的API,這些API可以涉及到IDA Pro軟件的系統(tǒng)層,用戶通過編寫調(diào)用這些API的C++程序達到擴展IDA Pro功能的目的。目前使用最為廣泛的就是利用SDK開發(fā)IDA Pro插件。
*2.3 IDA 插件的安裝和使用*
IDA的插件是IDA的可擴展性的重要體現(xiàn),其安裝目錄下的plugin文件夾就是專門位插件擴展服務(wù)的,而且隨著IDAPython的引入,IDA插件的擴展變得十分的便捷。接下來介紹幾個常見的IDA插件
Github上有人整理了IDA的插件匯: https://github.com/onethawt/idaplugins-list
1. *Hex-Ray*
Hex-Ray可能是所有IDA插件得“始祖”,他是一個反編譯插件,能夠為已編譯得32位X86二進制文件中得函數(shù)生成“類似C語言的偽代碼”。要安裝這個插件,只需將提供的插件文件復(fù)制到plugin目錄即可。
安裝完畢后,可以通過View->Open Subviews->Pseudocode(熱鍵F5)激活這個反編譯器,接著IDA會打開一個新的窗口,包含生成的偽代碼,如下圖:
2. *IDAPython*
IDA Pro內(nèi)置的腳本語言IDC太過簡陋,由Gergely Erdelyi完成的IDAPython插件將python語言集成到IDA Pro中,將python腳本語言的靈活性和IDA Pro反匯編器的強大功能完美結(jié)合起來。
對于DIA Pro 6.8之后的版本,IDAPython是自帶的插件,IDAPython的安裝非常簡單,
項目地址:https://github.com/idapython
IDA Python手冊:https://www.hex-rays.com/products/ida/support/idapython_docs/
1:將解壓后plugins目錄下文件拷貝到 IDA Pro安裝目錄下的plugins中。
2:將解壓后的python python64兩個目錄下的文件拷貝到 IDA Pro安裝目錄下。
重啟 IDA Pro,對某個文件分析時,發(fā)現(xiàn)FILE菜單里多出了python的相關(guān)條目,證明安裝成功。
3. ****IDA7.0安裝findcrypt插件****
參考鏈接:https://www.cnblogs.com/mke2fs/p/10938455.html
Findcrypt是IDA Pro一個插件,其功能是可查找加密常量
安裝成功的話,快捷鍵Ctrl+Alt+F可以調(diào)出上圖的窗口,識別一些常見的算法,插件鏈接放上:https://github.com/polymorf/findcrypt-yara
只裝插件是會報錯的,還需要一些必要的運行庫,需要安裝yara-python和Microsoft Visual C++ Compiler for Python 2.7
*首先********安裝********yara-python*
https://www.cnblogs.com/Fightingbirds/p/13840265.html
*安裝Microsoft Visual C++ Compiler for Python 2.7支持庫*
下載鏈接:https://www.microsoft.com/en-us/download/details.aspx?id=44266
點擊Download下載后安裝
安裝兩個支持庫都裝好后,把插件解壓后把下圖中的兩個文件添加到IDA7.0的plugins目錄
接著重啟IDA,使用快捷鍵Shift+Alt+F,打開Findcrypt result窗口。
總結(jié)
以上是生活随笔為你收集整理的三、IDA文件目录介绍及其扩展功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言结构体定义坐标,C/C++知识点之
- 下一篇: java类的构造器可以被继承吗_java