
デコンパイラに依存しない、デコンパイラ内でAIと対話するためのプラグイン。GPT-4、Claude、ローカルモデルに対応!
Decompiler Artificially Intelligent Language Assistant(DAILA)は、AIシステムをデコンパイラで使用するための統合インターフェースです。 DAILAを使うと、ローカルおよびリモートのLLMなど、さまざまなAIシステムを、多くのデコンパイラにわたって同じスクリプトおよびGUIインターフェースで利用できます。 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は、S&P 2024で発表された、逆コンパイル結果の変数名変更を行うローカルモデルであるVarBERTなど、さまざまなタイプのローカルモデルもサポートしています。
pipでライブラリバックエンドをインストールし、インストーラーでデコンパイラプラグインをインストールします:
pip3 install dailalib && daila --install
これはライトモードです。VarBERTを使用したい場合は、フルバージョンをインストールする必要があります:
pip3 install 'dailalib[full]' && daila --install
これにより、VarBERT APIを通じてVarBERTモデルもダウンロードされます。 インターネットにアクセスできないセキュアなネットワークなど、DAILAをインターネットに接続できないマシンにインストールする場合は、Docker ContainerセクションのDockerイメージを使用できます。
Ghidraを動作させるには、いくつかの追加手順が必要です。まず、PyGhidraモードで実行する必要があります。これを行うには、
Ghidraのインストールディレクトリに移動し、./support/pyghidraRunを実行します。
次に、DAILAプラグインを有効にします:
Windows > Script Managerメニューに移動しますdailaを検索してスクリプトを有効にしますGhidraバージョンを動作させるには、python3がパスに含まれている必要があります。実際にPython 2の中からそれを呼び出しています。
また、Ghidraで$USER_HOME/ghidra_scriptsを有効なスクリプトパスとして有効にする必要があるかもしれません。
上記が失敗した場合は、手動でインストールする必要があります。
手動でインストールするには、まずリポジトリ上でpip3 install dailalibを実行し、次にdaila_plugin.pyファイルをデコンパイラのプラグインディレクトリにコピーします。
DAILAは次の2つの方法で使用できるように設計されています:
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コンテナを使用できます。
コンテナを自分でビルドしてイメージをtarballに保存し、ターゲットマシンにロードするか、事前にビルドされたイメージを使用できます。
このリポジトリのルートでdocker build . -t dailaを実行すると、コンテナを自分でビルドできます。
また、docker pull mahaloz/daila:latestを実行して、事前にビルドされたイメージをダウンロードすることもできます(イメージはx86_64 Linux用です)。
コンテナにはDAILAとGhidraのコピーが含まれています。
次に、GUIを表示できるようにX11をコンテナに転送する必要があります。 これを行うには、次のフラグを指定してコンテナを実行する必要があります:
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 Extra Stepsに従ってDAILAプラグインを有効にすれば、準備完了です!
DAILAはLiteLLM APIをサポートしており、これはOpenAIなどのさまざまなバックエンドをサポートしています。
商用LLM APIを使用するには、独自のAPIキーを提供する必要があります。
例として、OpenAI APIを使用するには、OpenAI APIキーが必要です。
デコンパイラがOPENAI_API_KEY環境変数にアクセスできない場合は、DAILAのデコンパイラオプションを使用してAPIキーを設定する必要があります。
Settingsでは、Llama2の使用など、OpenAIベースのLLMエンドポイントを追加/使用することもできます。
現在、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コンテキストメニューを使用するだけです。
DAILA内で動作するVarBERTのデモは以下のとおりです:
IDA

Binja

Ghidra

angr management
