Vector35/binaryninja-api
GitHub: Vector35/binaryninja-api
Binary Ninja 逆向工程平台的官方 API 仓库,提供 C++、Python 和 Rust 的完整插件开发框架。
Stars: 1214 | Forks: 274
[](https://slack.binary.ninja/)
# Binary Ninja API
本仓库包含 [Binary Ninja](https://binary.ninja/) 逆向工程平台的 C++、Python 和 Rust API 的文档及源代码。
## 文档
以下 API 提供在线文档:
- [C++ API, 稳定分支](https://api.binary.ninja/cpp/)
- [Python API, 稳定分支](https://api.binary.ninja/)
- [Python API, 开发分支](https://dev-api.binary.ninja/)
- [Rust API, 稳定分支](https://rust.binary.ninja/)
- [Rust API, 开发分支](https://dev-rust.binary.ninja/)
## 使用与构建说明
**为了构建 Binary Ninja API,你需要使用与 `api_REVISION.txt` 文件中的哈希值相匹配的特定修订版本。** 该文件在 Linux 和 Windows 上位于根安装文件夹,在 macOS 上位于应用程序的 `Contents/Resources` 子文件夹中。最简单的方法是克隆此仓库(或将其作为子模块添加),然后执行类似 `git checkout $(cat api_REVISION.txt | awk -F/ '{print $NF}')` 的操作。关于如何使用 `cmake` 进行设置的相关文档可以在[这里](https://docs.binary.ninja/dev/plugins.html?h=api_#cmake-setup)找到。
要使用 C++ 编写 Binary Ninja 插件,你需要构建 C++ API。构建 API 库的方法与大多数基于 CMake 的项目类似;基本步骤如下:
```
# 获取源代码
git clone https://github.com/Vector35/binaryninja-api.git
cd binaryninja-api
git submodule update --init --recursive
# 配置 out-of-source 构建设置
cmake -S . -B build # (additional arguments go here if needed)
# 编译
cmake --build build -j8
```
除了默认的构建设置外,你可能还需要:
- **构建示例。** 要构建 [API 示例](#examples),请在配置构建时向 CMake 传递 `-DBN_API_BUILD_EXAMPLES=ON`。构建成功后,可以通过运行 `install` 目标来安装构建好的插件。当使用 "Unix Makefiles" 构建生成器时,命令类似于:`make install`。
- **构建 UI 插件。** 你需要安装 Qt 6.8.2 才能构建 UI 插件。我们内部使用了一个稍作修改的[构建配置](https://github.com/Vector35/qt-build),其中包含一些 ABI 兼容性修复和默认设置的更改,但标准的构建也可以工作。请注意,不建议使用 Homebrew 的预构建配置。建议使用官方安装程序或从我们的仓库进行构建。
- **无头模式构建 (Headless)。** 如果你使用的是无头 (headless) Binary Ninja 发行版,或者不希望构建 UI 插件,请在配置构建时向 CMake 传递 `-DHEADLESS=ON`。
### 故障排除
- 如果 Binary Ninja 安装在平台默认位置(定义在 CMakeLists.txt 中)之外的地方,你可能会收到“Binary Ninja Core Not Found”的错误提示。在配置构建设置时,通过向 CMake 传递 `-DBN_INSTALL_DIR=/path/to/binaryninja` 来指定你的 Binary Ninja 安装路径。
- 由于 Binary Ninja 是仅支持 64 位的产品,请确保你使用的是 64 位的编译和链接环境。Windows 上的 `LNK1107` 等错误可能表明你的位数不匹配。
## 示例
这里提供了许多示例。[Python 示例文件夹](https://github.com/Vector35/binaryninja-api/tree/dev/python/examples)演示了 Python API 的许多不同应用,而 C++ 示例包括:
- [background_task](https://github.com/Vector35/binaryninja-api/tree/dev/examples/background_task) 是一个演示如何管理后台任务的插件。\*
- [bin-info](https://github.com/Vector35/binaryninja-api/tree/dev/examples/bin-info) 是一个独立的可执行文件,用于将给定二进制文件的一些信息打印到终端。\*
- [breakpoint](https://github.com/Vector35/binaryninja-api/tree/dev/examples/breakpoint) 是一个插件,允许你在 x86 二进制文件中选择一个区域,并使用上下文菜单将其填充为断点字节。
- [command-line disassm](https://github.com/Vector35/binaryninja-api/tree/dev/examples/cmdline_disasm) 演示了如何将反汇编输出到命令行。\*
- [llil-parser](https://github.com/Vector35/binaryninja-api/tree/dev/examples/llil_parser) 解析 Low-Level IL,演示如何匹配类型和使用访问者类。\*
- [mlil-parser](https://github.com/Vector35/binaryninja-api/tree/dev/examples/mlil_parser) 解析 Medium-Level IL,演示如何匹配类型和使用访问者类。\*
- [print_syscalls](https://github.com/Vector35/binaryninja-api/tree/dev/examples/print_syscalls) 是一个独立的可执行文件,用于打印给定二进制文件中使用的系统调用。\*
- [triage](https://github.com/Vector35/binaryninja-api/tree/dev/examples/triage) 是一个功能齐全的插件,默认发布并启用,演示了如何执行各种任务,包括通过 QT 扩展 UI。
- [workflows](https://github.com/Vector35/binaryninja-api/tree/dev/examples/workflows) 是一组插件,演示了如何使用 Workflows 来扩展分析管道。
- [x86 extension](https://github.com/Vector35/binaryninja-api/tree/dev/examples/x86_extension) 创建了一个架构扩展,展示了如何修改内置架构的行为而无需创建完整的替代品。
\* 需要支持无头 (headless) API 访问的许可证。
## 问题
此仓库的问题跟踪器不仅跟踪此处包含的源代码的问题,还跟踪更广泛的 Binary Ninja 产品的问题。
## 分支
本仓库有两个主要分支 [`dev`](/Vector35/binaryninja-api/tree/dev/) 和 [`master`](/Vector35/binaryninja-api/tree/master/)。
`dev` 分支包含最新的更新,并跟踪 Binary Ninja 的最新开发版本;Pull requests 应提交到此分支。`master` 分支跟踪 Binary Ninja 的稳定版本。如果你是第一次安装 Binary Ninja,你可能使用的是稳定发布通道。
## 贡献
欢迎对本仓库进行公开贡献。本仓库中的大多数 API 和文档是在 MIT 许可证下授权的,但是,该 API 与闭源商业应用程序 [Binary Ninja](https://binary.ninja) 接口。此外,[Rust API](https://github.com/Vector35/binaryninja-api/tree/dev/rust) 是在 Apache 2.0 许可证下[授权](https://github.com/Vector35/binaryninja-api/tree/dev/rust/LICENSE)的。
如果你有兴趣贡献,当你提交第一个 PR 时,你会收到来自 [CLA Assistant](https://cla-assistant.io/) 的通知,允许你在线签署我们的[贡献许可协议](https://binary.ninja/cla.pdf)。
## 平台
本仓库包含我们所有的平台插件:
* [Windows](https://github.com/Vector35/binaryninja-api/tree/dev/platform/windows)
* [Windows Kernel](https://github.com/Vector35/binaryninja-api/tree/dev/platform/windows-kernel)
* [Linux](https://github.com/Vector35/binaryninja-api/tree/dev/platform/linux)
* [macOS](https://github.com/Vector35/binaryninja-api/tree/dev/platform/mac)
* [macOS Kernel](https://github.com/Vector35/binaryninja-api/tree/dev/platform/mac-kernel)
* [FreeBSD](https://github.com/Vector35/binaryninja-api/tree/dev/platform/freebsd)
* [Decree](https://github.com/Vector35/binaryninja-api/tree/dev/platform/decree)
* [EFI](https://github.com/Vector35/binaryninja-api/tree/dev/platform/efi)
## 架构
本仓库包含 Binary Ninja 个人版和商业版中所有可用的架构插件。你可以在这里找到每种架构:
* [x86/x86_64](https://github.com/Vector35/binaryninja-api/tree/dev/arch/x86)
* [ARM64](https://github.com/Vector35/binaryninja-api/tree/dev/arch/arm64)
* [ARMv7](https://github.com/Vector35/binaryninja-api/tree/dev/arch/armv7)
* [PPC](https://github.com/Vector35/binaryninja-api/tree/dev/arch/powerpc)
* [MIPS](https://github.com/Vector35/binaryninja-api/tree/dev/arch/mips)
* [RISC-V](https://github.com/Vector35/binaryninja-api/tree/dev/arch/riscv)
* [MSP430](https://github.com/Vector35/binaryninja-api/tree/dev/arch/msp430)
## BinaryViewTypes
本仓库包含我们所有的二进制视图类型插件:
* [Mach-O](https://github.com/Vector35/binaryninja-api/tree/dev/view/macho)
* [ELF](https://github.com/Vector35/binaryninja-api/tree/dev/view/elf)
* [PE/COFF/TE](https://github.com/Vector35/binaryninja-api/tree/dev/view/pe)
* [MD1Rom](https://github.com/Vector35/binaryninja-api/tree/dev/view/md1rom)
* [Shared Cache](https://github.com/Vector35/binaryninja-api/tree/dev/view/sharedcache)
* [Kernel Cache](https://github.com/Vector35/binaryninja-api/tree/dev/view/kernelcache)
## DebugInfo
* [DWARF Import](https://github.com/Vector35/binaryninja-api/tree/dev/plugins/dwarf/dwarf_import)
* [PDB Import](https://github.com/Vector35/binaryninja-api/tree/dev/plugins/pdb-ng)
* [IDB Import](https://github.com/Vector35/binaryninja-api/tree/dev/plugins/idb_import)
## 其他插件
* [Objective-C](https://github.com/Vector35/binaryninja-api/tree/dev/plugins/workflow_objc/)
* [RTTI Analysis](https://github.com/Vector35/binaryninja-api/tree/dev/plugins/rtti/)
* [Stack Render Layer](https://github.com/Vector35/binaryninja-api/tree/dev/plugins/stack_render_layer/)
* [SVD Loader](https://github.com/Vector35/binaryninja-api/tree/dev/plugins/svd/)
* [Triage View](https://github.com/Vector35/binaryninja-api/tree/dev/examples/triage/)
* [WARP Integration](https://github.com/Vector35/binaryninja-api/tree/dev/plugins/warp/)
## 相关仓库
除了这个主要的 API 仓库是开源的之外,Vector35 还开源了调试器插件:
* [Debugger](https://github.com/Vector35/debugger)
## 许可证
某些组件可能在兼容但略有不同的开源许可证下发布,并将视情况拥有自己的 LICENSE 文件。
其余组件在 [MIT](https://github.com/Vector35/binaryninja-api/blob/dev/LICENSE.txt) 许可证下发布。
请注意,Windows 版本的 Binary Ninja 原生二进制构建中包含 `.lib` 文件。这些 lib 文件也在此仓库的相同许可证下发布,并可以相应地分发。
标签:API, Bash脚本, Binary Ninja, C++, CMake, DNS解析, Python, Rust, Wayback Machine, 二进制 Ninja, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 反汇编, 可视化界面, 开发文档, 开源项目, 恶意代码分析, 插件开发, 数据擦除, 无后门, 漏洞分析, 网络流量审计, 路径探测, 逆向工具, 逆向工程, 配置文件, 静态分析