quarkslab/quokka

GitHub: quarkslab/quokka

一个基于 IDA Pro 的高效二进制导出工具,将反汇编结果打包成独立文件,支持通过 Python API 在无 IDA 环境下完整操作二进制。

Stars: 210 | Forks: 19

# Quokka

图像由 [DALL-E](https://labs.openai.com/s/3k4LtWP564OYrVCIeoGmefMB) 生成 # 目录 * [简介](#introduction) * [安装](#installation) * [使用](#usage) * [构建](#building) * [文档](#documentation) * [常见问题](#faq) ## 简介 Quokka 是一个二进制导出器:它从程序的反汇编中生成一个无需反汇编器即可使用的导出文件。 **Quokka** 的主要目标是让用户能够在初始导出后,无需再次打开反汇编器即可完全操作二进制文件。此外,它抽象了反汇编器的 API,向用户暴露了一个简洁的接口。 Quokka 深受 [BinExport](https://github.com/google/binexport) 的启发,BinExport 是 BinDiff 使用的二进制导出器。 ## 安装 ### Python 插件 该插件在 CI 中构建,并可在 [registry](https://github.com/quarkslab/quokka/packages) 中获取。 应该可以使用类似以下的命令直接通过 PIP 安装: ``` $ pip install quokka-project ``` ### IDA 插件 注意:读取 `Quokka` 生成的文件不需要 IDA 插件。它仅用于生成这些文件。 Quokka 目前兼容 IDA 7.3+ 该插件在 CI 上构建,并可在 [Release](https://github.com/quarkslab/quokka/releases/new) 标签页中获取。 要下载该插件,请获取名为 `quokka_plugin**.so` 的文件。 ## 使用 ### 通过 GUI 导出 导出二进制文件的第一种手动方法是在 IDA Pro 内部使用该插件。 IDA 中的默认快捷键是 `Alt+A`。它会打开以下对话框: ![导出对话框](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6fc621010b195708.png) 可用的模式有: * LIGHT:导出直至基本块起始/结束的数据 *(指令由 bindings 进行反汇编)* * NORMAL:导出数据和指令地址 *(指令内容和操作数由 bindings 检索)* * FULL:导出数据、指令和操作数 *(自包含模式,不需要在 binding 中进行反汇编)* ### 在无头模式下导出 !!! note ``` This requires a working IDA installation. ``` - 或者使用命令行: ``` $ idat -OQuokkaAuto:true -OQuokkaDecompiled:true -A /path/to/hello.i64 ``` 所有可用的选项都在 [使用](https://quarkslab.github.io/quokka/usage/) 中进行了描述。 注意:这里使用 `idat` 而不是 `ida` 来提高导出速度,因为不需要图形界面。 ### 在 CLI 中导出 Quokka 提供了一个 CLI 实用工具,可以并行地自动导出单个文件或给定目录中的所有可执行文件。以下是使用 8 个线程自动化导出的示例: ``` $ quokka-cli -t 8 dir/ ``` 它还接受各种参数: * `--ida-path` 用于提供 IDA Pro 的路径(目录或二进制文件) * `--decompiled` 用于启用反编译代码导出 * `--verbose` 用于启用详细日志记录 ### 加载导出文件 ``` import quokka # 直接从 binary(需要安装 IDA plugin) ls = quokka.Program.from_binary("/bin/ls") # 从 exported file ls = quokka.Program("ls.quokka", # the exported file "/bin/ls") # the original binary ``` ## 构建 构建过程取决于您使用的 IDA SDK 版本。 这两种模式也分别被称为 *新模式* 和 *旧模式*。 ### IDA < 9.2(旧方式) 由于 IDA SDK 仍是专有代码,您必须自行获取它,并通过选项 `-DIdaSdk_ROOT_DIR:STRING=path/to/sdk` 将其路径提供给 cmake。 **注意:** 这也适用于较新的版本,但需要用户执行更多的步骤,因为他们必须自己下载 SDK。 ``` user@host:~/quokka$ cmake -B build \ # Where to build -S . \ # Where are the sources -DIdaSdk_ROOT_DIR:STRING=path/to/ida_sdk \ # Path to IDA SDK -DCMAKE_BUILD_TYPE:STRING=Release \ # Build Type user@host:~/quokka$ cmake --build build --target quokka_plugin -- -j ``` ### IDA >= 9.2(新方式) IDA SDK 终于[开源](https://github.com/HexRaysSA/ida-sdk)了,因此不再需要单独下载它。 您可以使用 cmake 选项 `-DIDA_VERSION=.` 从 GitHub 自动同步它。 ``` user@host:~/quokka$ cmake -B build \ # Where to build -S . \ # Where are the sources -DIDA_VERSION=9.2 \ # IDA SDK version -DCMAKE_BUILD_TYPE:STRING=Release \ # Build Type user@host:~/quokka$ cmake --build build --target quokka_plugin -- -j ``` ### 安装 要安装该插件: ``` user@host:~/quokka$ cmake --install build ``` 在任何情况下,插件也会位于 `build/quokka-install` 中。您可以将其复制到 IDA 的用户插件目录。 ``` user@host:~/quokka$ cp build/quokka-install/quokka*64.so $HOME/.idapro/plugins/ ``` 有关构建的更多详细信息,请参阅 [构建](docs/installation.md#ida-plugin) ## 文档 在线文档请访问 [documentation](https://quarkslab.github.io/quokka/) ## 常见问题 您可以在此处查看问题列表 [常见问题](docs/FAQ.md) ## 导出模式 Quokka 提供两种模式来导出反汇编分析:**轻量模式** 和 **自包含模式**。 **轻量模式** 专注于仅导出必要信息,生成快速且轻量的文件。在此模式下,不会导出指令级别或更低级别的信息,因此将在运行时使用 capstone 引擎来获取指令的反汇编。 **自包含模式** 则导出完整的反汇编,与后端反汇编器显示的完全一致。这将生成较大的文件,但在运行时不需要依赖第三方反汇编器。 需要注意的是,这两种模式在 Python bindings 中提供相同的 API。 有关这两种模式差异的完整概述,请查看下表: | | 轻量模式 | 自包含模式 | | -------- | -------- | -------- | | 函数 | ✅ | ✅ | | 基本块 | ✅ | ✅ | | 指令 | ❌ | ✅ | | 操作数 | ❌ | ✅ | | 数据引用 | ✅ | ✅ | | 交叉引用 | ✅ | ✅ | | 段/布局 | ✅ | ✅ | | 反编译 | ✅¹ | ✅¹ | | CFG 绘图坐标 | ✅¹² | ✅¹² | ¹ 可选启用 ² 目前不支持
标签:Bash脚本, BinExport 替代, IDA Pro 插件, Protobuf, Python, Quarkslab, Quokka, TLS抓取, Wayback Machine, 二进制分析, 二进制导出, 云安全监控, 云安全运维, 云资产清单, 函数识别, 反汇编, 可配置连接, 基本块, 恶意代码分析, 情报收集, 指令集, 无后门, 漏洞研究, 离线分析, 程序分析, 软件安全, 逆向工具, 逆向工程, 配置文件, 静态分析