跳至內容

x86 反彙編/分析工具

來自華夏公益教科書,開放的書籍,面向開放的世界

偵錯程式

[編輯 | 編輯原始碼]

偵錯程式是允許使用者一步一步地執行編譯程式的程式。您可以看到哪些指令按什麼順序執行,以及程式的哪些部分被視為程式碼,哪些被視為資料。偵錯程式允許您在程式執行時對其進行分析,以幫助您更好地瞭解它的工作原理。

高階偵錯程式通常至少包含一個基本的反彙編器,通常還包括十六進位制編輯和重新彙編功能。偵錯程式通常允許使用者在指令、函式呼叫甚至記憶體位置上設定斷點

斷點是傳送給偵錯程式的指令,允許程式執行在滿足特定條件時停止。例如,當程式訪問某個變數或呼叫某個 API 函式時,偵錯程式可以暫停程式執行。

Windows 偵錯程式

[編輯 | 編輯原始碼]
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 偵錯程式

[編輯 | 編輯原始碼]

許多 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
edb
一個功能齊全的基於外掛的偵錯程式,靈感來自著名的 OllyDbg專案頁面
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 十六進位制編輯器中檢視一個小二進位制檔案。
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
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_dumpbin_reference.asp
依賴
Dependency Walker 是一款圖形介面工具,允許您檢視二進位制檔案的匯出和匯入。它與許多 Microsoft 工具捆綁在一起,包括 MS Visual Studio。

GNU 工具

[編輯 | 編輯原始碼]

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
跟蹤系統呼叫和訊號。

其他 Linux 工具

[編輯 | 編輯原始碼]
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 工具

[編輯 | 編輯原始碼]

XCode 包含一些額外的工具,可用於在 OS X 上與 Mach-O 格式一起使用。您可以在 /Applications/Xcode.app/Contents/Developer/usr/bin/ 下檢視更多這些工具。

lipo
管理包含多個架構的胖二進位制檔案。
otool
目標檔案顯示工具,在某種程度上類似於 objdump 和 readelf。

XCode 還打包了許多 Unix 工具,其中許多工具與 GNU 工具共享名稱(和功能)。還可以找到其他工具,例如 nasm/ndisasm、lldb 和 GNU as。

華夏公益教科書