Fabio-H/Veritas
GitHub: Fabio-H/Veritas
Veritas 是一款面向蓝队的自动化 payload 解混淆工具,通过递归解码和启发式评分揭示多层编码背后的真实内容,并自动提取妥协指标(IOC)。
Stars: 1 | Forks: 0
# Veritas
**English** · [Português (pt-BR)](README.pt-BR.md)
### 面向 SOC、IR 和 Blue Team 的自动化 payload 解混淆工具
**Veritas** 能够揭示隐藏在混淆的 PowerShell 命令和
编码字符串中的内容。分析师只需粘贴可疑的 blob;该工具便会识别
编码层,递归地进行解码,并提取妥协指标
(IOCs) —— 所有操作均在本地完成,不执行任何代码,也不向
外部发送任何数据。
该名称寓意着提取攻击者试图隐藏的事实的**真相**("veritas")。
[](https://github.com/Fabio-H/Veritas/releases/latest)
[](https://github.com/Fabio-H/Veritas/actions/workflows/ci.yml)

-41CD52?logo=qt&logoColor=white)

**[⬇ 下载最新的 Windows 构建版本](https://github.com/Fabio-H/Veritas/releases/latest)**
## 为什么开发它
在日常的 **SOC (Tier 2)** 和 **Incident Response(事件响应)** 工作中,经常会
遇到被混淆的 PowerShell、Base64、Hex、URL 编码以及其他层层的
编码堆叠在终端日志中。手动解码既缓慢又
容易出错。Veritas 实现了自动化分流:可以逐层查看
解码链,最终文本会被高亮显示,并且
IOC 表也已准备好进行关联分析。
## 功能
- **递归解码**(最多 8 层)并带有启发式评分 —— 恶意的
PowerShell 关键字结合可读性判定,以此决定每一步
的最佳转换方式。
- **支持的格式:** URL 编码、Hex、Base64(UTF-8 和 UTF-16LE)、
Base32、Ascii85/Base85、GZIP、zlib/DEFLATE、ROT13、单字节 XOR
(对所有 256 个密钥进行暴力破解)、Unicode 转义(`\x..`, `\u....`,
`%u....`)、HTML 实体(`A`, `A`)、JWT(header + payload)、
字符代码数组(`String.fromCharCode(...)`, `[char[]](...)`)、PowerShell
`-EncodedCommand`/`-enc`,以及嵌入在变量赋值
(`$x = "..."`)中的 Base64。
- **手动 pipeline:** 当自动启发式选错分支时,
可以手动构建解码方案 —— 将操作链接起来(Base64、Hex、带密钥的 XOR、ROT13、反转等)并逐步检查结果。
- **IOC 提取:** IPv4/IPv6、URL、域名(具备启发式算法,避免
将 .NET namespace 误认为 FQDN)、电子邮件、MD5/SHA1/SHA256 哈希值
以及可疑的 PowerShell token。
- **持久化历史记录:** 最后 20 次分析会保存在本地,并在
启动时恢复,且与捕获时保持逐字节一致。
- **导出** 报告为 TXT 和 JSON 格式,包含版本和时间戳元数据。
- **CLI**(通过 [Rich](https://github.com/Textualize/rich))供终端使用,
与桌面 GUI 并行。
## 默认安全
- **100% 静态分析** —— payload 仅被解码和检查,绝不会
被执行。
- 超过 1,000,000 个字符的输入将被拒绝。
- GZIP/zlib 解压设有边界,以防止解压炸弹。
- 绝不会有任何数据离开本机。
## 安装与使用
环境要求:Windows 上的 **Python 3.10+**(Linux/macOS 应该也能运行,但
测试主要集中在 Windows 上)。或者直接下载打包好的
[最新 Windows 发布版本](https://github.com/Fabio-H/Veritas/releases/latest) —
无需 Python。
```
git clone https://github.com/Fabio-H/Veritas.git
cd Veritas/ps-deobfuscator
pip install -e ".[gui]"
python main_gui.py
```
CLI:
```
pip install -e .
ps-deobfuscator decode --help
```
### 构建 Windows 可执行文件
```
cd ps-deobfuscator
pip install -e ".[gui,dev,build]"
python scripts\build_exe.py
```
输出结果:`release/ps-deobfuscator-gui/ps-deobfuscator-gui.exe` 和
`release/Veritas-vX.Y.Z-windows.zip`。推送一个 `v*.*.*` 标签即可自动
构建此版本,并将 zip 文件附加到 GitHub Release 中(参见
`.github/workflows/release.yml`)。
## 如何使用
1. 将混淆的文本(日志、命令、从 SIEM 导出的字符串)粘贴到
输入区域 —— 或者拖放一个 `.txt` 文件。
2. 点击 **Decode**。
3. 查看解码链**层**、高亮的**最终文本**以及
**IOC** 表。
4. 根据需要导出为 TXT/JSON 或复制 IOC。
**示例**(虚构数据,[RFC 5737](https://datatracker.ietf.org/doc/html/rfc5737)):
```
Input: cG93ZXJzaGVsbC5leGUgLWVwIGJ5cGFzcyAtYyAiVGVzdC1Db25uZWN0aW9uIC1Db21wdXRlck5hbWUgMTkyLjAuMi4xMCI=
Output: powershell.exe -ep bypass -c "Test-Connection -ComputerName 192.0.2.10"
IOCs: IPv4 192.0.2.10 · powershell.exe · -ep bypass
```
## 架构
```
ps-deobfuscator/
ps_deobfuscator/ # Decode engine + CLI (no GUI dependency)
engine.py # recursive decoding, scoring, IOC extraction
history.py # history persistence (atomic, versioned JSON)
gui/ # PySide6 desktop app (themes, window, widgets)
samples/ # Test payload library (known-good + triage)
scripts/ # exe build, icons, run_samples, cleanup
tests/ # unittest suite (engine, history, imports)
```
在每一层,引擎都会评估每一个适用的解码候选方案,对
每个结果进行评分(可疑关键字 + 可打印字符比例),并
保留最佳结果,直到分数不再提高或达到层数限制。纯引擎与 GUI 之间的
严格分离是一个刻意的
设计选择 —— 请参阅 [docs/architecture-decisions.md](docs/architecture-decisions.md)。
## 测试
```
cd ps-deobfuscator
python -m unittest discover -s tests
```
解码错误的 payload 应保存在
`ps-deobfuscator/samples/triage/` 目录下(每个 payload 对应一个 `.txt` 文件),并使用
`python scripts/run_samples.py` 进行复现 —— 请参阅 [docs/PROJECT_BRIEF.md](docs/PROJECT_BRIEF.md)。
## 开发过程
Veritas 是通过“vibe coding(氛围编程)”构建的 —— 即人类与 AI 助手结对编程。
其架构、设计和安全权衡均由本人亲自
完成并负责;关键决策背后的
推理过程记录在 [docs/architecture-decisions.md](docs/architecture-decisions.md) 中。
## 路线图
| 优先级 | 项目 |
|----------|------|
| 高 | 导出 STIX 2.1 / MISP 格式的 IOC,用于 playbook 集成 |
| 中 | GUI 中支持批处理模式(CLI 中已提供) |
| 中 | IOC 消除/恢复危害 (`hxxp://`, `1.2.3[.]4`) |
| 低 | Windows 安装程序 (Inno Setup) + 开始菜单快捷方式 |
目前已完成:递归引擎和 IOC 提取,格式覆盖
(Ascii85/HTML/JWT/char-codes),手动/引导解码,“Veritas Blue” UI,
CI(在 Python 3.10–3.13 上运行 ruff + mypy + 测试)以及自动化发布。
## 免责声明
本工具按**“原样”**提供,仅供合法的防御性分析、研究
和网络安全教育使用。它不能替代正式的事件响应
流程。**请勿**在生产
系统上执行未知的命令或二进制文件。
## 许可证
基于 **MIT License** 授权 —— 请参阅 [LICENSE](LICENSE)。
标签:DInvoke, 逆向工具