ScratchABit 是一種互動式增量反組譯程序,具有資料/控制流程分析功能。 ScratchABit 致力於開源逆向工程社群的努力(逆向工程為供應商未正確支援的硬體生產開源驅動程式/韌體、用於硬體和軟體互通性、用於安全研究)。
ScratchABit 支援社群知名的 IDAPython API 來編寫反組譯/擴充模組。
ScratchABit 是一項正在進行的工作,根據需要添加功能,歡迎貢獻。
ScratchABit 是根據 GNU 通用公共授權 v3 (GPLv3) 的條款發布的。
不應該用模糊的語言來寫。這些包括太低階的語言,允許存取未初始化的變量,不區分變量和函數/過程,從任意數字開始數組索引等。
使用者介面框架應該允許使用者進行所需級別的交互,而不是在框架版本之間添加依賴性、膨脹、問題和不相容性。 ScratchABit 目前使用簡單的全螢幕文字使用者介面,使用 ANSI/VT100 終端轉義序列(是的,甚至連 Curses 庫也被認為太臃腫,無法強加給使用者)。
應利用易於使用的文字格式來儲存“資料庫”,以方便重複使用和工具編寫,並儲存在版本控制系統中。
要使用ScratchABit,您需要安裝Python3(使用Python 3.3 到3.7 進行測試)和VT100(最低)或XTerm(建議)終端機或終端模擬器(任何Unix 系統都應該相容,如Linux/BSD/等,請參閱下面的常見問題更多的)。
使用以下命令克隆程式碼:
git clone --recursive https://github.com/pfalcon/ScratchABit
如果您在沒有--recursive
情況下複製程式碼,請在 ScratchABit 目錄中執行git submodule update --init
。
ScratchABit 現在隨附基於 Capstone Engine 的 CPU 插件,允許存取多種 CPU 架構。要使用它,應安裝 Capstone 的最新 Python 綁定模組(優先選擇作業系統發行版附帶的軟體包,這些軟體包通常已經過時)。最簡單的安裝方法是安裝到 Python 使用者套件目錄:
pip3 install --no-cache-dir --user capstone
另一種方法是將其安裝到 ScratchABit 目錄中的 Python 虛擬環境:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
每當您開啟新的終端會話來使用 ScratchABit 時,請再次執行source .venv/bin/activate
指令以啟動虛擬環境。
如果以上方法都不起作用,您可以嘗試在系統範圍內安裝 capstone 軟體包(不建議):
sudo pip3 install --system capstone
如果您想反組譯自描述可執行格式(如 ELF)的文件,只需將其作為參數傳遞給ScratchABit.py
即可。該儲存庫包含許多適用於各種架構的example-*.elf
文件,以便快速入門。例如,試試 x86 32 位元版本:
python3 ScratchABit.py example-x86_32.elf
或者,如果要反彙編原始二進位文件,則需要建立 .def(定義)文件,以指定為程式碼定義哪些記憶體區域、在哪個位址載入二進位檔案等。 )儲存庫包含一個簡單的x86_64 原始二進位程式碼,以及對應的example-x86_64.def 檔案(查看內部可用選項的描述):
python3 ScratchABit.py example-x86_64.def
按 F9 存取選單(滑鼠也可以在 XTerm 相容終端中使用)。按 F1 以取得關鍵綁定的協助(大多數操作也可以透過選單存取)。 ScratchABit 的工作流程與其他互動式反編譯器類似(一些先前的經驗或背景閱讀可能會有所幫助)。
IDAPython 處理器外掛程式可以從 Python 模組路徑上的任何位置載入。或者,您可以將插件.py
檔案符號連結/複製到plugins/cpu/
子目錄中。
插件可用後,根據example-x86_64.def
建立一個新的定義文件,在cpu xxx
行中設定插件模組名稱(不含.py
副檔名)。
有關使用外部插件的非常簡單的範例,請參閱此 esp8266.def 文件,該文件與 ida-xtensa2 儲存庫中的 xtensa.py 外掛程式配合使用。
Q:支援哪些處理器/架構?
答:ScratchABit 本身不支援任何處理器架構,它可以使用 IDAPython API 外掛程式完全重新定位。許多插件可用,編寫新插件很容易。為了讓使用者測試 ScratchABit,發行版中包含了一個簡單的 x86 處理器插件,並在底層使用了 Pymsasid 反彙編程式。
從2.0版本開始,還包含了Capstone插件,允許存取多種架構,包括x86、ARM、MIPS、PowerPC、SPARC等(根據使用者測試逐步啟用架構支援)。
您可以在plugins/cpu/
dir 的自述文件中閱讀有關與ScratchABit 一起提供的插件的資訊。
Q:調試器?
答:ScratchABit 致力於靜態分析和對新 CPU 架構的輕鬆支援(只需用 Python 編寫新的 CPU 外掛程式 - 您可以在幾個小時內獲得初步結果)。動態分析並未被視為核心功能,也沒有立即實施它的計畫。不過,補丁是受歡迎的。
Q:反編譯器?
A:有一個相關的項目,叫ScratchABlock,用於深度程式分析、轉換和反編譯。預計隨著 ScratchABlock 的成熟,它的一些功能將在 ScratchABit 中可用(可能透過外掛程式)。
Q:我不在 Linux 上,如何運行 ScratchABit?
答:在系統上的模擬器/虛擬機器中安裝 Linux,然後再高興吧。
Q:強制截圖嗎?
答: 當然: