HexRaysSA/ida-cyberchef
GitHub: HexRaysSA/ida-cyberchef
将 CyberChef 的数据转换能力嵌入 IDA Pro 的插件,让逆向工程师无需离开 IDA 即可对样本数据进行编解码和链式变换操作。
Stars: 123 | Forks: 9
# IDA CyberChef
一个基于 Qt 的 CyberChef 接口,专为恶意软件分析工作流程设计,特别是在 IDA Pro 中。它将 [CyberChef](https://gchq.github.io/CyberChef/) 的数据转换操作能力直接引入到你的逆向工程工具包中。
通过 Hex-Rays 的 IDA Pro 插件管理器**安装**:
```
hcli plugin install ida-cyberchef
```
[HCLI](https://hcli.docs.hex-rays.com) 是 Hex-Rays 官方用于管理 IDA Pro 安装、许可证和 SDK 的工具。

## 这是什么?
如果你曾深入分析恶意软件样本,并且需要快速解码一些 base64,用密钥对数据块进行 XOR,或者对二进制数据进行一系列链式转换——你就会明白上下文切换的痛苦。从 IDA 复制数据,粘贴到 CyberChef Web UI,获取结果,复制回去。重复 47 次。
这个项目消除了这种工作流程。它将 CyberChef 的 JavaScript 引擎直接嵌入到 IDA Pro 的 Qt 用户界面中,与常见的 IDA 功能集成,例如读取当前光标/选区、设置注释和修补字节。
## 工作原理
我们使用 [STPyV8](https://github.com/area1/stpyv8) 在 Python 内部运行 CyberChef 的 JavaScript 代码。`ida_cyberchef.cyberchef` 模块加载 CyberChef 的包,为其预期的 browser/Node.js API 设置 polyfill,并暴露一个干净的 `bake()` 函数,该函数接收二进制数据和配方(recipe)。
然后,我们有一个 PySide6 Qt 控件,通过输入/输出十六进制转储暴露配方编辑器。UI 是响应式更新的——更改输入或调整操作参数后,经过短暂的防抖处理,整个流水线会重新执行并更新输出。
作为对传统 CyberChef 的一个小扩展,每个操作步骤都可以展开以预览中间结果,这对于调试复杂配方可能很有用。
## 背景
这始于一个实验,看看是否可以在不需要浏览器或 Electron 的情况下将 CyberChef 嵌入到 Python 中。GCHQ 团队将 CyberChef 构建为一个 Web 应用程序,但他们也暴露了一个 Node.js API。我们使用的是一个最小化的 CommonJS 兼容构建(来自 Willi Ballenthin 的分支),它不需要完整的 Node.js 运行时。
该项目经历了几个迭代阶段:
1. 首先,让 JavaScript 引擎正常工作,并实现 Python bytes 和 CyberChef 的 "Dish" 对象之间的正确类型转换
2. 然后构建一个干净的链式操作 `bake()` API
3. 然后是带有响应式执行的 Qt 层
还有一个独立于(非 IDA Pro)Qt 应用程序,用于在桌面上运行 CyberChef;但实际上,我不确定相比于使用上游提供的独立 HTML 文件,你为什么会选择使用这个。
## 运行时支持
支持的路径是插件和独立 Qt 应用使用的离线 STPyV8 支持的运行时。
支持:
- 大多数确定性的本地 CyberChef 操作
- 针对默认值、选项映射以及相关的桥接/运行时问题的本地兼容性修复
当前运行时不支持:
- JavaScript Beautify
- JavaScript Minify
- JavaScript Parser
- Syntax highlighter
- DNS over HTTPS
- HTTP request
- Optical Character Recognition
- Add Text To Image
这些要么来自针对 Node 的包排除列表,要么需要此项目不提供的浏览器式网络、workers 或资源加载。
某些操作在当前运行时中也明确不支持,特别是 Magic、YARA Rules、Argon2 和 Argon2 compare。
`docs/ops.md` 中的生成操作文档直接标注了这些不支持的操作。
有关当前支持策略,请参阅 `docs/runtime-support.md`。
## 构建
首先,如果你还没有初始化子模块,请执行:
```
git submodule update --init --recursive
```
然后构建 CyberChef 的 JavaScript 包(你需要 Node.js 来执行此操作):
```
just build
```
这会在 CyberChef 子模块中安装 npm 依赖项,运行 Node.js 构建(大约需要 40 秒),并将生成的包复制到 `ida_cyberchef/data/CyberChef.js`。这是 Python 代码在运行时加载的约 20MB 文件。
要在 IDA 中运行该插件,请将开发目录符号链接到 `$IDAUSR/plugins/ida-cyberchef`:
```
ln -s (pwd) ~/.idapro/plugins/ida-cyberchef
```
你还需要将依赖项安装到你的 IDA Pro Python 虚拟环境中,类似于:
```
~/.idapro/venv/bin/python -m pip install STPyV8 pydantic
```
此外,你可以像这样运行独立 QApplication(在 IDA Pro 之外):
```
uv run cyberchef-qt
```
## 未来工作
我不太确定这是否能存活下去——我一开始是为了证明这是可行的,然后惊讶于一切竟然顺利就绪。架构有点丑陋:在 IDA 内部从 Python 运行 V8 以加载来自 GCHQ 的巨大代码块。但是,它有效,而且我们受益于 CyberChef 已经支持的操作。所以,如果你想提出改进和错误修复,请放手去做!
存在一种风险,即底层 Javascript 引擎(STPyV8,虽然我也研究过 PythonMonkey)可能会停止维护,或者无法在未来的 Python 或 IDA Pro 版本中构建/工作。那将是重新评估 ida-cyberchef 最佳部分并可能仔细重建它们的好时机。
## 许可证
本项目的代码由 Hex-Rays 授权为 Apache 2.0。CyberChef 本身也由 GCHQ 授权为 Apache 2.0。
标签:Base64, CyberChef, DAST, Hex-Rays, IDA Pro 插件, JavaScript 引擎, PySide6, Python, Qt 界面, STPyV8, XOR 解密, 二进制分析, 二进制数据, 云安全监控, 云安全运维, 云资产清单, 十六进制编辑, 实时预览, 恶意软件分析, 数据可视化, 数据解码, 数据转换, 无后门, 自动化分析, 自定义脚本, 跨站脚本, 逆向工具, 逆向工程, 静态分析