跳至内容

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。

华夏公益教科书