google/binexport
GitHub: google/binexport
BinExport 是用于将 IDA Pro、Ghidra 和 Binary Ninja 反汇编数据导出为 Protocol Buffer 格式的插件,主要服务于 BinDiff 二进制差异比对分析。
Stars: 1177 | Forks: 238
# BinExport
版权所有 2011-2024 Google LLC。
[](https://github.com/google/binexport/actions?query=workflow%3Alinux-build)
[](https://scan.coverity.com/projects/google-binexport)
免责声明:这不是一个官方的 Google 产品(无论是实验性的还是其他的),
它只是恰好归 Google 所有的代码。
# 目录
* [简介](#introduction)
* [安装](#installation)
* [IDA Pro](#ida-pro)
* [Binary Ninja](#binary-ninja)
* [Ghidra](#ghidra)
* [用法](#usage)
* [如何构建](#how-to-build)
* [准备构建环境](#preparing-the-build-environment)
* [Linux](#linux)
* [macOS](#macos)
* [Windows](#windows)
## 简介
BinExport 是 [BinDiff](https://www.zynamics.com/software.html) 的导出组件。它是用于反汇编工具 IDA Pro、Binary Ninja 和 Ghidra 的插件/扩展,用于将反汇编数据导出为 BinDiff 所需的 Protocol Buffer 格式。
用于开源软件逆向工程套件 Ghidra 的实验版本位于 `java/BinExport` 目录中。
本代码库包含构建 Linux、macOS 和 Windows 版 BinExport 插件二进制文件所需的完整源代码。
## 安装
### IDA Pro
从 [releases](https://github.com/google/binexport/releases) 页面下载二进制文件,并将它们复制到 IDA Pro 插件目录。以下是默认路径:
| OS | 插件路径 |
| ------- | ------------------------------------------- |
| Linux | `/opt/idapro-8.2/plugins` |
| macOS | `/Applications/IDA Pro 8.2/idabin/plugins` |
| Windows | `%ProgramFiles%\IDA 8.2\plugins` |
若仅为当前用户安装,请将文件复制到以下目录之一:
| OS | 插件 |
| ----------- | ------------------------------------ |
| Linux/macOS | `~/.idapro/plugins` |
| Windows | `%AppData%\Hex-Rays\IDA Pro\plugins` |
#### 验证安装版本
1. 在 IDA 中,选择 `Help`|`About programm...`
2. 点击 `Addons...`
3. 如果安装正确,将出现以下对话框:

### Binary Ninja
从 [releases](https://github.com/google/binexport/releases) 页面下载二进制文件,并将它们复制到 Binary Ninja 插件目录。以下是当前用户的默认路径:
| OS | 插件路径 |
| ------- | ----------------------------------------------------- |
| Linux | `~/.binaryninja/plugins` |
| macOS | `~/Library/Application Support/Binary Ninja/plugins/` |
| Windows | `%AppData%\Binary Ninja\plugins` |
#### 验证安装版本
1. 启动 Binary Ninja
2. 选择 `Log` 原生停靠栏。如果不可见,通过 `View`|`Native Docks`|`Show Log` 启用它。
3. 如果安装正确,日志窗口将包含类似如下的一行:
```
BinExport 12 (@internal, Jan 3 2023), (c)2004-2011 zynamics GmbH, (c)2011-2024 Google LLC.
```
### Ghidra
1. 从 [releases](https://github.com/google/binexport/releases) 页面下载二进制文件。
2. 启动 Ghidra,选择 `File`|`Install Extensions...`
3. 在 "Install Extensions" 对话框中,点击右上角的加号图标以 "Add extension"。
4. 在 "Select extension" 对话框中,输入第 1 步中下载的 `ghidra_BinExport.zip` 的路径,然后点击 `OK`。
5. 点击两次 `OK` 以关闭 "Install Extensions" 对话框和重启 Ghidra 的提示。
6. 退出 Ghidra。
#### 验证安装版本
1. 启动 Ghidra
2. 选择 `File`|`Install Extensions...`
3. 如果安装正确,"Install Extensions" 对话框应在选中复选框旁列出 "BinExport" 扩展。
## 用法
主要用例是通过 [BinDiff](https://zynamics.com/bindiff.html)。但是,BinExport 也可用于将反汇编导出为不同格式:
* 基于 Protocol Buffer 的完整导出
* 统计文本文件
* 用于调试的文本格式
### IDA Pro
1. 打开一个 IDA Pro 数据库
2. 选择 `Edit`|`Plugins`|`BinExport 12`
3. 将出现以下对话框:

4. 选择要导出的文件类型
#### IDC 脚本
BinExport 插件注册了以下 IDC 函数。
| IDC 函数名 | 导出为 | 参数 |
| ------------------- | ------------------ | -------- |
| BinExportBinary | Protocol Buffer | filename |
| BinExportText | Text file dump | filename |
| BinExportStatistics | Statistics text file | filename |
或者,可以通过直接调用插件的主函数从 IDC 调用该插件:
```
static main() {
batch(0);
auto_wait();
load_and_run_plugin("binexport12_ida", 2 /* kBinary */);
qexit(0);
}
```
请注意,这确实无法提供对输出文件名的任何控制。BinExport 将始终使用当前加载数据库的文件名(不带扩展名)并附加 ".BinExport"。
#### IDAPython
参数与 IDC(上面列出)相同。
调用已注册 IDC 函数之一的示例:
```
import idaapi
idaapi.ida_expr.eval_idc_expr(None, ida_idaapi.BADADDR,
'BinExportBinary("exported.BinExport");')
```
#### 插件选项
BinExport 定义了以下插件选项,可以在 IDA 的命令行中指定:
| 选项 | 描述 |
| -------------------------------------- | ---------------------------------------------------------------- |
| `-OBinExportAutoAction:` | 调用 BinExport IDC 函数并退出 |
| `-OBinExportModule:` | `BinExportAutoAction` 的参数 |
| `-OBinExportLogFile:` | 将日志消息记录到文件 |
| `-OBinExportAlsoLogToStdErr:TRUE` | 如果指定,也记录到标准错误输出 |
| `-OBinExportX86NoReturnHeuristic:TRUE` | 启用特定于 X86 的启发式方法以识别不返回的函数 |
注意:这些选项必须位于任何文件之前。
### Binary Ninja
目前仅有最小的 Binary Ninja UI 集成。
1. 打开或创建一个新的分析数据库
2. 选择 `Tools`|`Plugins`|`BinExport`。这将启动导出过程。
`.BinExport` 文件将放置在分析数据库旁边,位于同一目录中。
### Ghidra
1. 打开或创建一个项目。对于新项目,首先使用 `File`|`Import File...` 导入文件。
2. 右键单击当前项目列表中的文件,然后从上下文菜单中选择 `Export...`。
3. 在 "Export" 对话框的 "Format" 下,选择 "Binary Export (v2) for BinDiff"。
4. 在 "Output File" 下,输入所需的输出文件路径。如果缺少文件扩展名,将自动附加 `.BinExport`。
5. 可选:点击 "Options..." 以设置其他导出选项。
6. 点击 "OK",然后再次点击 "OK" 以关闭 "Export Results Summary" 对话框。
#### 脚本
`BinExport.java` Ghidra 脚本可以在无头模式和 GUI 模式下运行。在 GUI 模式下,它位于脚本管理器的 `BinExport` 类别下。对于无头模式,可以使用包含以下内容(或类似内容,具体取决于您要使用的选项)的 `BinExport.properties` 文件:
```
Choose export file Export = test.BinExport
Choose options IDA Pro Compatibility = "Subtract Imagebase;Remap mnemonics;Prepend Namespace to Function Names"
```
##### 无头模式下的示例用法
创建一个项目,导入并分析二进制文件:
```
$ ./analyzeHeadless -import
```
运行 `BinExport.java`,它将生成 `BinExport.properties` 中指定的 `.BinExport` 文件:
```
$ ./analyzeHeadless -process -propertiesPath -preScript BinExport.java -noanalysis
```
或者,使用命令行参数代替 `BinExport.properties`:
```
$ ./analyzeHeadless -process -preScript BinExport.java test.BinExport "Prepend Namespace to Function Names" -noanalysis
```
## 如何构建
以下是 IDA Pro 和 Binary Ninja 原生代码插件的构建说明。要构建基于 Java 的 Ghidra 扩展,请参阅 [BinExport for Ghidra](/java) 说明。
### 准备构建环境
有相当多的依赖项需要满足:
* Boost 1.83.0 或更高版本(1.83.0 的部分副本包含在 `boost_parts` 中)
* [CMake](https://cmake.org/download/) 3.14 或更高版本
* 建议:[Ninja](https://ninja-build.org/) 用于快速构建
* Linux/macOS 上使用 GCC 9 或最新版本的 Clang。在 Windows 上,使用 Visual Studio 2019 编译器和 Windows SDK for Windows 10。
* Git 1.8 或更高版本
* 仅限 IDA Pro:IDA SDK 8.2 或更高版本(解压到 `third_party/idasdk`)
* 将被下载的依赖项:
* Abseil, GoogleTest 和 Protocol Buffers (25.2)
* Binary Ninja SDK
### Linux
#### 前置条件
首选的构建环境是 Debian 11 ("Bullseye")。
这应该安装所有必要的软件包:
```
sudo apt update -qq
sudo apt install -qq --no-install-recommends build-essential
```
安装最新稳定版本的 CMake:
```
wget https://github.com/Kitware/CMake/releases/download/v3.25.1/cmake-3.25.1-linux-x86_64.sh
mkdir ${HOME}/cmake
sh cmake-3.25.1-linux-x86_64.sh --prefix=${HOME}/cmake --exclude-subdir
export PATH=${HOME}/cmake/bin:${PATH}
```
以下部分假设您当前的工作目录位于克隆代码库的根目录。
#### IDA SDK
将 IDA SDK 的内容解压到 `third_party/idasdk`。显示的命令适用于 IDA Pro 8.2:
```
unzip PATH/TO/idasdk_pro82.zip -d third_party/idasdk
mv third_party/idasdk/idasdk_pro82/* third_party/idasdk
rmdir third_party/idasdk/idasdk_pro82
```
#### 构建 BinExport
所有前置条件就绪后,配置并构建 BinExport 并运行其测试:
```
mkdir -p build_linux && cd build_linux
cmake .. \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
"-DCMAKE_INSTALL_PREFIX=${PWD}" \
-DBINEXPORT_ENABLE_IDAPRO=ON \
"-DIdaSdk_ROOT_DIR=${PWD}/../third_party/idasdk" \
-DBINEXPORT_ENABLE_BINARYNINJA=ON \
cmake --build . --config Release
ctest --build-config Release --output-on-failure
cmake --install . --config Release --strip
```
注意:如果您不想使用 Ninja 执行实际构建,请省略 `-G Ninja` 部分。
要禁用 IDA Pro 构建,设置 `-DBINEXPORT_ENABLE_IDAPRO=OFF`。同样,要禁用 Binary Ninja 构建,设置 `-DBINEXPORT_ENABLE_BINARYNINJA=OFF`。
这将下载并构建 Abseil、GoogleTest、Protocol Buffers 和 Binary Ninja API。如果一切顺利,`build_linux/binexport-prefix` 目录应包含两个文件 `binexport12_ida.so` 和 `binexport12_ida64.so`(分别用于 `ida` 和 `ida64`)以及 `binexport12_binaryninja.so`(用于 Binary Ninja)。
### macOS
#### 前置条件
首选的构建环境是使用 Xcode 15.1 的 macOS 13 "Ventura"。使用 macOS 12 "Monterey" 也应该可行。
安装 Developer Tools 后,请确保同时安装命令行工具:
```
sudo xcode-select --install
```
以下部分假设您当前的工作目录位于克隆代码库的根目录。
#### CMake
从官方网站下载最新稳定版本的 CMake 并挂载其磁盘映像:
```
curl -fsSL https://github.com/Kitware/CMake/releases/download/v3.25.1/cmake-3.25.1-Darwin-x86_64.dmg \
-o $HOME/Downloads/cmake-osx.dmg
hdiutil attach $HOME/Downloads/cmake-osx.dmg
```
此时,您需要查看并接受 CMake 的许可协议。现在安装 CMake:
```
sudo cp -Rf /Volumes/cmake-3.25.1-Darwin-x86_64/CMake.app /Applications/
hdiutil detach /Volumes/cmake-3.25.1-Darwin-x86_64
sudo /Applications/CMake.app/Contents/bin/cmake-gui --install
```
最后一条命令使 CMake 在系统路径中可用。
#### IDA SDK
将 IDA SDK 的内容解压到 `third_party/idasdk`。显示的命令适用于 IDA Pro 8.2:
```
unzip PATH/TO/idasdk_pro82.zip -d third_party/idasdk
mv third_party/idasdk/idasdk_pro82/* third_party/idasdk
rmdir third_party/idasdk/idasdk_pro82
```
#### 构建 BinExport
所有前置条件就绪后,配置并构建 BinExport 并运行其测试:
```
mkdir -p build_mac && cd build_mac
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
"-DCMAKE_INSTALL_PREFIX=${PWD}" \
-DBINEXPORT_ENABLE_IDAPRO=ON \
"-DIdaSdk_ROOT_DIR=${PWD}/../third_party/idasdk" \
-DBINEXPORT_ENABLE_BINARYNINJA=ON \
cmake --build . --config Release -- "-j$(sysctl -n hw.logicalcpu)"
ctest --build-config Release --output-on-failure
cmake --install . --config Release --strip
```
注意:这将使用标准的 CMake "Makefile Generator"。您也可以使用 XCode 或 Ninja 作为生成器。
要禁用 IDA Pro 构建,设置 `-DBINEXPORT_ENABLE_IDAPRO=OFF`。同样,要禁用 Binary Ninja 构建,设置 `-DBINEXPORT_ENABLE_BINARYNINJA=OFF`。
这将下载并构建 Abseil、GoogleTest、Protocol Buffers 和 Binary Ninja API。如果一切顺利,`build_mac/binexport-prefix` 目录应包含两个文件 `binexport12_ida.dylib` 和 `binexport12_ida64.dylib`(分别用于 `ida` 和 `ida64`)以及 `binexport12_binaryninja.dylib`(用于 Binary Ninja)。
### Windows
首选的构建环境是使用 Visual Studio 2022 编译器和 [Windows SDK for Windows 10](https://dev.windows.com/en-us/downloads/windows-10-sdk) 的 Windows 10(64 位 Intel)。
#### CMake
从其[下载页面](https://cmake.org/download/)下载并安装最新的稳定版 CMake(撰写本文时为 3.25.1)。确保选择 "Add CMake to the system PATH for all users"。
#### Git
从其[下载页面](https://git-scm.com/download/win)下载并安装 Git。确保选择以下选项: * 安装目录应保留在默认的 `%ProgramFiles%\Git\bin\git.exe` * "Use Git from the Windows Command Prompt" - 让安装实用程序将 Git 添加到您的系统路径。 * "Use Windows' default console window" - 以便能够从常规命令提示符使用 Git。
#### 准备
以下部分假设打开了一个命令提示符,其当前工作目录位于克隆的 BinExport 代码库的根目录:
```
git clone https://github.com/google/binexport.git
cd binexport
```
#### IDA SDK
将 IDA SDK 的内容解压到 `third_party/idasdk`。显示的命令适用于 IDA Pro 8.2,假设 Git 首先安装到了默认目录:
```
"%ProgramFiles%\Git\usr\bin\unzip" PATH\TO\idasdk_pro82.zip -d third_party
rename third_party\idasdk_pro82 idasdk
```
#### 构建 BinExport
所有前置条件就绪后,配置并构建 BinExport:
```
if not exist build_msvc mkdir build_msvc
cd build_msvc
cmake .. ^
-G "Visual Studio 17 2022" ^
-DCMAKE_BUILD_TYPE=Release ^
"-DCMAKE_INSTALL_PREFIX=%cd%" ^
-DBINEXPORT_ENABLE_IDAPRO=ON ^
-DIdaSdk_ROOT_DIR=%cd%\..\third_party\idasdk ^
-DBINEXPORT_ENABLE_BINARYNINJA=ON
cmake --build . --config Release -- /m /clp:NoSummary;ForceNoAlign /v:minimal
ctest --build-config Release --output-on-failure
cmake --install . --config Release --strip
```
注意:这将使用 CMake "Visual" 生成器。您也可以使用 Ninja 生成器。
要禁用 IDA Pro 构建,设置 `-DBINEXPORT_ENABLE_IDAPRO=OFF`。同样,要禁用 Binary Ninja 构建,设置 `-DBINEXPORT_ENABLE_BINARYNINJA=OFF`。
这将下载并构建 Abseil、GoogleTest、Protocol Buffers 和 Binary Ninja API。如果一切顺利,`build_msvc/binexport-prefix` 目录应包含两个文件 `binexport12_ida.dll` 和 `binexport12_ida64.dll`(分别用于 `ida.exe` 和 `ida64.exe`)以及 `binexport12_binaryninja.dll`(用于 Binary Ninja)。
标签:Bash脚本, Binary Ninja, BinDiff, DAST, Ghidra, Google, IDA Pro, JS文件枚举, Nuclei, Wayback Machine, 二进制分析, 二进制静态分析, 云安全运维, 云资产清单, 代码导出, 协议缓冲区, 反汇编, 恶意软件分析, 情报收集, 插件, 漏洞研究, 逆向工程