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, 二进制分析, 云安全运维, 代码相似性, 深度学习, 特权检测, 逆向工具