fj4rr/malware-lab-ctf
GitHub: fj4rr/malware-lab-ctf
Stars: 0 | Forks: 0
# MALWARE.LAB // CTF 伴侣
用于 [`malware-analysis-lab-v2.html`](./malware-analysis-lab-v2.html) 的动手式 CTF 伴侣应用
学习追踪器。十个逆向工程挑战,涵盖静态恶意软件分析和
高级分析主题,按“从打开十六进制转储”到 Capstone 多阶段加载器的顺序排列
本地进度追踪,无遥测,无外部调用。
## 快速开始
### Docker(推荐)
```
docker compose up --build
# 打开 http://localhost:8080
```
### 本地开发
```
# 1. 安装依赖
pip install --break-system-packages -r requirements.txt
# 2. 构建实验室工件(每个生成器运行一次以生成 lab.zip + .flag)
python3 labs/01-hex-forensics/builder.py
python3 labs/02-pe-triage/builder.py
python3 labs/03-maldoc-vba/builder.py
python3 labs/04-unpacker-upx/builder.py
python3 labs/05-xor-recovery/builder.py
python3 labs/06-api-hash-lookup/builder.py
python3 labs/07-yara-writer/builder.py
python3 labs/10-capstone/builder.py
# 3. 运行
python3 -m app.main
# 打开 http://localhost:8080
```
应用进度存储在 `data/progress.db`(SQLite,自动创建)。
可通过导航栏的 `[reset]` 链接或 `POST /api/reset` 随时清除。
## 先决条件
* Python 3.11+
* 若从源码安装 `yara-python`,需 `libyara-dev` + `build-essential`
在 Linux 上(Dockerfile 已处理)
* 用于运行求解器以分析实验室工件:`pefile`、`pycryptodome`、
`oletools` 以及标准 CLI 工具(`xxd`、`strings`、`file`)
## 挑战列表
| # | Slug | 章节 | 分数 | 难度 | 实验室 |
|---:|---------------------|--------------|----:|:----------:|:---:|
| 01 | hex-forensics | 静态分析 | 50 | ★ | ✔ |
| 02 | pe-triage | 静态分析 | 75 | ★★ | ✔ |
| 03 | maldoc-vba | 静态分析 | 100 | ★★ | ✔ |
| 04 | unpacker-upx | 静态分析 | 150 | ★★★ | ✔ |
| 05 | xor-recovery | 高级分析 | 150 | ★★★ | ✔ |
| 06 | api-hash-lookup | 高级分析 | 175 | ★★★ | ✔ |
| 07 | yara-writer | EXTRAS | 200 | ★★★ | ✔ |
| 08 | volatility | EXTRAS | 250 | ★★★★ | — |
| 09 | crypto-config | 高级分析 | 275 | ★★★★ | — |
| 10 | capstone | CAPSTONE | 500 | ★★★★★ | ✔ |
可获取总分(忽略提示成本):**1925 分**,十个构建器全部发布后。
第 08、09 行(`—`)在仪表板上显示“构建器待定”横幅,但仍受解锁链限制。
## 挑战 07 特殊说明
除 07 外的所有挑战使用标志哈希匹配:学生提交字符串,
服务器将其标准化后的 SHA-256 与 `.flag` 文件生成的哈希比对。
**挑战 07 使用行为验证** — 学生提交完整的 YARA 规则源码,服务器
使用 `yara-python` 编译,并扫描缓存的恶意(5)良软件(10)样本集,
仅当规则命中 5/5 恶意且 0 良软件时通过。误报会按名称返回以帮助调试。
## V2 风格集成
应用的视觉语言从 `malware-analysis-lab-v2.html` 移植而来:
相同的 CSS 变量、JetBrains Mono 字体栈、网格纸背景、角框装饰,
以及四状态挑战卡片(锁定 / 可用 / 尝试 / 解决)。两个应用设计为
并排放置 — V2 用于学习进度,本伴侣用于动手验证。
## 架构
```
app/
├── main.py Flask factory + limiter setup
├── models/progress.py SQLite wrapper, thread-safe
├── challenges/definitions.py Challenge roster + flag-hash loader
├── routes/
│ ├── pages.py /, /challenge/, /download/
│ └── api.py /api/submit|hint|progress|reset
├── static/{style.css, app.js} Port of V2 aesthetic + vanilla JS
└── templates/{base, index, challenge}.html
labs//
├── builder.py Generates lab.zip + .flag deterministically
├── lab.zip Ships to the student (synthetic, benign)
└── .flag Plaintext flag — never committed with
real malware artifacts
```
### 安全说明
`labs/*/lab.zip` 中的所有“恶意”工件均为**合成且无害**的。
它们包含模仿真实恶意软件指纹的字符串和结构特征(MZ 头、AES 封装配置块、
伪造互斥量、`CreateRemoteThread` 系列 API 哈希),但不执行任何代码,
也不解析真实导入。ch07 良软件样本同样为构造物 — NSIS 安装程序、
SQLite 魔术数、.NET 元数据和 UPX 签名均为结构诱饵。不要期望 `file(1)`
将其识别为真实文件;它们仅是用于教学签名编写的 PE 形状字节模式。
### API 接口
```
GET / Dashboard (progress + challenge grid)
GET /challenge/ Detail page (brief, hints, submit form)
GET /download/ lab.zip attachment
POST /api/submit {slug, flag} Flag-hash OR YARA path (ch07)
POST /api/hint {slug, index} Reveal hint, charge cost (idempotent)
GET /api/progress JSON dump of all state
POST /api/reset {confirm} Wipe progress + attempts
```
速率限制:提交 10/分钟,提示 30/分钟,重置 3/分钟,按 IP 计数。
提交仅存储截断后的 SHA-256 摘要到尝试日志 — 从不存储明文。
## 添加挑战
参见 [`docs/CHALLENGE_AUTHORING.md`](./docs/CHALLENGE_AUTHORING.md)。
## 许可证 / 免责声明
用于个人/教育用途。实验室工件故意设计为模仿恶意软件指纹以用于
恶意软件分类教学;它们**不是**恶意软件。不得重新打包并在可能让不谨慎读者误以为真实的场景下分发。
标签:api-hash-lookup, API哈希查找, capstone, Capstone引擎, challenge lab, CTF companion, DAST, DNS信息、DNS暴力破解, Docker, hex forensics, maldoc-vba, malware analysis lab, no telemetry, offline analysis, pe-triage, PE分析, Python Flask, Python脚本构建器, reverse engineering, SQLite, study tracker, unpacker-upx, UPX解包, VBA, xor-recovery, XOR恢复, yara-writer, YARA规则, 云安全监控, 云资产清单, 十六进制转储, 安全防御评估, 实操实验, 恶意文档, 恶意软件分析, 无遥测, 本地存储, 进度追踪, 逆向工程, 静态分析, 高级分析