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。