Model or dataset
mahaloz/DAILA avatar
mahaloz/DAILA

DAILA puts an LLM inside the decompiler, whatever the decompiler is

A decompiler-agnostic plugin for interacting with AI in your decompiler. GPT-4, Claude, and local models supported!

710 stars60 forksPythonBSD-2-Clause

At a glance

What is it?
DAILA is a plugin that gives IDA, Ghidra, Binary Ninja and angr-management the same AI features, and the engineering that makes it work is an abstraction layer, DecLib, that hides the differences between those four tools behind one interface.
Who is it for?
DAILA suits a reverse engineer who wants a model available inside the decompiler they already use, without rewriting their workflow around a specific tool, and it suits a researcher who needs to script the same analysis against four decompilers. It is the wrong tool if you want the AI to drive the decompiler rather than read it, since the plugin works on the function you are looking at.
Can I use it commercially?
Yes. BSD-2-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 101 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The Decompiler interface is the design

DAILA is the Decompiler Artificially Intelligent Language Assistant, and it is a unified interface for AI systems to be used in decompilers. The stated point is that you can utilise various AI systems, local and remote models alike, through the same scripting and GUI interfaces across many decompilers. The mechanism is the DecLib library, and DAILA interacts with the decompiler abstractly through it. That single decision is what makes the rest possible, because the supported list is long for a tool of this kind: IDA Pro 8.4 or later, Ghidra 12.0 or later, Binary Ninja 2.4 or later, and angr-management 9.0 or later. A plugin written against one decompiler's API would be a plugin for one decompiler, and a plugin written against DecLib is four, which is the difference between a demonstration and something a working reverse engineer would actually install.

Installing it is one command, and there are two of them

The installation section is short. You install the library backend through pip and the decompiler plugin through the installer.

bash
pip3 install dailalib && daila --install 

That is the light mode. If you want to use VarBERT, you must install the full version, which also downloads the VarBERT models for you through the VarBERT API.

bash
pip3 install 'dailalib[full]' && daila --install 

There is a third path for machines with no internet access, such as a secure network, and that is the Docker image. The readme's guidance is either to build the container yourself, save the image to a tarball and load it on the target machine, or to pull the pre-built image.

bash
docker pull mahaloz/daila:latest

The image is for x86_64 Linux, it contains DAILA and a copy of Ghidra, and to use the GUI you have to forward X11 into the container.

bash
docker run -it --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix mahaloz/daila:latest

The repository itself is small, with a Dockerfile at the root, a dailalib/ package, setup.py and setup.cfg, tests.py, assets/ and a LICENSE, and the primary language is Python.

Ghidra is the awkward one, and the readme says so

Ghidra needs extra steps, and the readme is upfront about them. You must be running in PyGhidra mode, which you do by going to your Ghidra install directory and running ./support/pyghidraRun. Then you enable the DAILA plugin inside Ghidra: start Ghidra, open a binary, go to the Windows > Script Manager menu, search for daila and enable the script. There is also a runtime detail that explains a lot of confusion, because you must have python3 in your path for the Ghidra version to work, and the readme says they quite literally call it from inside Python 2. You may also need to enable the $USER_HOME/ghidra_scripts directory as a valid scripts path in Ghidra. If the automatic install fails, there is a manual route, which is to install dailalib with pip3 and copy the daila_plugin.py file into your decompiler's plugin directory. In the Docker image the same work is scripted, with the plugin installed into the Ghidra scripts directory as part of the image build.

Two ways to use it, a context menu and a library

DAILA is designed to be used in two ways, as a decompiler plugin with a GUI, and as a scripting library in your decompiler. The GUI path is a context menu that appears when you right-click anywhere in a function, with the exception of Ghidra, where you first start the backend server through Tools > DAILA > Start DAILA Backend and then use the same context menu. The scripting path is the more interesting one for anyone automating analysis, and the readme gives a short example using the OpenAI API.

python
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)

The DecompilerInterface.discover() call is the same abstraction showing up in the API, which means a script written this way runs against whichever decompiler happens to be hosting it. The loop over deci.functions then produces a summary per function, which is a plausible way to triage a large binary before looking at any of it by hand.

What the model is actually asked to do

The prompt list is the practical answer to what DAILA is for. There are prompts to summarize a function, rename variables, rename a function, identify the source of a function, find potential vulnerabilities in a function, and summarize the man page of a library call. Free prompting is also there, since the readme puts it as just type in your own prompt. Those six are the workflow of a reverse engineer working through an unfamiliar binary. Summarising a function is orientation. Renaming variables and renaming a function are the tedious part that a model can propose. Identifying the source of a function tells you whether you are looking at a standard library routine or something custom, which changes what you do next. Finding potential vulnerabilities is the one with the most obvious appeal and the most caveats, since a model reading decompiled code will produce both false positives and false negatives. The man page summary is the one most people would not think to ask for and is arguably the most useful, since recognising a library call from its behaviour is a common early step.

