Voltron 是一個用 Python 編寫的可擴展偵錯器 UI 工具包。它旨在透過附加可從偵錯器主機檢索和顯示資料的實用程式視圖來改善各種偵錯器(LLDB、GDB、VDB 和 WinDbg)的使用者體驗。透過在其他 TTY 中執行這些視圖,您可以建立自訂的偵錯器使用者介面來滿足您的需求。
Voltron 並不打算成為每個人的一切。它不是調試器 CLI 的全面替代品。相反,它旨在補充您現有的設置,並允許您根據需要盡可能多或盡可能少地擴展 CLI 調試器。如果您只想在偵錯器旁邊的視窗中查看寄存器內容,您可以這樣做。如果你想全力以赴並擁有看起來更像 OllyDbg 的東西,你也可以這樣做。
內建視圖用於:
作者的設定看起來像這樣:
任何調試器命令都可以拆分為視圖並使用指定的 Pygments 詞法分析器突出顯示:
更多螢幕截圖在這裡。
Voltron 支援 LLDB、GDB、VDB 和 WinDbg/CDB(透過 PyKD),並在 macOS、Linux 和 Windows 上運作。
WinDbg 支援仍然相當新,如果您有問題,請提出問題。
支援以下架構:
LLDB | 資料庫 | 虛擬資料庫 | 風資料庫 | |
---|---|---|---|---|
x86 | ✓ | ✓ | ✓ | ✓ |
x86_64 | ✓ | ✓ | ✓ | ✓ |
手臂 | ✓ | ✓ | ✓ | ✗ |
ARM64 | ✓ | ✗ | ✗ | ✗ |
電源電腦 | ✗ | ✓ | ✗ | ✗ |
注意:安裝腳本僅完全支援 macOS 和 Debian 衍生版本。希望它不會在其他 Linux 發行版上失敗,但它不會嘗試安裝軟體包依賴項。如果您使用的是其他發行版,請查看install.sh
以了解在運行之前可能需要安裝哪些依賴項。
下載來源並執行安裝腳本:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
預設情況下,安裝腳本將安裝到使用者的site-packages
目錄中。如果要安裝到系統site-packages
中,請使用-s
標誌:
$ ./install.sh -s
您也可以安裝到虛擬環境中(僅適用於 LLDB),如下所示:
$ ./install.sh -v /path/to/venv -b lldb
如果您使用的是沒有 shell 的 Windows,安裝時遇到問題,或希望手動安裝,請參閱手動安裝文件。
如果您的偵錯器有 init 腳本(對於 LLDB 為.lldbinit
,對於 GDB 為.gdbinit
),請透過取得entry.py
入口點腳本將其配置為在啟動時載入 Voltron。完整路徑將位於voltron
包內。例如,在 macOS 上,它可能是/Library/Python/2.7/site-packages/voltron/entry.py 。如果install.sh
腳本在您的路徑中偵測到 GDB 或 LLDB,則會自動將其新增至您的.gdbinit
或.lldbinit
檔案中。
LLDB:
command script import /path/to/voltron/entry.py
廣東發展局:
source /path/to/voltron/entry.py
如有必要,啟動調試器並手動初始化 Voltron。
在最新版本的 LLDB 上,您不需要手動初始化 Voltron:
$ lldb target_binary
在舊版的 LLDB 上,您需要在載入次等版本後呼叫voltron init
:
$ lldb target_binary
(lldb) voltron init
廣東發展局:
$ gdb target_binary
虛擬資料庫:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB 僅支援透過 Linux 用戶空間的 Bash 運行。作者使用Git Bash和ConEmu進行測試。啟動偵錯器時,可以透過一個命令載入 PyKD 和 Voltron:
$ cdb -c '.load C:pathtopykd.pyd ; !py --global C:pathtovoltronentry.py' target_binary
在另一個終端機(我使用 iTerm 窗格)中啟動一個 UI 視圖。在 LLDB、WinDbg 和 GDB 上,視圖將立即更新。在 VDB 上,它們不會更新,直到下級停止(在斷點處、步驟之後等):
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
設定斷點並運行你的下級。
(*db) b main
(*db) run
當偵錯器到達斷點時,視圖將更新以反映暫存器、堆疊、記憶體等的當前狀態。因此,每次您單步執行或繼續執行並遇到斷點時,視圖都會更新。
請參閱 github 上的 wiki。
Q:為什麼我在載入 Voltron 時遇到ImportError
?
答:您可能安裝了多個版本的 Python,並且使用了錯誤的版本安裝了 Voltron。請參閱更詳細的安裝說明。
Q:全球環境基金?佩達? PwnDbg? fG的gdbinit?
A. GDB 的所有超級出色的擴充。這些工具主要為開發任務提供一組附加命令,但每個工具還提供「上下文」顯示,其中包含寄存器、堆疊、程式碼等視圖,如 Voltron。每次偵錯器停止時,這些工具都會在偵錯器控制台中列印其上下文顯示。 Voltron 採用了不同的方法,在偵錯器中嵌入 RPC 伺服器植入,並啟用來自其他終端(甚至是 Web 瀏覽器,或現在與 Binary Ninja 同步)的視圖附件,這允許用戶建立更乾淨的多視窗介面他們的調試器。 Voltron 與所有這些工具配合得很好。您只需在所選的 GDB 擴充功能中停用上下文顯示並連接一些 Voltron 視圖,同時仍可獲得這些工具新增的有用命令的所有好處。
請參閱 github 上的問題追蹤器以獲取更多資訊或提交問題。
如果您在載入 Voltron 時遇到ImportError
,請確保您已按照適合您平台的安裝說明進行操作。
在舊版的 LLDB 上,載入偵錯目標後必須手動執行voltron init
指令,因為必須先載入目標,然後才能安裝 Voltron 的鉤子。 Voltron 將嘗試自動註冊其事件處理程序,如果需要voltron init
,它將通知使用者。
有關 WinDbg/CDB 支援的更多資訊請參閱此處。
作者主要在 macOS 上使用 Voltron 和最新版本的 LLDB。在發布之前,我們將嘗試在盡可能多的平台和架構上測試所有內容,但 LLDB/macOS/x64 將是迄今為止最常用的組合。希望戰神金剛不會讓你的寵物著火,但 YMMV。
請參閱許可證文件。
如果你使用這個並且不討厭它,請找個時間在會議上給我買一杯啤酒。該許可證也適用於其他貢獻者 - richo 絕對值得為他的貢獻喝點啤酒。
感謝我的前雇主 Assurance 和 Azimuth Security 給我時間來做這件事。
感謝 richo 對戰神金剛的所有貢獻。
fG! 的 gdbinit 是這個專案的最初靈感。
感謝 Willi 實施 VDB 支援。
Voltron 現在使用 Capstone 進行反彙編以及調試器主機的內部反彙編機制。 Capstone 是一個功能強大、開源、多架構的反彙編器,下一代逆向工程和調試工具正在其基礎上建構。一探究竟。
感謝grazfather持續的貢獻。