x86 反彙編/分析工具
偵錯程式是允許使用者一步一步地執行編譯程式的程式。您可以看到哪些指令按什麼順序執行,以及程式的哪些部分被視為程式碼,哪些被視為資料。偵錯程式允許您在程式執行時對其進行分析,以幫助您更好地瞭解它的工作原理。
高階偵錯程式通常至少包含一個基本的反彙編器,通常還包括十六進位制編輯和重新彙編功能。偵錯程式通常允許使用者在指令、函式呼叫甚至記憶體位置上設定斷點。
斷點是傳送給偵錯程式的指令,允許程式執行在滿足特定條件時停止。例如,當程式訪問某個變數或呼叫某個 API 函式時,偵錯程式可以暫停程式執行。
- SoftICE
- Windows 除錯的事實上的標準。SoftICE 可用於本地核心除錯,這是一個非常罕見且非常有價值的功能。SoftICE 於 2006 年 4 月下架。
- WinDbg
- WinDbg 是微軟提供的免費軟體,可用於本地使用者模式除錯,甚至遠端核心模式除錯。WinDbg 與更著名的 Visual Studio Debugger 不同,但它附帶一個不錯的 GUI。提供 32 位和 64 位版本。
- https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools
- IDA Pro
- 由 DataRescue 提供的多處理器、多作業系統、互動式反彙編器。
- http://www.hex-rays.com/idapro/
- OllyDbg
- OllyDbg 是一款免費且強大的 Windows 偵錯程式,內建反彙編和彙編引擎。非常適合補丁、反彙編和除錯。
- http://www.ollydbg.de/
- x64dbg
- 一套 32 位和 64 位 x86 偵錯程式。x64dbg 是已停產的 OllyDbg 的精神繼承者。
- Immunity Debugger
- Immunity Debugger 是 OllyDbg v1.10 的一個分支,內建對 Python 指令碼的支援等等。
- http://immunityinc.com/products/debugger/index.html
許多 Linux 上的開源偵錯程式再次是跨平臺的。它們可能在某些其他 Unix(類似)系統上可用,甚至在 Windows 上可用。某些偵錯程式可能會比您系統上舊的、本地的偵錯程式提供更好的體驗。
- gdb
- GNU 偵錯程式,隨任何正常的 Linux 安裝一起提供。它非常強大,甚至在某種程度上是可程式設計的,儘管原始使用者介面很糟糕。
- lldb
- LLVM 的偵錯程式。
- emacs
- GNU 編輯器,可以用作 gdb 的前端。這提供了一個強大的十六進位制編輯器,並允許用類似 LISP 的語言進行完全指令碼編寫。
- ddd
- 資料顯示偵錯程式。它是 gdb 的另一個前端。這提供了資料結構的圖形表示。例如,一個連結串列看起來就像教科書插圖一樣。
- strace、ltrace 和 xtrace
- 允許您執行程式,同時觀察它執行的操作。使用 strace,您會獲得正在執行的所有系統呼叫的日誌。使用 ltrace,您會獲得所有正在執行的庫呼叫的日誌。使用 xtrace,您會獲得正在執行的某些函式呼叫的日誌。
- valgrind
- 在模擬下執行程式,根據所需的許多外掛模組之一執行分析。您可以根據需要編寫自己的外掛模組。較新版本的 valgrind 還支援 OS X。
- NLKD
- 一個核心偵錯程式。
- http://forge.novell.com/modules/xfmod/project/?nlkd
- KDbg
- 用於 KDE 的 gdb 前端。 http://kdbg.org
- RR0D
- 適用於 Linux 的 Ring-0 偵錯程式。 RR0D 專案頁面
- Radare2
- 一個偵錯程式和反向工程框架。
- Winedbg
- Wine 的偵錯程式。使用 wine 除錯 Windows 可執行檔案。
- dbx
- 源自 AT&T Unix 的系統上的標準 Unix 偵錯程式。它通常是可選開發工具包的一部分,需要額外付費。它使用互動式命令列介面。
- ladebug
- 惠普(最初是數字裝置公司)在 Tru64 Unix 系統上提供的一個增強型偵錯程式,比 dbx 更好地處理執行緒等高階功能。
- DTrace
- Solaris 上的一個高階工具,在整個系統(包括核心)上提供分析等功能。
- mdb
- 模組化偵錯程式 (MDB) 是 Solaris 操作環境中的一個新的通用除錯工具。其主要特點是可擴充套件性。Solaris 模組化偵錯程式指南介紹瞭如何使用 MDB 除錯複雜的軟體系統,重點介紹了用於除錯 Solaris 核心以及相關裝置驅動程式和模組的功能。它還包含關於 MDB 語言語法、偵錯程式功能和 MDB 模組程式設計 API 的完整參考和討論。
如反彙編器部分所述,一個執行像輸出“Hello, World!”這樣簡單操作的 6 行 C 程式變成了大量的彙編程式碼。大多數人不想篩選整個混亂,找出他們想要的資訊。僅透過瀏覽程式碼來查詢所需的資訊可能很耗時。作為替代方案,可以選擇設定斷點,以便程式在到達程式程式碼中的特定點時停止。
例如,假設您的程式在某個特定事件發生後始終發生崩潰:在關閉訊息框之後立即發生。您在所有對MessageBoxA的呼叫上設定斷點。您在設定斷點的情況下執行程式,它停止,準備呼叫MessageBoxA。隨後逐行執行程式碼(稱為步進),觀察程式堆疊,您會看到在呼叫之後不久就會發生緩衝區溢位。
十六進位制編輯器能夠直接檢視和編輯原始檔的二進位制檔案,對於調查專有閉源格式資料檔案的結構非常有用。存在許多十六進位制編輯器。本節將嘗試列出一些最好的、一些最受歡迎的或一些最強大的。
- HxD(免費軟體)
- 適用於 Windows。快速、強大的免費十六進位制、磁碟和 RAM 編輯器
- http://mh-nexus.de/hxd/
- 免費軟體十六進位制編輯器 XVI32
- 適用於 Windows。免費的十六進位制編輯器。
- http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm
- wxHexEditor(測試版,適用於 Windows 和 Linux,免費且開源)
- 專為大型檔案和磁碟裝置設計的快速十六進位制編輯器,允許最大為六位元組,允許大小更改(插入和刪除)而無需建立臨時檔案,可以使用多個窗格檢視檔案,內建反彙編器,支援用於(反向)工程大型二進位制檔案或檔案系統的標籤,可以透過 XOR 加密檢視檔案。
- http://wxhexeditor.sourceforge.net/
- HHD Software 十六進位制編輯器 Neo
- 適用於 Windows。一個快速的檔案、磁碟和記憶體編輯器,內建反彙編程式和檔案結構檢視器。
- http://www.hhdsoftware.com/Family/hex-editor.html
- Catch22 HexEdit
- 適用於 Windows。這是一個功能強大的十六進位制編輯器,具有許多功能。擁有出色的資料結構檢視器。
- http://www.catch22.net/software/hexedit.asp
- BreakPoint Hex Workshop
- 適用於 Windows。一個出色的強大十六進位制編輯器,其有用性受到其不像其他一些選項那樣免費的事實的限制。
- http://www.bpsoft.com/
- Tiny Hexer
- 免費並進行統計。適用於 Windows。
- http://www.mirkes.de/files/
- frhed - 免費十六進位制編輯器
- 適用於 Windows。免費且開源。
- http://www.kibria.de/frhed.html
- Cygnus Hex Editor
- 適用於 Windows。一個非常快速且易於使用的十六進位制編輯器,提供“免費版”。
- http://www.softcircuits.com/cygnus/fe/
- Hexprobe Hex Editor
- 適用於 Windows。一個專業的十六進位制編輯器,旨在包含處理十六進位制資料的所有功能,在十六進位制位元組編輯和位元組模式分析方面特別有用。
- http://www.hexprobe.com/hexprobe/index.htm
- UltraEdit32
- 適用於 Windows。一個十六進位制編輯器/文字編輯器,在 2005 年共享軟體行業頒獎大會上獲得了“年度應用”獎。
- http://www.ultraedit.com/
- Hexinator(適用於 Windows 和 Linux)
- 允許您編輯無限大小的檔案(覆蓋、插入、刪除),以數十種文字編碼顯示文字,以小端和大端位元組順序顯示變數。
- https://hexinator.com
- ICY Hexplorer
- 適用於 Windows。一個輕量級的免費開源十六進位制檔案編輯器,具有一些巧妙的功能,例如畫素檢視、結構和反彙編。
- http://hexplorer.sourceforge.net/
- WinHex
- 適用於 Windows。一個功能強大的十六進位制檔案和磁碟編輯器,具有用於計算機取證和資料恢復的先進功能(政府和軍隊使用)。
- http://www.x-ways.net/index-m.html
- 010 Editor
- 適用於 Windows。一個非常強大且快速的十六進位制編輯器,對資料結構和指令碼有廣泛的支援。可用於編輯驅動器和程序。
- http://www.sweetscape.com/010editor/

- 1Fh
- 適用於 Windows。一個免費的二進位制/十六進位制編輯器,即使在處理大型檔案時也很快。它是唯一允許您以位元組程式碼(所有 256 個字元)檢視檔案的 Windows 十六進位制編輯器。
- http://www.4neurons.com/1Fh/
- HexEdit
- 適用於 Windows(開源)和共享軟體版本。功能強大且易於使用的二進位制檔案和磁碟編輯器。
- http://www.hexedit.com/
- HexToolkit
- 適用於 Windows。一個免費的十六進位制檢視器,專門設計用於反向工程檔案格式。允許以各種格式檢視資料,幷包含表示式求值器以及二進位制檔案比較工具。
- http://www.binaryearth.net/HexToolkit
- FlexHex
- 適用於 Windows。它為基於比 FAT32 檔案更復雜模型的 NTFS 檔案提供完全支援。具體來說,FlexHex 支援 稀疏檔案 和 備用資料流 在任何 NTFS 捲上。可用於編輯 OLE 複合檔案、快閃記憶體卡和其他型別的物理驅動器。
- http://www.heaventools.com/flexhex-hex-editor.htm
- HT Editor
- 適用於 Windows。一個用於可執行檔案的檔案編輯器/檢視器/分析器。其目標是將偵錯程式的低階功能與 IDE 的可用性相結合。
- http://hte.sourceforge.net/
- HexEdit
- 適用於 MacOS。一個簡單但可靠的十六進位制編輯器,您可以更改突出顯示顏色。對於 Apple Classic 使用者也有一個埠。
- http://hexedit.sourceforge.net/
- Hex Fiend
- 適用於 MacOS。一個非常簡單的十六進位制編輯器,但功能強大。它只有 346 KB 可供下載,並且可以接受高達 116 GB 的檔案。
- http://ridiculousfish.com/hexfiend/
- ImHex
- 適用於 Windows、MacOS 和 Linux。顯示、解碼和分析二進位制資料(+ 可列印的 ASCII 字元)並允許編輯位元組。包括資料檢查器,具有各種解碼(整數、浮點數、char/wchar、Unicode、日期、RGBA/RGB565 顏色...)、按十六進位制位元組和字串搜尋、十六進位制差異、模式匹配、yara 規則(用於惡意軟體模式檢測)、雜湊計算、圖形資料統計、反彙編器,以及來自“內容儲存”的各種額外工具。免費開源,根據 GPLv2 許可。
- https://imhex.werwolv.net/
僅限 Linux 十六進位制編輯器
[edit | edit source]- bvi
- 一個典型的三窗格十六進位制編輯器,具有類似 vi 的介面。
- emacs
- 除了其他一切之外,emacs 還包括一個十六進位制編輯器。
- joe
- Joe 的編輯器現在也支援十六進位制編輯。
- bless
- 一個非常強大的基於 gtk 的十六進位制編輯器。
- xxd 和任何文字編輯器
- 使用 xxd 生成十六進位制轉儲,在您最喜歡的文字編輯器中自由編輯它,然後將其轉換回包含更改的二進位制檔案。
- GHex
- 適用於 GNOME 的十六進位制編輯器。
- http://directory.fsf.org/All_Packages_in_Directory/ghex.html
- Okteta
- 自 4.1 版起,KDE 中整合的十六進位制編輯器。提供傳統的兩列布局,一列包含數值(二進位制、八進位制、十進位制、十六進位制),另一列包含字元(支援大量字元集)。可以在兩列中進行編輯,並具有無限的撤銷/重做功能。一小套工具(搜尋/替換、字串、二進位制過濾器等)。
- http://utils.kde.org/projects/okteta
- BEYE
- 二進位制檔案的檢視器,在二進位制、十六進位制和反彙編模式下內建編輯器。它使用本機 Intel 語法進行反彙編。突出顯示 AVR/Java/Athlon64/Pentium 4/K7-Athlon 反彙編器,俄語內碼表轉換器,格式的完整預覽 - MZ、NE、PE、NLM、coff32、elf 部分 - a.out、LE、LX、PharLap;程式碼導航器等等。(
- http://beye.sourceforge.net/en/beye.html
- BIEW
- 二進位制檔案的檢視器,在二進位制、十六進位制和反彙編模式下內建編輯器。它使用本機 Intel 語法進行反彙編。突出顯示 AVR/Java/Athlon64/Pentium 4/K7-Athlon 反彙編器,俄語內碼表轉換器,格式的完整預覽 - MZ、NE、PE、NLM、coff32、elf 部分 - a.out、LE、LX、PharLap;程式碼導航器等等。(專案已重新命名,請參閱 BEYE)
- http://biew.sourceforge.net/en/biew.html
- hview
- 一個基於 curses 的十六進位制編輯器,旨在儘可能快地處理大型檔案(600+MB),而且開銷很小。
- http://web.archive.org/web/20010306001713/http://tdistortion.esmartdesign.com/Zips/hview.tgz
- HexCurse
- 一個用 C 編寫的基於 ncurses 的十六進位制編輯器,目前支援十六進位制和十進位制地址輸出、跳轉到指定檔案位置、搜尋、ASCII 和 EBCDIC 輸出、加粗修改、撤消命令、快速鍵盤快捷鍵等。
- http://www.jewfish.net/description.php?title=HexCurse
- hexedit
- 以十六進位制或 ASCII 形式檢視和編輯檔案。
- http://rigaux.org/hexedit.html
- Data Workshop
- 一個用於檢視和修改二進位制資料的編輯器;提供不同的檢視,可用於編輯、分析和匯出二進位制資料。
- http://www.dataworkshop.de/
- VCHE
- 一個十六進位制編輯器,它允許您檢視影片 ROM 中的所有 256 個字元,即使是控制字元和擴充套件 ASCII,它使用 /dev/vcsa* 裝置來實現。它還可以編輯非正規檔案,例如硬碟、軟盤、CDROM、ZIP、RAM,以及幾乎所有裝置。它帶有一個 ncurses 版本和一個原始版本,適用於在 X 下或遠端工作的人員。
- http://www.grigna.com/diego/linux/vche/
- DHEX
- DHEX 只是另一個帶有用於 ncurses 的 Diff 模式 的十六進位制編輯器。它大量使用顏色,並且可以進行主題化。
- http://www.dettus.net/dhex/
其他 Windows 工具
[edit | edit source]資源監視器
[edit | edit source]- SysInternals 免費軟體
- 此頁面包含大量優秀的實用程式,其中許多對於安全專家、網路管理員(最重要的是對於我們來說)反向工程人員非常有用。具體來說,請檢視 **程序監視器**、**FileMon**、**RegMon**、**TCPView** 和 **程序資源管理器**。
- https://docs.microsoft.com/en-us/sysinternals/
API 監視器
[edit | edit source]- SpyStudio 免費軟體
- Spy Studio 軟體是一種工具,可以掛鉤到 Windows 程序,記錄 DLL 的 Windows API 呼叫,插入斷點並更改引數。
- http://www.nektra.com/products/spystudio/
- rohitab.com API Monitor
- API Monitor 是一款免費軟體,可讓您監視和控制應用程式和服務發出的 API 呼叫。功能包括詳細的引數資訊、結構、聯合體、列舉/標誌資料型別、呼叫堆疊、呼叫樹、斷點、自定義 DLL、記憶體編輯器、呼叫過濾、COM 監視、64 位。包含超過 13,000 個 API 和 1,300 多個 COM 介面的定義。
- http://www.rohitab.com/apimonitor
PE 檔案頭轉儲器
[edit | edit source]- Dumpbin
- Dumpbin 以前是與 MS Visual Studio 一起提供的程式,但最近 Dumpbin 的功能已整合到 Microsoft Linker link.exe 中。要訪問 dumpbin,請將 /dump 作為第一個引數傳遞給 link.exe
link.exe /dump [options]
- 通常將此轉換處理作為批處理檔案建立非常有用
::dumpbin.bat link.exe /dump %*
本 Wiki 中所有使用 dumpbin 的示例都將以這種方式呼叫它。
- 以下列出了 dumpbin 的有用功能 [1]
dumpbin /EXPORTS displays a list of functions exported from a library dumpbin /IMPORTS displays a list of functions imported from other libraries dumpbin /HEADERS displays PE header information for the executable
- 依賴
- Dependency Walker 是一款圖形介面工具,允許您檢視二進位制檔案的匯出和匯入。它與許多 Microsoft 工具捆綁在一起,包括 MS Visual Studio。
GNU 軟體包已移植到許多平臺,包括 Windows。
- GNU BinUtils
- GNU BinUtils 包含多個小型實用程式,在處理二進位制檔案時非常有用。此列表中最主要的程式包括 GNU objdump、readelf、GAS 彙編器和 GNU 連結器,雖然反彙編器可能更多地使用 addr2line、c++filt、nm 和 readelf。
- http://www.gnu.org/software/binutils/
- objdump
- 轉儲有關可執行檔案的資訊,包括符號和彙編程式碼。它作為標準提供。它可以被配置為支援非本地二進位制格式。
objdump -p displays a list of functions imported from other libraries, exported to and miscellaneous file header information
它對於從命令列檢查 dll 依賴項很有用
- readelf
- 類似於 objdump,但專門用於 ELF 可執行檔案。
- size
- 列出段的大小。
- nm
- 列出 ELF 檔案中的符號。
- strings
- 列印檔案中的字串。
- file
- 告訴您檔案的型別。
- fold
- 將 strings 的結果摺疊成可分頁的內容。
- kill
- 可用於使用 sig_stop 訊號停止程式。
- strace
- 跟蹤系統呼叫和訊號。
- oprofile
- 可用於找出使用了哪些函式和資料段。
- subterfugue
- 一個用於對執行中的可執行檔案執行奇特操作的工具。該工具可以用 python 編寫指令碼。使用者可以編寫指令碼,在發生事件時採取行動,例如更改系統呼叫的引數。
- http://subterfugue.org/
- lizard
- 允許您反向執行程式。
- http://lizard.sourceforge.net/
- dprobes
- 允許您處理核心程式碼和使用者程式碼。
- biew
- 十六進位制編輯器和反彙編器。
- ltrace
- 顯示動態連結的可執行檔案的執行時庫呼叫資訊。
- asmDIFF
- 透過使用程式碼度量,在同一二進位制檔案的不同版本中搜索函式、指令和記憶體指標。支援 PE 和 ELF 檔案中的 x86、x86_64 程式碼。
- http://duschkumpane.org/index.php/asmdiff
XCode 包含一些額外的工具,可用於在 OS X 上與 Mach-O 格式一起使用。您可以在 /Applications/Xcode.app/Contents/Developer/usr/bin/ 下檢視更多這些工具。
- lipo
- 管理包含多個架構的胖二進位制檔案。
- otool
- 目標檔案顯示工具,在某種程度上類似於 objdump 和 readelf。
XCode 還打包了許多 Unix 工具,其中許多工具與 GNU 工具共享名稱(和功能)。還可以找到其他工具,例如 nasm/ndisasm、lldb 和 GNU as。