
リバースエンジニアリングを高速化するために言語モデルを照会するIDAプラグイン
Gepetto は、さまざまな大規模言語モデルを使用して、IDA Pro (≥ 7.6) によってデコンパイルされた関数に意味を与える Python プラグインです。これらのモデルを活用して関数が何を行うかを説明し、その変数を自動的にリネームすることができます。以下は、ほんの数秒で得られる結果の簡単な例です:

Gepetto をインストールする最も簡単な方法は、Hex-Rays CLI ツール (hcli) を使用することです:
pip install ida-hcli
hcli plugin install gepetto
これにより、プラグインが IDA のユーザーディレクトリに自動的にインストールされます。
別の方法として、プラグインを手動でインストールすることもできます:
gepetto.py および gepetto/ フォルダ)を IDA のプラグインフォルダ($IDAUSR/plugins)に配置します。%APPDATA%\Hex-Rays\IDA Pro\plugins\~/.idapro/plugins/~/.idapro/plugins/Computer\HKEY_CURRENT_USER\Software\Hex-Rays\IDA(Windows でのデフォルト:%LOCALAPPDATA%\Programs\Python\Python39)。[/path/to/python] -m pip install -r requirements.txt
Gepetto は設定を IDA のユーザーディレクトリに保存するため、プラグインをアップグレードしても設定が保持されます:
%APPDATA%\Hex-Rays\IDA Pro\cfg\gepetto\config.ini~/.idapro/cfg/gepetto/config.iniプラグインを初めて実行すると、gepetto/config.ini がそこにコピーされ、コンソールにパスが表示されます。以降、プラグインに同梱されているコピーはテンプレートにすぎません — ユーザーディレクトリにあるものを編集してください。場所を完全に上書きするには GEPETTO_CONFIG_DIR を設定します。
そのファイルに API キーを追加するか、ファイル内で指定されている環境変数を通じて提供してください。OpenAI の場合、キーはこのページで作成できます。API クエリは通常無料ではない(ただし非常に高価でもない)こと、および該当するプロバイダーで支払い方法を設定する必要があることに注意してください。
Gepetto は 3 つの場所からプロバイダーを読み込み、メニュー名が衝突した場合は後のものが前のものを上書きします: gepetto/models/ に同梱されているモジュール、次に $IDAUSR/cfg/gepetto/providers/ 内の任意の .py ファイル、そして gepetto.providers エントリポイントを宣伝するインストール済みディストリビューションです。上書きはコンソールで通知されるため、プラグインをフォークすることなく組み込みプロバイダーを置き換えられます。
ドロップインプロバイダーは、組み込みのものとまったく同じ契約を使用します。OpenAI 互換のエンドポイントの場合、ファイル全体は次のとおりです:
import openai
import gepetto.config
import gepetto.models.model_manager
from gepetto.models.openai import GPT
class MyProvider(GPT):
@staticmethod
def get_menu_name() -> str:
return "MyProvider"
@staticmethod
def supported_models():
return ["my-model-v1"]
@staticmethod
def is_configured_properly() -> bool:
return bool(gepetto.config.get_config("MyProvider", "API_KEY", "MYPROVIDER_API_KEY"))
def __init__(self, model):
try:
super().__init__(model)
except ValueError:
pass # No OpenAI key needed for this provider.
self.model = model
self.client = openai.OpenAI(
api_key=gepetto.config.get_config("MyProvider", "API_KEY", "MYPROVIDER_API_KEY"),
base_url="https://api.example.com/v1",
)
gepetto.models.model_manager.register_model(MyProvider)
一致する [MyProvider] セクションを config.ini に追加し、IDA を再起動してください。プロバイダーはロード時に登録されるため、新しいキーや新しいファイルは、メニューに表示される前に再起動が必要です。
代わりにパッケージとして配布するには、クラスまたは register(register_model) 呼び出し可能オブジェクトを公開してください:
[project.entry-points."gepetto.providers"]
myprovider = "myprovider:MyProvider"
providers/ 内のファイルは、IDA の起動時に任意の Python を実行します。これは他の IDA プラグインと同じ信頼レベルですが、信頼できるプロバイダのみをインストールしてください。
プラグインが正しくインストールされていれば、以下のスクリーンショットに示すように、IDA の擬似コードウィンドウのコンテキストメニューから起動できるはずです:

Edit > Gepetto メニューから、Gepetto がサポートするモデルを切り替えられます:

Gepetto は、IDA から直接 LLM に質問できる CLI インターフェースも提供しています。入力バーで
Gepetto を選択してください:

以下のホットキーが利用可能です:
Ctrl + Alt + GCtrl + Alt + KCtrl + Alt + R初期テストでは、より良い名前を要求する場合、先に関数の説明を求めた方がうまく機能することが示されています – これは モデルが自身のコメントを使ってより正確な提案を行うためだと推測されます。 AI の返答にはランダム性の要素があります。何らかの理由で最初に得られた応答が適切でない場合は、 いつでもコマンドを再実行できます。
設定内のロケールを編集することで、Gepetto の言語を変更できます。例えば、プラグインを フランス語で使用するには、以下を追加するだけです:
[Gepetto]
LANGUAGE = "fr_FR"
選択するロケールは gepetto/locales 内のフォルダ名と一致している必要があります。希望する言語が利用できない場合は、
ご自身で追加してプロジェクトに貢献できます!希望するロケール用の新しいフォルダを作成し
(例: gepetto/locales/de_DE/LC_MESSAGES/)、更新した .po ファイルを含む新しいプルリクエストを開いてください。このファイルは
gepetto/locales/gepetto.pot をコピーして編集することで作成できます(msgstr で始まるすべての行を
ローカライズ版に置き換えてください)。