shmulc8/packing-101
GitHub: shmulc8/packing-101
一门在 macOS/arm64 上从零构建可执行文件加壳器的五节实操课程,用于学习加壳与脱壳原理及恶意软件分析基础。
Stars: 0 | Forks: 0
# 加壳入门 101 — 在 macOS 上从零开始构建可执行文件加壳器
这是一个关于**可执行文件加壳与脱壳**的实操课程,共五节课:这是一种技术,程序在发布时将其真实代码打乱,并在开头通过一个小型 stub 在内存中将其还原并运行。每节课都可以使用 macOS 上已有的工具运行 —— 无需 Docker,无需额外安装,也无需折腾代码签名。
## 心智模型
```
PACKER (build time) RUNTIME
┌───────────┐ encrypt ┌───────────────────┐ run ┌──────────────────┐
│ real code │ ─────────▶ │ stub + ciphertext │ ─────▶ │ stub decrypts the │
└───────────┘ (XOR) │ (one executable) │ │ code IN MEMORY, │
└───────────────────┘ │ then jumps to it │
└──────────────────┘
```
在磁盘上静止时,真实代码是不可读的(没有特征码,没有字符串)。只有在运行前的一瞬间,它才会在 RAM 中成为真实的代码。
## 课程内容
| # | 文件夹 | 你将学到什么 | 运行 |
|---|--------|----------------|-----|
| 1 | [`lesson-1-anatomy/`](lesson-1-anatomy) | 可执行文件内部有什么:段 (segment)、节 (section)、入口点。 | `bash explore.sh` |
| 2 | [`lesson-2-xor/`](lesson-2-xor) | 每个简单加壳器使用的可逆转换。 | `make run` |
| 3 | [`lesson-3-packer/`](lesson-3-packer) | 构建一个真正的端到端加壳器 + 脱壳 stub。 | `make run` |
| 4 | [`lesson-4-detection/`](lesson-4-detection) | 为什么 2009 年“规避扫描器”的目标在 2026 年已经行不通了。 | `make` |
| 5 | [`lesson-5-environmental/`](lesson-5-environmental) | 环境密钥 (Environmental keying):不要直接提供密钥 —— 而是从机器上推导它。 | `make run` / `make foreign` |
请按顺序学习。每个文件夹都有自己的 `README.md`,其中包含你实际运行的理论和代码。
## 视觉化呈现,而不仅仅是阅读
- **动画演示终端脱壳** —— 观看密文逐字节转变为机器码,随着解密的过程,隐藏的字符串也会浮出水面:
python3 visualize.py # 动画演示 (VIZ_DELAY=0.08 可减慢速度)
- **历史** —— [`HISTORY.md`](HISTORY.md):从加密的 DOS 病毒到 Gauss (2012) 的血脉传承,后者的环境密钥正是第 5 课在现实中的真实体现。
## 快速开始
```
git clone && cd packing-101
cd lesson-1-anatomy && bash explore.sh
cd ../lesson-2-xor && make run
cd ../lesson-3-packer && make run && make proof
cd ../lesson-4-detection && make
cd ../lesson-5-environmental && make run && make foreign
```
## 从 2009 年到 2026 年的转换
| 2009 年 (Windows PE, 32 位) | 本课程 (macOS, arm64) |
|-------------------------------------------|----------------------------------------------------|
| PE 文件,`.text`,`ImageBase`+RVA | Mach-O,`__TEXT,__text`,`LC_MAIN` 入口 |
| OllyDbg / LordPE (GUI) | `otool`, `nm`, `objdump`, `lldb` (CLI) |
| 将 `.text` 设为**可写**,并直接编辑 | **做不到** —— W^X 是硬件强制的。必须解密到新的内存中。 |
| 将入口点重定向到文件内的 stub | stub 本身*就是* `main`;载荷是它解密出来的数据 |
| 每个字节与密钥 `0x56` 进行 XOR | 相同的 XOR,相同的 `0x56` 密钥 (致敬) |
| 目标:躲避特征扫描器 | 已废止的目标 —— 现代防御机制会扫描内存与行为 |
## 环境要求
带有标准工具链的 macOS:`clang`、`otool`、`nm`、`objdump`、`python3`。
在 Apple Silicon (arm64) 上构建并测试。
## ⚠️ 范围与道德规范
这是**具有教育和防御意义**的资料:了解加壳器的工作原理对于恶意软件分析、逆向工程以及构建检测系统至关重要。这里的载荷除了打印一行文字外什么也不做。这个仓库里的任何东西都无法规避现代扫描器 —— 第 4 课用测量数据解释了为什么这项技术在 2026 年是一个极好的*教科书*,却是一个糟糕的*伪装*。请在属于你或已获得授权的系统上使用它来学习和防御。
## 鸣谢与许可
- 最初概念:**"Manual Packing," הלל חימוביץ', Digital Whisper #1 (2009)** —
- macOS/arm64 重建、课程、视觉资料及历史:来源于本仓库。
- 采用 [MIT 许可证](LICENSE) 授权。
标签:arm64, 云资产清单, 可执行文件加壳, 客户端加密, 底层开发, 教程, 逆向工具, 逆向工程