贝博恩创新科技网

Hopper Disassembler教程,从入门到精通怎么学?

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

Hopper Disassembler教程,从入门到精通怎么学?-图1
(图片来源网络,侵删)

目录

  1. 第一部分:准备工作与核心概念

    • 1 什么是 Hopper Disassembler?
    • 12 为什么使用 Hopper?
    • 3 获取与安装
    • 4 界面概览
  2. 第二部分:基础分析流程

    • 1 打开一个可执行文件
    • 2 反汇编模式选择
    • 3 理解反汇编视图
    • 4 导航与搜索
  3. 第三部分:核心功能详解

    • 1 反编译器
    • 2 数据结构与交叉引用
    • 3 重命名与注释
    • 4 图形视图
    • 5 调试器 (高级功能)
  4. 第四部分:实战演练 - "Hello, World!" 程序分析

    Hopper Disassembler教程,从入门到精通怎么学?-图2
    (图片来源网络,侵删)
    • 1 目标:找到字符串并理解其调用流程
    • 2 操作步骤
  5. 第五部分:进阶技巧与资源

    • 1 代码修改与编译
    • 2 学习路径建议
    • 3 推荐资源

第一部分:准备工作与核心概念

1 什么是 Hopper Disassembler?

Hopper 是一款功能强大的反汇编器反编译器,它的主要作用是将机器码(二进制文件,如 .exe, .dll, Mach-O 等)转换回人类可读的汇编语言代码,甚至更进一步,尝试将其还原成类似 C 语言的高级代码。

2 为什么使用 Hopper?

  • 逆向工程:分析闭源软件,理解其工作原理、查找漏洞或学习其算法。
  • 恶意软件分析:研究病毒、木马、勒索软件等恶意代码的行为。
  • 软件破解:分析软件的注册、验证机制,移除或绕过它们。
  • 学习汇编:通过查看真实编译后的代码来学习汇编语言和特定平台的调用约定。
  • 安全研究:进行漏洞挖掘和渗透测试。

3 获取与安装

  1. 官网:访问 Hopper Disassembler 官网
  2. 版本
    • Hopper Disassembler 4:适用于 macOS,功能完整。
    • Hopper Disassembler v5:适用于 Windows,功能完整。
    • Hopper Disassembler Lite:功能受限的免费版本,适合初学者体验。
  3. 安装:下载对应系统的版本,按照提示进行安装即可。

4 界面概览

启动 Hopper 并打开一个文件后,你会看到几个主要窗口:

  • 反汇编视图:这是核心窗口,显示汇编代码。
  • 控制台/日志:显示操作日志和错误信息。
  • 数据/函数列表:左侧或右侧的面板,列出所有导入的函数、导出的函数、字符串、类等。
  • 图形视图:以流程图形式展示函数逻辑。
  • 反编译视图:显示伪 C 代码。

第二部分:基础分析流程

1 打开一个可执行文件

通过菜单 File -> Open... 选择你想要分析的二进制文件,Hopper 会自动检测文件类型(如 Mach-O, ELF, PE 等)。

Hopper Disassembler教程,从入门到精通怎么学?-图3
(图片来源网络,侵删)

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)。
    • `⌘ +
分享:
扫描分享到社交APP
上一篇
下一篇