Vector35/binaryninja-api

GitHub: Vector35/binaryninja-api

Binary Ninja 逆向工程平台的官方 API 仓库,提供 C++、Python 和 Rust 的完整插件开发框架。

Stars: 1214 | Forks: 274

[![slack](https://img.shields.io/badge/slack-binaryninja-red.svg?logo=slack)](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, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 反汇编, 可视化界面, 开发文档, 开源项目, 恶意代码分析, 插件开发, 数据擦除, 无后门, 漏洞分析, 网络流量审计, 路径探测, 逆向工具, 逆向工程, 配置文件, 静态分析