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规则, 云安全监控, 云资产清单, 十六进制转储, 安全防御评估, 实操实验, 恶意文档, 恶意软件分析, 无遥测, 本地存储, 进度追踪, 逆向工程, 静态分析, 高级分析