Kam1n0 v2.x是一個可擴展的組裝體管理和分析平台。它允許用戶首先將(大型)二進位檔案集合索引到不同的儲存庫中,並提供不同的分析服務,例如複製搜尋和分類。它透過使用應用程式的概念來支援多租戶存取和組件儲存庫的管理。應用程式實例包含其自己的專有儲存庫並提供專門的分析服務。考慮到逆向工程任務的多功能性,Kam1n0 v2.x 伺服器目前提供了三種不同類型的複製搜尋應用程式: Asm-Clone 、 Sym1n0和Asm2Vec ,以及基於Asm2Vec的可執行分類。新的應用程式類型可以進一步添加到平台中。
一個使用者可以創建多個應用程式實例。應用程式實例可以在特定的使用者群組之間共用。應用程式儲存庫的讀寫存取和開關狀態可以由應用程式擁有者控制。 Kam1n0 v2.x 伺服器可以使用多個共用資源池同時為應用程式提供服務。
Kam1n0 由 Steven HH Ding 和 Miles Q. Li 在加拿大麥吉爾大學資料探勘和安全實驗室 Benjamin CM Fung 的監督下開發。它在 2015 年 Hex-Rays 插件大賽中獲得了二等獎。
SHH Ding、BCM Fung 和 P. Charland。 Kam1n0:用於逆向工程的基於 MapReduce 的組件克隆搜尋。第 22 屆 ACM SIGKDD 國際知識發現與資料探勘會議 (SIGKDD) 會議紀錄,第 461-470 頁,加州舊金山:ACM Press,2016 年 8 月。
SHH Ding、BCM Fung 和 P. Charland。 Asm2Vec:提高二進位克隆搜尋的靜態表示穩健性,防止程式碼混淆和編譯器最佳化。第 40 屆 IEEE 安全與隱私研討會 (S&P) 會議記錄,18 頁,加州舊金山:IEEE 電腦協會,2019 年 5 月。
Asm-Clone應用程式試圖解決彙編函數的高效子圖搜尋問題(即圖同構問題)(2.3M函數的平均查詢時間<1.3s,平均索引時間<30ms)。給定一個目標函數(如下所示左側的函數),它可以識別儲存庫中其他函數(如下所示右側的函數)中克隆的子圖。
透過差異化模糊測試和約束求解進行語義克隆搜尋。一種高效且可擴展的動態-靜態混合方法(平均查詢時間<1s,平均索引時間<100ms,具有 150 萬個函數)。給定一個目標函數(如下所示左側的函數),它可以識別儲存庫中其他函數(如下所示右側的函數)中克隆的子圖。支援抽象語法圖的可視化。
Asm2Vec 利用表示學習。它理解彙編代碼的詞法語義關係。例如, xmm*
暫存器在語意上與addps
等向量運算相關。 memcpy
與strcpy
類似。下圖顯示了從 libgmp 中gmpz_tdiv_r_2exp
的相同原始碼編譯的不同組譯函數。從左到右,彙編函數使用 GCC O0 選項、GCC O3 選項、O-LLVM 混淆器控制流程圖、Flattening 選項和 LLVM 混淆器 Bogus 控制流程圖選項進行編譯。 Asm2Vec 可以靜態地將它們識別為克隆。
在此應用程式中,使用者定義一組基於功能相關性的軟體類,並提供屬於每個類別的二進位檔案。然後系統自動將函數分組為簇,簇中的函數透過克隆關係直接或間接連接。對分類具有區分性的簇被保留並用作其類別的簽名。給定一個目標二進位文件,系統會顯示它屬於每個軟體類別的程度。
使用Asm2Vec作為其函數相似度計算模型
下圖顯示了 Kam1n0 v2.x 的主要 UI 元件和功能。我們採用材料設計。一般來說,每個使用者都有一個應用程式清單、一個正在執行的作業清單和一個結果檔案清單。
目前版本的 Kam1n0 由兩個安裝程式組成:核心伺服器和 IDA Pro 外掛程式。
安裝人員 | 包含的組件 | 描述 |
---|---|---|
Kam1n0-伺服器.msi | 核心引擎 | 主引擎提供索引和搜尋服務。 |
工作台 | 用於管理儲存庫和運行服務的使用者介面。 | |
網頁使用者介面 | 用於搜尋/索引二進位檔案和彙編函數的 Web 使用者介面。 | |
適用於 VS 15 的 Visual C++ 可再發行版 | z3 的依賴關係。 | |
Kam1n0-IDA-插件.msi | 外掛 | 連接器和使用者介面。 |
Cefpython 的 PyPI 輪子 | 使用者介面的渲染引擎。 | |
PyPI 和依賴輪 | Python 的套件管理。包含在 IDA 6.8 和 6.9 中。 |
Kam1n0核心引擎純粹是用Java來寫。您需要以下相依性:
從我們的發布頁面下載Kam1n0-Server.msi
檔案。按照說明安裝伺服器。系統將提示您選擇安裝路徑。如果伺服器不需要進行任何拆卸,IDA Pro 是可選的。換句話說,客戶端使用IDA Pro的Kam1n0插件。強烈建議將 IDA Pro 與 Kam1n0 伺服器一起安裝。 Kam1n0 伺服器將透過尋找您用於開啟.i64
檔案的預設應用程式來自動偵測您的 IDA Pro。
Kam1n0 IDA Pro 外掛程式使用 Python 編寫邏輯,使用 HTML/JavaScript 編寫渲染。其安裝需要以下相依性:
接下來,從我們的發布頁面下載Kam1n0-IDA-Plugin.msi
安裝程式。按照說明安裝插件和運行時。請注意,該插件必須安裝在 IDA Pro 插件資料夾中,該資料夾位於$IDA_PRO_PATH$/plugins
。例如,在 Windows 上,路徑可能是C:/Program Files (x86)/IDA 6.95/plugins
。安裝程式將偵測並驗證路徑。
確保您擁有Oracle版本的 Java 11。
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found
),如果您使用代理,請確保設定並匯出http_proxy
和https_proxy
環境變量,然後使用 sudo 上的-E
選項重試。此外,如果您收到「add-apt儲存庫命令未找到」錯誤,請嘗試: sudo apt install -y software-properties-common
。sudo apt-get update
和sudo apt-get install oracle-java8-installer
java -version
驗證您的 Java 版本;您可能需要手動設定 JAVA_HOME 環境變數(在/etc/environment
中), JAVA_HOME=/usr/lib/jvm/java-11-oracle
從 Kam1n0-Community 下載 Linux 的最新版本(Kam1n0-IDA-Plugin.tar.gz 和 Kam1n0-Server.tar.gz)。
解壓縮兩個 tarball(即 tar –xvzf Kam1n0-IDA-Plugin.tar.gz 和 tar –xvzf Kam1n0-Server.tar.gz)
Kam1n0-Server.tar.gz 檔案將建立伺服器目錄。
在server
目錄中,您應該會看到一個名為kam1n0.properties
的文件,您可以在其中為 kam1n0 設定各種配置;這非常重要。
將kam1n0.data.path
設定為您想要寫入 kam1n0 相關資料的位置。我們選擇將其放在我們保存server
相同位置。 kam1n0.ida.home
指的是您的 IDA 安裝位置。如果您沒有 IDA 且不打算使用 kam1n0 進行反彙編,請註解此行(以及kam1n0.ida.batch
,後面的行)。有關kam1n0.properties
檔案的更多(準確)信息,請參閱kam1n0.properties.explained
檔案。
運行 kam1n0-server-workbench: java -jar kam1n0-server-workbench.jar
。這應該會彈出一個窗口,提示您實際啟動 kam1n0。或者,執行 kam1n0-server: java -jar kam1n0-server.jar --start
。這將從沒有視窗的控制台啟動伺服器。
要連接並使用它,請在瀏覽器中轉到127.0.0.1:8571
偵聽的預設連接埠應為 8571,但可以在 kam1n0.properties 中變更)。您應該會看到漂亮的 kam1n0 Web UI。如果您不知道如何使用 kam1n0,請按照 Kam1n0-Community 儲存庫上的教學進行操作。
最新版本不再支援先前版本(<2.0.0)中使用的彙編程式碼儲存庫和設定檔。如果您需要遷移舊儲存庫,請聯絡我們。
複製最新的穩定分支(不要忘記--recursive
!):
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
IntelliJ:將根目錄 /kam1n0/kam1n0/ 匯入為 Maven 專案。所有子模組將相應地加載。 EclipseEE:將複製的 git 儲存庫新增至 git 視圖。從 git 儲存庫匯入所有 Maven 專案。您可能需要修改類路徑以解決任何錯誤。在 IDE 中執行時(透過 kam1n0-resources 子模組),所有資源路徑都會動態修改。
建構專案:
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
產生的二進位檔案可以在 /kam1n0/build-bins/ 中找到
要執行測試程式碼,您需要先從 http://chromedriver.chromium.org/ 下載chromedriver.exe
並將其絕對路徑新增至名為webdriver.chrome.driver
的環境變數中。也要求系統中安裝有chrome瀏覽器。測試程式碼將啟動一個瀏覽器實例來測試 UI 介面。完整的測試過程大約需要 3 小時。
cd /kam1n0/kam1n0
mvn -DskipTests clean package # you can skip this one if you already built the package
mvn -DskipTests package # you can skip this one if you already built the package
mvn -DforkMode=never test
這些命令僅編譯帶有 libvex 和 z3 預編譯輪的 java。它開箱即用。 libvex 和 z3 的建置依賴於平台。我們使用 Angr 的 libvex 分支。更重要的建置腳本以及 Windows/Linux 的安裝程式可以在 /kam1n0-builds/ 下找到
我們有一個 Jenkin 伺服器用於持續開發和交付。最新的穩定版本將發佈在這裡。我們會定期將我們的內部實驗分支與此儲存庫同步。
該軟體由加拿大麥吉爾資料探勘和安全實驗室以及皇后大學 L1NNA 研究實驗室的 Steven HH Ding、Miles Q. Li 和 Benjamin CM Fung 開發。它根據 Apache 許可證版本 2.0 分發。詳細資訊請參閱LICENSE.txt。
版權所有 2014-2021 麥吉爾大學和研究人員。版權所有。