这份教程将带你从零开始,学习如何使用 Hopper 来分析二进制文件,理解其工作原理,并进行简单的修改。

目录
-
- 1 什么是 Hopper Disassembler?
- 12 为什么使用 Hopper?
- 3 获取与安装
- 4 界面概览
-
- 1 打开一个可执行文件
- 2 反汇编模式选择
- 3 理解反汇编视图
- 4 导航与搜索
-
- 1 反编译器
- 2 数据结构与交叉引用
- 3 重命名与注释
- 4 图形视图
- 5 调试器 (高级功能)
-
第四部分:实战演练 - "Hello, World!" 程序分析
(图片来源网络,侵删)- 1 目标:找到字符串并理解其调用流程
- 2 操作步骤
-
- 1 代码修改与编译
- 2 学习路径建议
- 3 推荐资源
第一部分:准备工作与核心概念
1 什么是 Hopper Disassembler?
Hopper 是一款功能强大的反汇编器和反编译器,它的主要作用是将机器码(二进制文件,如 .exe, .dll, Mach-O 等)转换回人类可读的汇编语言代码,甚至更进一步,尝试将其还原成类似 C 语言的高级代码。
2 为什么使用 Hopper?
- 逆向工程:分析闭源软件,理解其工作原理、查找漏洞或学习其算法。
- 恶意软件分析:研究病毒、木马、勒索软件等恶意代码的行为。
- 软件破解:分析软件的注册、验证机制,移除或绕过它们。
- 学习汇编:通过查看真实编译后的代码来学习汇编语言和特定平台的调用约定。
- 安全研究:进行漏洞挖掘和渗透测试。
3 获取与安装
- 官网:访问 Hopper Disassembler 官网。
- 版本:
- Hopper Disassembler 4:适用于 macOS,功能完整。
- Hopper Disassembler v5:适用于 Windows,功能完整。
- Hopper Disassembler Lite:功能受限的免费版本,适合初学者体验。
- 安装:下载对应系统的版本,按照提示进行安装即可。
4 界面概览
启动 Hopper 并打开一个文件后,你会看到几个主要窗口:
- 反汇编视图:这是核心窗口,显示汇编代码。
- 控制台/日志:显示操作日志和错误信息。
- 数据/函数列表:左侧或右侧的面板,列出所有导入的函数、导出的函数、字符串、类等。
- 图形视图:以流程图形式展示函数逻辑。
- 反编译视图:显示伪 C 代码。
第二部分:基础分析流程
1 打开一个可执行文件
通过菜单 File -> Open... 选择你想要分析的二进制文件,Hopper 会自动检测文件类型(如 Mach-O, ELF, PE 等)。

2 反汇编模式选择
在打开文件后,Hopper 会进行初步分析,之后,你需要选择一个反汇编模式,这决定了 Hopper 如何将机器码解释为汇编指令。
- Intel (x86_64):适用于现代 Windows 和 macOS 应用。
- ARM 64-bit:适用于 Apple Silicon Mac、iOS 和现代 Android 设备。
- ARM 32-bit (Thumb/ARM):适用于 32 位 ARM 设备。
- 其他模式:如
x86(32位),PowerPC等。
选择错误的模式会导致反汇编代码完全无法理解,请务必确保选择正确。
3 理解反汇编视图
这是你每天都要面对的地方,一条典型的汇编指令包含:
0x100003f54: push rbp 0x100003f55: mov rbp, rsp 0x100003f58: sub rsp, 0x20 0x100003f5c: mov QWORD PTR [rbp-0x8], rdi 0x100003f60: mov DWORD PTR [rbp-0xc], esi 0x100003f63: mov eax, 0 0x100003f68: call 0x100003f90 0x100003f6d: leave 0x100003f6e: ret
- 地址:
0x100003f54,指令在内存中的位置。 - 机器码:
push rbp对应的二进制数据,Hopper 通常会隐藏它,但可以显示。 - 指令:
push rbp,具体的汇编操作。 - 操作数:
rbp,指令操作的对象。
4 导航与搜索
- 跳转:双击一个函数名或地址,会跳转到该位置。
- 返回:按
ESC键可以返回上一个位置。 - 搜索:
⌘ + F(Mac) /Ctrl + F(Win):在当前视图内搜索文本。⌘ + Shift + F/Ctrl + Shift + F:在整个二进制文件中搜索(字符串、指令、地址等)。⌘ + B/Ctrl + B:跳转到当前指令引用的地址(call指令调用的函数)。⌘ + Shift + B/Ctrl + Shift + B:返回到调用当前指令的位置。
第三部分:核心功能详解
1 反编译器
这是 Hopper 的王牌功能,它能将汇编代码转换为可读性极高的伪 C 代码。
- 如何使用:在反汇编视图中选中一个函数,然后点击菜单
Decompiler -> Decompile current function(快捷键⌘ + R/Ctrl + R)。 - 效果:右侧或新窗口会出现类似 C 代码的结构,极大地提高了分析效率。
示例:
汇编代码:
0x100003f90: push rbp 0x100003f91: mov rbp, rsp 0x100003f94: mov QWORD PTR [rbp-0x8], rdi 0x100003f98: cmp QWORD PTR [rbp-0x8], 0 0x100003f9c: jle 0x100003fac 0x100003f9e: mov rax, QWORD PTR [rbp-0x8] 0x100003fa2: pop rbp 0x100003fa3: ret 0x100003fac: mov eax, -1 0x100003fb1: pop rbp 0x100003fb2: ret
反编译后的伪 C 代码:
// ...
int64_t var_8;
var_8 = (int64_t)rdi;
if ( var_8 <= 0x0 ) {
eax = -1;
}
else {
eax = (int32_t)var_8;
}
return eax;
// ...
你能立刻看出这是一个检查输入是否为正数,并返回相应值的函数。
2 数据结构与交叉引用
- 交叉引用:了解一个函数或数据在哪里被使用。
⌘ + Option + X/Ctrl + Shift + X:显示当前函数的调用者 (Xrefs from)。- `⌘ +
