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://img.shields.io/github/v/release/Fabio-H/Veritas?label=download&logo=github)](https://github.com/Fabio-H/Veritas/releases/latest) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/Fabio-H/Veritas/actions/workflows/ci.yml) ![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?logo=python&logoColor=white) ![PySide6](https://img.shields.io/badge/GUI-PySide6%20(Qt%206)-41CD52?logo=qt&logoColor=white) ![License](https://img.shields.io/badge/license-MIT-blue) **[⬇ 下载最新的 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, 逆向工具