emproof-com/workshop_firmware_reverse_engineering

GitHub: emproof-com/workshop_firmware_reverse_engineering

一套结构化的固件逆向工程实战培训材料,通过独立任务逐步教授二进制分析、固件解包与反混淆等技能。

Stars: 440 | Forks: 54

# 研讨会:固件逆向工程 本仓库包含在 [ScapyCon Automotive 2025](https://dissec.to/scapycon-automotive-2025/) 上由 [Emproof](https://emproof.com) 展示的关于固件逆向工程研讨会的[幻灯片](slides.pdf)和实操资料。该研讨会面向具有基本安全经验的技术受众,并通过实用的独立任务教授基础知识。主题包括 * 基础文件/ELF 分析; * 软件破解与注册机编写; * 字符串解密与恶意软件分类; * 嵌入式 Linux 固件解包; * 裸机分析; * 加密检测; * 混淆/反分析技术及如何绕过它们; 如果您对此感兴趣,还可以查看 [Emproof 技术网络研讨会系列](https://github.com/emproof-com/webinars),其中包含额外的练习和录制的课程。 研讨会内容由 [Tim Blazytko](https://github.com/mrphrazer/) 设计和组织,Simran Kathpalia 提供支持。 ## 环境配置 要设置环境,请克隆此仓库: ``` git clone https://github.com/emproof-com/workshop_firmware_reverse_engineering cd workshop_firmware_reverse_engineering ``` 对于几个任务,我们需要一个 AArch64 Linux 执行环境。我们提供了一个基于 [Kali Linux](https://www.kali.org) 的 [Docker 容器](Dockerfile),其中预装了常用工具(例如 [GNU Binutils](https://www.gnu.org/software/binutils/)、[Binwalk](https://github.com/ReFirmLabs/binwalk))。这简化了 Linux、Windows 和 macOS 上的环境配置——无论主机 CPU 架构如何。要启动容器并进入 shell,请执行: ``` ./docker_run.sh ``` 此外,请在您的主机上安装以下图形化工具,用于交互式逆向工程任务(这些未包含在容器中): * [Ghidra](https://ghidra-sre.org) * [Binary Ninja Free](https://binary.ninja/free/) 这两款工具均支持 Windows、Linux 和 macOS。 ## 任务顺序 每个任务都在 `tasks//` 中独立存在,包括: * `samples/` — 练习中使用的二进制文件(有时是源代码) * `task.md` — 包含分步说明和提示的任务作业 任务可以独立尝试,但我们提供了一个**推荐的顺序**(如下所示),该顺序会逐渐增加难度并逐步引入新技术。大多数示例针对 **ARMv7 (Thumb/ARM32)** 或 **AArch64**;在相关的地方,任务说明会注明架构、所需工具以及任何特殊的 runtime 需求。 * [tasks/hello_world](tasks/hello_world):ELF 文件和元数据分析基础;Ghidra / Binary Ninja 的初步操作。 * [tasks/license_check](tasks/license_check):提取硬编码的 secret / 解锁功能;通过基础 patching 绕过验证(破解)。 * [tasks/game](tasks/game):简单的猜数字游戏;理解其逻辑并破解试用版与完整版模式。 * [tasks/keygenning_1](tasks/keygenning_1):逆向分析许可证验证逻辑,并编写一个简单的 keygen 来生成有效的序列号。 * [tasks/keygenning_2](tasks/keygenning_2):稍微复杂的 keygen 任务(salts/keys、hex 编码)。 * [tasks/string_encryption](tasks/string_encryption):包含加密字符串的二进制文件(常见于恶意软件);识别解密器并静态恢复字符串。 * [tasks/mirai](tasks/mirai):使用字符串解密例程的嵌入式恶意软件;浏览更大的代码库,识别感兴趣的构造,并处理混淆的字符串。 * [tasks/embedded_linux_1](tasks/embedded_linux_1):带有文件系统的嵌入式 Linux 固件;解包、探索并破解 Linux 登录信息(CTF 风格)。 * [tasks/embedded_linux_2](tasks/embedded_linux_2):类似上一项,但需要找到并分析一个不该出现的隐藏二进制文件。 * [tasks/car_demo](tasks/car_demo):裸机固件分析:识别架构、开发板、内存映射、工具链产物;提取 Wi-Fi 凭据和协议 endpoint。 * [tasks/iot_diag](tasks/iot_diag):诊断工具的裸机固件转储;根据数据手册重建内存布局,然后找到解锁诊断模式的密码。 * [tasks/crypto_detection](tasks/crypto_detection):使用硬编码 AES 密钥执行加密操作的 AArch64 二进制文件;定位 EVP 调用并回溯 key/IV 以在无程序的情况下解密。 * [tasks/license_check_anti_patching](tasks/license_check_anti_patching):通过代码校验和进行 anti-patching;理解 CRC 保护机制并学习绕过它的方法。 * [tasks/fibonacci_obfuscation](tasks/fibonacci_obfuscation):干净与混淆的 Fibonacci 实现(控制流平坦化、计算型 goto、不透明谓词、算术混淆、小型 VM);理解这些技术并对其进行规范化。 ## 许可证 除非另有说明,本仓库中的所有研讨会材料均基于 **GNU General Public License, version 2 (GPL-2.0)** 许可证授权。完整文本请参阅 [`LICENSE`](LICENSE)。 某些**第三方/外部获取的示例**被**排除**在 GPL 之外,**仅用于分析/教育目的**(不得重新分发)。它们是: - [tasks/mirai/samples/](tasks/mirai/samples/) - [tasks/embedded_linux_1/samples/](tasks/embedded_linux_1/samples/) - [tasks/embedded_linux_2/samples/](tasks/embedded_linux_2/samples/)
标签:二进制分析, 云安全运维, 固件逆向工程, 安全培训, 客户端加密, 嵌入式系统, 请求拦截