DAILA(Decompiler Artificially Intelligent Language Assistant)是用于在反编译器中统一接入 AI 系统的接口。 借助 DAILA,你可以在多种反编译器中使用统一的脚本和 GUI 界面来调用各类 AI 系统,例如本地和远程 LLM。 DAILA 曾在 HITCON CMT 2023 的主题演讲中亮相,并被 NDSS 2026 论文《Decompiling the Synergy: An Empirical Study of Human–LLM Teaming in Software Reverse Engineering》所研究。 如果你在寻找论文仓库,请点击这里。

加入下方 Discord 获取更多在线帮助(由 BinSync 服务器托管):
DAILA 通过 DecLib 库以抽象方式与反编译器交互。 这使得 DAILA 能支持以下反编译器:
DAILA 支持 LiteLLM 所支持的任何 LLM,例如:
DAILA 还支持不同类型的本地模型,例如 VarBERT,这是一个用于在反编译结果中重命名变量的本地模型,相关论文发表于 S&P 2024。
通过 pip 安装我们的库后端,并通过安装程序安装反编译器插件:
pip3 install dailalib && daila --install
这是轻量模式。如果你要使用 VarBERT,则必须安装完整版本:
pip3 install 'dailalib[full]' && daila --install
这也会通过 VarBERT API 为你下载 VarBERT 模型。 如果你恰好在没有网络访问的机器(例如安全网络)上安装 DAILA,可以使用 Docker 容器 一节中的 Docker 镜像。
要让 Ghidra 正常工作,你还需要执行几个额外的步骤。首先,你必须以 PyGhidra 模式运行。你可以进入 Ghidra 安装目录并运行 ./support/pyghidraRun 来实现。
接下来,启用 DAILA 插件:
Windows > Script Manager 菜单daila 并启用脚本你需要让 python3 在你的 PATH 中,Ghidra 版本才能工作。我们确实是在 Python 2 内部调用它的。你可能还需要将 $USER_HOME/ghidra_scripts 设为 Ghidra 中有效的脚本路径。
如果上述方法失败,你将需要手动安装。手动安装时,先在仓库中执行 pip3 install dailalib,然后将 daila_plugin.py 文件复制到你的反编译器的插件目录。
DAILA 设计为两种使用方式:
除 Ghidra 外(见下文),启动反编译器后,你会有一个新的上下文菜单;在函数内任意位置右键单击即可访问:
如果你使用 Ghidra,请转到 Tools->DAILA->Start DAILA Backend 启动后端服务器。完成此操作后,你就可以使用如上所示的上下文菜单。
你可以通过导入 dailalib 包在自己的脚本中使用 DAILA。以下是使用 OpenAI API 的示例:
from dailalib import LiteLLMAIAPI
from declib.api import DecompilerInterface
deci = DecompilerInterface.discover()
ai_api = LiteLLMAIAPI(decompiler_interface=deci)
for function in deci.functions:
summary = ai_api.summarize_function(function)
如果你希望在安装后不再使用互联网的机器上(例如安全网络)一次性安装 DAILA,可以使用我们的 Docker 容器。你可以自行构建容器,将镜像保存为 tar 包,然后在目标机器上加载;也可以使用我们预构建的镜像。你可以在本仓库根目录运行 docker build . -t daila 自行构建容器。你也可以运行 docker pull mahaloz/daila:latest 下载我们预构建的镜像(该镜像适用于 x86_64 Linux)。容器中包含 DAILA 和一份 Ghidra。
现在,你需要将 X11 转发到容器中,以便看到 GUI。为此,需要使用以下参数运行容器:
docker run -it --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix mahaloz/daila:latest
在容器中,你可以从 /tools/ghidra_10.4_PUBLIC/ghidraRun 启动 Ghidra。接下来,按照 Ghidra 额外步骤 启用 DAILA 插件,就可以使用了!
DAILA 支持 LiteLLM API,而 LiteLLM 又支持 OpenAI 等各种后端。若要使用商业 LLM API,你必须提供自己的 API 密钥。例如,要使用 OpenAI API,你必须拥有 OpenAI API 密钥。如果你的反编译器无法访问 OPENAI_API_KEY 环境变量,则必须使用 DAILA 的反编译器选项来设置 API 密钥。
在 Settings 中,你还可以添加/使用任何基于 OpenAI 的 LLM 端点,例如使用 Llama2。
目前,DAILA 支持以下提示词:
VarBERT 是来自 S&P 2024 论文 ""Len or index or count, anything but v1": Predicting Variable Names in Decompilation Output with Transfer Learning" 的本地 BERT 模型。 VarBERT 用于在反编译结果中重命名变量(包括栈变量、寄存器变量和参数)。 关于如何将 VarBERT 作为库使用,请参阅 VarBERT API 文档。 在 DAILA 中使用它非常简单,就像在函数上单击唤起 GUI 上下文菜单一样。
你可以在下方看到 VarBERT 在 DAILA 中运行的演示:
IDA

Binja

Ghidra

angr management
