Karta:一款功能強(qiáng)大的IDA源代碼輔助插件
關(guān)于Karta
Karta是一款功能強(qiáng)大的IDA Python插件,該工具可以識(shí)別并匹配給定代碼中的開(kāi)源代碼庫(kù)。該插件使用了一種獨(dú)特的技術(shù),使其能夠支持大型二進(jìn)制文件(>200000個(gè)函數(shù)),而同時(shí)幾乎不會(huì)影響整體性能。
Karta所使用的匹配算法是位置驅(qū)動(dòng)的,這意味著它的主要焦點(diǎn)是定位不同的編譯文件,并根據(jù)文件中的原始順序匹配每個(gè)文件的函數(shù)。這種匹配方式依賴(lài)于開(kāi)源函數(shù)的數(shù)量K,而不是二進(jìn)制文件的大小N,因此可以實(shí)現(xiàn)顯著的性能提升。
使用場(chǎng)景
我們認(rèn)為Karta這個(gè)IDA插件有三大使用場(chǎng)景:
- 搜索目標(biāo)文檔,確定已使用的開(kāi)源代碼庫(kù)列表(包含版本信息);
- 匹配支持的開(kāi)源庫(kù)及其中的符號(hào),以幫助對(duì)惡意軟件進(jìn)行逆向工程分析;
- 匹配支持的開(kāi)源庫(kù)及其中的符號(hào),以幫助在專(zhuān)用代碼中搜索特定代碼,實(shí)現(xiàn)針對(duì)二進(jìn)制/固件的逆向工程分析;
項(xiàng)目目錄結(jié)構(gòu)
- src:插件的源代碼目錄
- configs:預(yù)置的*JSON配置文件
- compilations:生成配置文件的編譯提示,以及從過(guò)去的開(kāi)源代碼中獲得的經(jīng)驗(yàn)教訓(xùn)
- docs:Sphinx文檔目錄
Karta識(shí)別器
Karta的識(shí)別器是一個(gè)較小的插件,用于標(biāo)識(shí)二進(jìn)制文件中現(xiàn)有(受支持的)開(kāi)源庫(kù)積起版本。因此,我們不再需要一次又一次地對(duì)同一個(gè)開(kāi)源庫(kù)進(jìn)行逆向工程分析,我們只需要運(yùn)行Karta識(shí)別器插件即可獲得所用開(kāi)源庫(kù)的詳細(xì)列表。Karta目前支持10多個(gè)開(kāi)源庫(kù),其中包括:
- OpenSSL
- Libpng
- Libjpeg
- NetSNMP
- zlib
- 其他
Karta匹配器
識(shí)別目標(biāo)代碼所使用的開(kāi)源代碼庫(kù)后,可以為特定庫(kù)編譯.JSON配置文件(例如libpng版本1.2.29)。編譯后,Karta將自動(dòng)嘗試在加載的二進(jìn)制文件中匹配開(kāi)源代碼庫(kù)的函數(shù)或符號(hào)。除此之外,如果你的開(kāi)源項(xiàng)目使用了外部函數(shù)(memcpy、fread或zlib_inflate),Karta也會(huì)嘗試匹配這些外部函數(shù)。
工具安裝
(Python 3 & IDA >= 7.4)
如需安裝最新版本的Karta,我們需要本地環(huán)境配置好Python 3,然后使用下列命令將該項(xiàng)目源碼克隆至本地:
- git clone https://github.com/CheckPointSW/Karta.git
接下來(lái),運(yùn)行下列命令來(lái)運(yùn)行Karta的安裝腳本:
- setup.py install
(Python 2 & IDA < 7.4)
在IDA 7.4發(fā)布時(shí),Karta僅針對(duì)IDA 7.4或更新版本以及Python 3開(kāi)發(fā)。Python2和更早的IDA版本仍然支持Karta v1.2.0版本,這很可能是Python2.X生命周期結(jié)束后最后一個(gè)受支持的版本。
項(xiàng)目地址
Karta:【GitHub傳送門(mén)】