salmontts/DEADWEIGHT-Forensic-System-Purge
GitHub: salmontts/DEADWEIGHT-Forensic-System-Purge
一款模块化 C 架构的 Windows 持久化分析与清理工具,通过反伪装检测和 Authenticode 签名验证帮助 DFIR 分析师枚举、识别并清除恶意软件的持久化向量。
Stars: 0 | Forks: 0
# DEADWEIGHT
**Windows 持久化分析与系统核武** —— 这是一款专为
对抗顽固的自我复制型感染而生的工具。其理念很简单:
有时候直接**彻底抹除并重建**,远比去追逐那些每次重启都会
死灰复燃的多态 payload 要快得多。
## 两种模式,一个理念
DEADWEIGHT 像攻击者一样思考(持久化隐藏在哪里?),从而像
防御者一样行动(如何一次性将它们全部清除)。由此衍生出两种模式:
| 模式 | 功能描述 | 是否具有破坏性? |
|------|---------|---------------|
| `--analyze` | 枚举**所有**持久化向量 + 进程,并标记可疑项 | ❌ 否 — 纯只读 |
| `--nuke` | 清除持久化、temp/staging 文件,并终止除关键进程外的所有进程 | ✅ 是 — 焦土政策 |
`--analyze` 可以安全地在活动系统上运行 —— 它展示了在采取任何实际行动之前,工具
*看到*的内容。而 `--nuke` 则是彻头彻尾的断头台。
## DEADWEIGHT 理解的持久化机制
该工具熟悉恶意软件在系统中潜藏的位置(括号内为对应的
MITRE ATT&CK 映射):
- **Autorun** — `Run` / `RunOnce`,HKCU + HKLM + Wow6432 (T1547.001)
- **IFEO debuggers** — Image File Execution Options (T1546.012)
- **AppInit_DLLs** — 向进程注入 DLL (T1546.010)
- **Winlogon Shell** — 替换登录 Shell (T1547.004)
- **WMI subscriptions** — event-consumer 持久化 (T1546.003)
- **Scheduled tasks** — 不在 `\Microsoft` / `\Windows` 下的任务 (T1053.005)
- **服务** — 位于可疑路径的二进制文件 (T1543.003)
## 反伪装:为什么白名单基于路径,而非文件名
这是 `--nuke` 模式中最关键的要素。简单的“杀死所有”进程策略通常会根据
**文件名**来豁免进程 —— 而这正是恶意软件藏身之处。一个名为 `svchost.exe`
却位于 `C:\Users\...\AppData\Roaming\` 的进程绝非真正的 `svchost`。
这是典型的**伪装**(MITRE T1036)。
DEADWEIGHT 会验证**文件名与路径的配对**:
```
svchost.exe w C:\Windows\System32\ -> prawdziwy, oszczędzony
svchost.exe w C:\Users\...\AppData\... -> impostor, ubity + [MASQUERADE?] w logu
```
真正的系统进程始终位于它们理应在的位置。任何仅仅*冒充*
系统名称的进程,都会像其他垃圾一样被清理掉。
## 数字签名验证:如何避免误报 Windows Defender
仅凭路径进行标记存在一个弱点:大量**合法**软件会在
`ProgramData` 中运行(如 Windows Defender、NVIDIA)。初版 `--analyze`
尽职尽责地将它们全部标记为 `SUSPECT` —— 导致工具被误报淹没。
如果一款工具连 Defender 都要报警,那它对分析师来说就毫无用处。
解决方案:引入第二层决策机制 —— **Authenticode 签名**(`WinVerifyTrust`)。
可疑路径仅仅是一个信号;只有在缺乏可信签名时才最终决定是否标记:
```
Defender w ProgramData, podpisany przez Microsoft -> OK (signed), nie flaguj
NVIDIA w ProgramData, podpisany przez NVIDIA Corp. -> OK (signed), nie flaguj
random.exe w AppData, niepodpisany -> SUSPECT (unsigned)
fake.exe w Temp, podpis zerwany / wygasły -> SUSPECT (bad-sig)
```
这正是专业 DFIR 工具所采用的标准:
重点不在于文件*位于何处*,而在于*谁为其背书*。在 `--nuke` 模式下,同样的
逻辑也会保护已签名的系统服务免遭删除 —— 核武操作只会删除位于可疑路径中
且不受信任的二进制文件。
## 已知局限性(及重要性说明)
没有任何工具能包揽一切。对自身盲点的认知是
可靠分析的一部分 —— 以下是 DEADWEIGHT 的局限性:
**1. Process injection (MITRE T1055) —— 最大的盲点。**
签名验证仅检查**磁盘上的文件**。它无法检测到外部
代码在已签名的合法进程*内部*运行的情况 —— 例如 DLL injection、process
hollowing、reflective loading。此时磁盘上的 `explorer.exe` 文件是干净的
且带有签名,但在其内存空间中却潜伏着 payload。要检测这一点,必须进行**内存
分析**:扫描 RWX 内存区域、将内存模块与磁盘文件进行比对、
检测 API hooks。这是未来的开发方向,而非当前功能。
**2. 签名 ≠ 绝对可信。** 有效的签名只能说明“该文件名符其实,且有人
为其背书” —— 但存在被盗证书和
先签名后入侵的情况。签名提高了门槛,但并不提供绝对保证。
**3. 权限依赖。** 部分进程(PPL, protected)即使在
管理员权限下也会返回“access denied” —— DEADWEIGHT 会将它们标记为
无法验证,并且为了安全起见,会放过已知的系统名称。
**4. 通过 `wmic` 操作 WMI。** 清理 WMI 订阅使用的是已弃用的 `wmic`;
在最新版的 Windows 上,这需要重写为基于 COM 的实现(已列入路线图)。
## 架构
模块化设计 —— 一个轻量级的路由(`main.c`)加上各个独立的模块,每个模块都有
自己的头文件。所有配置(白名单、路径、向量)都集中在
同一个 `config.h` 中。
```
src/
├── config.h Wszystkie stałe, whitelisty, wektory persistence
├── log.h / .c Jednolite logowanie (purge + analysis)
├── persistence.h/.c Enumeracja + czyszczenie persistence (analyze | purge)
├── processes.h/.c Kill / monitor / lupa + ANTI-MASQUERADE (ścieżka!)
├── cleanup.h/.c Temp / prefetch / staging
├── forensics.h/.c Scan / prefetch / services / report (read-only)
└── main.c Router CLI/GUI + dispatch trybów
```
## 用法
```
deadweight.exe --analyze # pełna enumeracja, NIC nie kasuje (start tu)
deadweight.exe --persistence # tylko wektory persistence
deadweight.exe --report # raport systemowy (CPU/RAM/dyski/prefetch)
deadweight.exe --lupa svchost.exe # szczegóły procesu + wykrycie masquerade
deadweight.exe --live 30 # monitor procesów przez 30 s
deadweight.exe --scan D:\Downloads 60 # pliki nieużywane 60+ dni
deadweight.exe --clean C:\Temp\Stuff # usuń drzewo (z potwierdzeniem)
deadweight.exe --nuke # SCORCHED EARTH (wymaga wpisania "NUKE")
```
## ⚠️ 前车之鉴
该工具的最初版本还会删除 DriverStore 中的驱动程序和
`.inf` 文件 —— 理论上是“激进清理”,实际上却导致了**Windows
安装损坏**。有一次在执行 `--nuke` 后,我在重启 Windows 之前启动了 Linux 双系统,
结果 Windows 再也无法启动了。
重构时有意识地裁剪了这部分功能。Nuke 依然是核武级别的操作,但它的目标是
**持久化机制和进程**,而不是系统的核心底层组件。这正是一款
仅仅*看起来*危险的工具与一款真正明白自己在触碰什么的工具之间的区别。
## 构建
```
x86_64-w64-mingw32-gcc src/*.c -o deadweight.exe \
-municode -lshlwapi -lpsapi -lcomctl32 -lwintrust -lcrypt32
```
依赖项:仅使用 Windows 标准库。无需 .NET,无需额外的 runtime。
详情请参阅 `BUILD.md`。
## 状态与路线图
- [x] 模块化重构(从 1517 行的单体代码中抽离)
- [x] 基于路径的进程白名单(反伪装)
- [x] Authenticode 签名验证(消除误报)
- [x] DFIR 级别的日志记录(记录实际发现,而不仅仅是“completed”)
- [x] `--analyze` 模式(只读)
- [x] 移除杀驱动程序的 bug
- [x] 持久化逻辑去重
- [ ] 将发布者名称读取到输出中(代码中已包含 CryptQueryObject)
- [ ] 检测 process injection(扫描 RWX,内存与磁盘模块比对)— T1055
- [ ] 通过 COM 枚举 WMI(替代已弃用的 `wmic`)
- [ ] 将报告导出为 JSON(用于 DFIR pipeline)
- [ ] Makefile + CI 构建
## 免责声明
本工具仅供学习及在您自己的环境中进行授权测试使用。
请勿在他人系统或生产环境中运行。
标签:DNS 解析, Gophish, 客户端加密, 库, 应急响应, 持久化分析, 数字取证, 端点可见性, 紫队, 自动化脚本