yueduan/DeepBinDiff
GitHub: yueduan/DeepBinDiff
DeepBinDiff 是一款基于深度学习的 x86 二进制文件细粒度差异比较工具,通过学习程序级代码表示实现跨编译选项的二进制基本块匹配。
Stars: 251 | Forks: 50
# DeepBinDiff
这是 DeepBinDiff 的官方代码库,它是一个用于 x86 二进制文件的细粒度 binary diffing 工具。我们将持续对其进行更新。
### 论文
请考虑引用我们的论文。
Yue Duan, Xuezixiang Li, Jinghan Wang, and Heng Yin, "DeepBinDiff: Learning Program-Wide Code Representations for Binary Diffing", NDSS'2020
### 环境要求:
* tensorflow (2.0 > tensorflow version >= 1.14.0)
* gensim
* angr
* networkx
* lapjv
### 运行工具
```
python3 src/deepbindiff.py --input1 path_to_the_first_binary --input2 /path_to_the_second_binary --outputDir output/
```
* 例如,要比较 coreutils v5.93 中的 O0 和 O1 chroot 二进制文件,你可以运行:
```
python3 src/deepbindiff.py --input1 /home/DeepBinDiff/experiment_data/coreutils/binaries/coreutils-5.93-O0/chroot --input2 /home/DeepBinDiff/experiment_data/coreutils/binaries/coreutils-5.93-O1/chroot --outputDir output/
```
* 你也可以使用 **src/analysis_in_batch.sh** 脚本来进行批量 binary diffing。
### 其他事项
1. IDA Pro 还是 Angr?
我们同时拥有 IDA pro 版本和 angr 版本。为了与同样使用 IDA pro 的 BinDiff 进行直接比较,我们使用了 IDA pro。这里的代码使用的是 Angr。
2. 结果?
一旦 diffing 完成,结果会作为 "matched pairs" 直接打印在屏幕上。每一对代表两个二进制文件中匹配的一对 basic block。其中的数字是 basic block 的索引,可以在 output/nodeIndexToCode 文件中找到。
3. CPU 还是 GPU?
当前版本仅使用 CPU。
4. NLP 预训练?
当前版本使用的是即时训练(on-the-fly training)过程,这意味着我们只使用这两个输入的二进制文件进行 NLP 训练。因此,我们不需要任何预训练模型。这将消除 OOV 问题,但会稍微减慢处理速度。
标签:angr, TensorFlow, 二进制分析, 云安全运维, 代码相似性, 深度学习, 特权检测, 逆向工具