關于Kam1n0 

Kam1n0是一款功能強大且易于擴展的匯編代碼管理和分析平臺,該工具允許用戶將一個大型二進制文件集合索引到不同的存儲庫中,然后它會給廣大研究人員提供各種不同的分析服務,例如克隆搜索和分類等等。該工具引入了應用程序的實現概念,并支持對匯編代碼庫的多租戶訪問和管理。考慮到逆向工程任務的多功能性,Kam1n0的服務器目前提供了三種不同類型的克隆搜索工具:Asm-Clone、Sym1n0和Asm2Vec。

其中,用戶可以創建多個應用程序實例,應用程序實例可以在特定的用戶組之間共享,應用程序存儲庫的讀寫訪問和開關狀態可以由應用程序所有者控制,而Kam1n0的服務器可以使用多個共享資源池同時為應用程序提供服務。

Asm-Clone

Asm-Clone應用程序試圖解決匯編函數的高效子圖搜索問題(即圖同構問題)(平均查詢時間<1.3秒,平均索引時間<30毫秒,2.3M函數)。給定一個目標函數(如下圖所示左側的函數),它可以在存儲庫中的其他函數(如圖所示右側的函數)中標識克隆的子圖:

Sym1n0

Sym1n0支持通過區分模糊測試和約束求解進行語義克隆搜索,而這是一種高效、可擴展的動態靜態混合方法(平均查詢時間<1s,平均索引時間<100ms,1.5M函數)。給定一個目標函數(如下圖所示左側的函數),它可以在存儲庫中的其他函數(如圖所示右側的函數)中標識克隆的子圖,并且支持抽象語法圖的可視化:

Asm2Vec

Asm2Vec利用了表征學習方法,它可以理解匯編代碼的詞匯語義關系。例如,xmm*寄存器在語義上與向量操作(如addps)相關,以及memcpy類似于strcpy等。下圖顯示了從libgmp中的gmpz_tdiv_r_2exp的同一源代碼編譯的不同匯編函數。從左到右,匯編函數使用GCC O0選項、GCC O3選項、O-LLVM混淆器控制流圖、平坦化選項和LLVM模糊器偽控制流圖選項進行編譯,Asm2Vec可以靜態地將它們標識為克隆:

 可執行程序分類 

在此應用程序中,用戶定義了一組基于功能相關性的軟件類,并提供了屬于每個類的二進制文件。然后,系統自動將功能分組為集群,集群中的功能通過克隆關系直接或間接連接。保留對分類有區別的簇,并作為其類的簽名。給定一個目標二進制文件,系統會顯示它屬于每個軟件類的程度:

 平臺概覽 

下圖顯示了Kam1n0的主要UI組件和功能:

 工具安裝 

廣大研究人員可以使用下列命令將該項目源碼克隆至本地:

git clone https://github.com/McGill-DMaS/Kam1n0-Community.git

或直接訪問該項目的Releases頁面下載Kam1n0。

Kam1n0的當前版本由兩個安裝程序組成:核心服務器和IDA Pro插件。

Kam1n0服務器安裝

Kam1n0的核心引擎使用純Java開發,并需要下列依賴組件:

1、最新版本11.x JRE/JDK x64發行版;
2、最新版本IDA Pro,并安裝好idapython插件;

Kam1n0 IDA Pro插件安裝

Kam1n0 IDA Pro插件基于Python開發,主要使用下列依賴組件:

IDA Pro > v6.7,且安裝好idapython插件

 自定義開發 

使用下列命令克隆最新穩定版分支:

git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community

導入項目

在IntelliJ中,將/kam1n0/kam1n0/以Maven項目導入,接下來使用下列命令構建項目:

cd /kam1n0/kam1n0mvn -DskipTests clean packagemvn -DskipTests package

接下來,可以使用下列命令進行測試:

cd /kam1n0/kam1n0mvn -DskipTests clean package # you can skip this one if you already built the packagemvn -DskipTests package       # you can skip this one if you already built the packagemvn -DforkMode=never test

 許可證協議 

本項目的開發與發布遵循Apache-2.0開源許可證協議。