LiteLLM for everything remote, VarBERT for the one thing that must be local

The backend story is a deliberate split. DAILA supports the LiteLLM API, which in turn supports various backends like OpenAI, and the supported systems list includes ChatGPT, Claude, Llama2, Gemini and more. To use a commercial LLM API you must provide your own API key, and the readme explains the practical detail that if your decompiler does not have access to the OPENAI_API_KEY environment variable, then you must use the decompiler option inside DAILA to set the key. In Settings you can also add or use any OpenAI-based LLM endpoint, such as one serving Llama2, which is how a local or self-hosted model gets plugged in. VarBERT is the other side of the split. It is a local BERT model from the S&P 2024 paper on predicting variable names in decompilation output, and it is for renaming variables, including stack, register and argument variables. Its value is that it runs entirely on the machine, which matters for a reverse engineer working on code they cannot send anywhere. The readme notes that using it in DAILA is as simple as using the GUI context menu when clicking on a function.

The project has been studied, and that is the strongest signal

Two external references stand out, and they are the reason to take the project seriously. DAILA was featured in the keynote talk at HITCON CMT 2023, and it was studied in the NDSS 2026 work titled Decompiling the Synergy, an empirical study of human and LLM teaming in software reverse engineering, with the paper repository linked separately. An academic study of the tool in use is a different kind of validation from a GitHub star count, because it means researchers measured how the tool behaves with real analysts on real binaries. The project also hosts a Discord channel on the BinSync server for online help. The release cadence is regular and versioned, with v3.20.1 on 2026-07-14 following v3.20.0 in March and v3.19.0 in January, and the version numbering suggests a project that tracks features rather than a script collection. The licence is BSD-2-Clause, which is one of the more permissive choices available and a notable contrast with the AGPL used by some other reverse engineering tools.

Where this is the wrong choice

Three limits are worth naming. The first is that the AI reads the decompiler output rather than driving it, so it cannot refactor a function, set a breakpoint or follow an execution path, and the workflows it accelerates are the reading and naming ones. The second is that everything remote needs your key and your internet route, which is exactly the situation VarBERT was built for and the one where the split design has a gap, because there is no local general model option mentioned, only a local renaming model. The third is that the decompiler support is version-bounded, with IDA 8.4, Ghidra 12.0, Binary Ninja 2.4 and angr-management 9.0 as the minimums, so a team pinned to an older tool is out of luck until the DecLib side catches up. A final practical note is that the Ghidra path is the one most likely to cost you an afternoon, since PyGhidra mode, a python3 on the path and a valid scripts directory are all separate things that have to be right before anything works.

Editorial conclusion

DAILA suits a reverse engineer who wants a model available inside the decompiler they already use, without rewriting their workflow around a specific tool, and it suits a researcher who needs to script the same analysis against four decompilers. It is the wrong tool if you want the AI to drive the decompiler rather than read it, since the plugin works on the function you are looking at. It is also the wrong choice if you cannot supply an API key, since the commercial models need your own key and the local model option is VarBERT, which only renames variables. Before installing it, read the Ghidra extra steps, because that path needs PyGhidra mode and an enabled script, and note that the light install and the full install are different packages. The last push was on 2026-07-14 and the current release is v3.20.1 from the same day.

Frequently asked questions

Which decompilers does DAILA support?

DAILA interacts with the decompiler abstractly through the DecLib library, which lets it support IDA Pro 8.4 or later, Ghidra 12.0 or later, Binary Ninja 2.4 or later, and angr-management 9.0 or later. In the GUI, most of them get a DAILA context menu when you right-click in a function, while Ghidra needs the backend started from Tools > DAILA > Start DAILA Backend first.

How do I install DAILA?

Run pip3 install dailalib && daila --install for the light version. For VarBERT you need the full version, pip3 install 'dailalib[full]' && daila --install, which also downloads the VarBERT models. On a machine with no internet access you can use the Docker image, docker pull mahaloz/daila:latest, and forward X11 to see the GUI.

What can I ask DAILA to do with a function?

The supported prompts are to summarize a function, rename variables, rename a function, identify the source of a function, find potential vulnerabilities in a function, and summarize the man page of a library call. There is also free prompting, so you can type your own prompt. DAILA can be used either through the context menu in the decompiler or as a scripting library through the dailalib package.

Official sources

  1. Issues
  2. License: BSD-2-Clause
  3. mahaloz/DAILA on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/mahaloz-daila.svg)](https://hysenlabs.com/projects/mahaloz-daila)

Was this useful?