fkie-cad/dewolf

GitHub: fkie-cad/dewolf

dewolf 是一款基于 Binary Ninja 插件的研究型反编译器,将二进制代码重构为高级伪代码,供逆向分析与学术研究使用。

Stars: 223 | Forks: 12

[![Pipeline](https://static.pigsec.cn/wp-content/uploads/repos/cas/c6/c667bd4f69628a0c8974901e261557141a1f4a13a514472f62f095802946e0e5.svg)](https://github.com/fkie-cad/dewolf/actions/workflows/pipeline.yml) [![扩展 Pipeline](https://static.pigsec.cn/wp-content/uploads/repos/cas/a7/a73cbf956e790e3cba3b0d1f2854970169612f83104d359cce9e92f310270b9b.svg)](https://github.com/fkie-cad/dewolf/actions/workflows/extended-pipeline.yml) 代码风格: black # dewolf dewolf 是一款研究型反编译器,由德国(Fraunhofer FKIE)和新加坡(DSO National Laboratories)在 2019 年至 2021 年的科研合作期间共同开发。 dewolf 的重构基于先前的 DREAM/DREAM++ 方法 [Yakdan et al. NDSS 2015, IEEE (SP) 2016]。 dewolf 反编译器是作为 Binary Ninja 的插件实现的,并使用其 Medium-Level 中间语言作为起点。 尽管我们认为 dewolf 已经非常稳定,但它仍然是一个研究原型,并未针对生产环境进行大量优化。 因此,在将 dewolf 应用于真实二进制文件时,您可能会遇到一些 bug 甚至反编译失败的情况。 **如果您遇到任何 bug,请向我们报告,以便我们进一步改进 dewolf。 :)** ## 安装 ### 依赖项 在开始之前,请确保您的计算机上已安装并可以使用以下依赖项: - 至少 [Python 3.10](https://www.python.org/) - [Binary Ninja (>=3.4)](https://binary.ninja/) 的最新稳定版本 - [astyle](https://code.tools/man/1/astyle/),用于正确缩进反编译的代码 - [libgraph-easy-perl](https://packages.ubuntu.com/source/focal/libgraph-easy-perl),仅在打印 ASCII 图表时需要 在 **Linux**(Ubuntu / Debian)下,您可以使用以下命令同时安装 **astyle** 和 **libgraph-easy-perl**: ``` sudo apt install astyle libgraph-easy-perl ``` 在 **Windows** 下,请确保已将 **astyle** 的二进制文件添加到环境变量 Path 中。 ### Binary Ninja 插件 按照以下步骤将 dewolf 设置为 Binary Ninja 的 GUI 插件。 之后,您将能够从 Binary Ninja 的停靠面板中查看反编译代码。 #### 步骤 1: 将 dewolf 仓库克隆到 Binary Ninja 的插件文件夹中,该文件夹位于与您的操作系统相对应的以下路径之一: **Linux:** `~/.binaryninja/plugins` **MacOS:** `~/Library/Application Support/Binary Ninja` **Windows:** `%APPDATA%\Binary Ninja` **注意:** 如果您想使用 Python 虚拟环境,请确保在接下来的步骤中以及启动 Binary Ninja 时都已启用它。 #### 步骤 2: 使用以下命令安装 dewolf 的 Python 依赖项: ``` pip install -r requirements.txt ``` #### 步骤 3: 使用以下命令安装 Binary Ninja 的 Python API: ``` python /scripts/install_api.py [--install-on-pyenv if using virtualenv] ``` **警告:** 对 dewolf 插件所做的更改只有在重启 Binary Ninja GUI 后才会生效。 ## 使用方法 dewolf 反编译器既可以在命令行中使用,也可以在 Binary Ninja 中使用。 ### GUI 通过 **Tools > dewolf decompiler** 启用 dewolf 反编译挂件后,将显示当前活动符号的反编译代码。 在 dewolf 挂件中,可以通过双击函数来在函数之间进行导航。 可以使用 *follow* 按钮切换所选函数的自动反编译功能。 反编译的代码会被缓存,可以通过 *decompile* 按钮重新生成,例如在二进制视图中修补指令之后。 ![挂件](https://static.pigsec.cn/wp-content/uploads/repos/cas/5e/5ead57e5030a3cf56b7e9dc4528895c9e5797417f7dff803be716a22055480c7.png) ### CLI 对于批量反编译,将 dewolf 作为命令行程序使用可能会更方便。 如果您想从命令行使用 dewolf,可以使用以下命令调用对整个二进制文件的反编译: ``` python decompile.py ``` 如果您希望反编译特定的函数,可以将函数名作为第二个参数提供: ``` python decompile.py ``` 默认情况下,生成的代码会显示在控制台上。 如果您想将输出写入文件,可以使用 `--output/-o` 标志进行指定。 请使用 `--help` 标志获取更多信息。 ## 配置 dewolf 具有多个配置选项,其中一些可以通过 GUI 进行配置。 ### 通过 GUI 您可以通过导航到 **Edit > Preferences > Settings** 或按下 Ctrl + , 从 Binary Ninja GUI 配置 dewolf。 在搜索栏中搜索 **dewolf**,将显示所有与 dewolf 相关的设置。 **警告:** 通过命令行界面启动 dewolf 时,不会考虑通过 Binary Ninja 所做的配置。要在通过 CLI 启动时配置 dewolf,请按照下一节的说明进行操作。 ### 通过 CLI 要应用命令行模式的设置或使用 GUI 中未显示的高级设置,您可以在反编译器根文件夹中提供一个 *config.json* 文件。 此类配置文件的格式必须如下所示: ``` { "section.key": value, "expression-propagation.maximum_instruction_complexity": 5 } ``` 所有可用的设置都可以在 `decompiler/util/default.json` 中找到。 ## 支持 如果您有任何建议或 bug 报告,请在 Issue Tracker 中创建一个 issue。 如果您有任何问题或其他问题,欢迎发送电子邮件至: [Dewolf@fkie.fraunhofer.de](mailto:dewolf@fkie.fraunhofer.de).
标签:二进制分析, 二进制忍者插件, 云安全监控, 云安全运维, 云资产清单, 反编译器, 逆向工具, 逆向工程, 静态分析