Ollama API インタラクション LLM 支援リバース エンジニアリング用の Ghidra スクリプト。
これは何ですか?
このスクリプトは、Ollama の API と対話して、Large Language Model (LLM) と対話します。 Ollama API を利用して、Ghidra を離れることなくさまざまなリバース エンジニアリング タスクを実行します。 Ollama のローカル インスタンスとリモート インスタンスの両方をサポートします。このスクリプトは GptHidra からインスピレーションを得ています。
対応機種
このスクリプトは、Ollama がサポートするあらゆるモデルをサポートします。
Ollama は最近、HuggingFace で利用可能な GGUF 形式のモデルのサポートも追加しました。次に例を示します。
ollama run hf.co/arcee-ai/SuperNova-Medius-GGUF
前提条件
オラマのセットアップ
llama3.1:8b
Ollama 互換モデルのいずれかに置き換えてください。
curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:8b
これで準備完了です。localhost localhost:11434
リクエストを処理する準備ができているはずです。
注:このスクリプトはリモート インスタンスもサポートしており、最初の構成時に IP アドレスとポートを設定します。
何ができるのでしょうか?
- 現在逆コンパイラ ウィンドウにある関数を説明する
- 現在の関数の名前を提案します。これが有効になっている場合、関数に自動的に名前が付けられます。
- 現在の関数を推奨コメントで書き換える
- 現在の関数を完全に書き直し、関数/パラメータ/変数名の改善とコメントの追加を試みます。
- ユーザーは機能について質問することができます
- 現在の関数のバグを見つけて潜在的な脆弱性を提案します (すべてをカバーしていることを確認するためだけに、コンテキストが含まれていないため、いくつかの提案は無意味です)
- この LeafB lowerLeafFunctions.py Ghidra スクリプトの修正バージョンを使用して、シンボルが除去されたバイナリ内のstrcpy 、 memcpy 、 strlenなどの潜在的な「リーフ」関数の分析を自動化します。これが有効になっている場合は、名前が自動変更されます。
- リスト ウィンドウで現在選択されている 1 つのアセンブリ命令について説明します。
- リスト ウィンドウで現在選択されている複数のアセンブリ命令について説明します。
- 質問するための一般的なプロンプト入力 (Google を使用するよりも、簡単な質問に適しています)
構成オプション
次の構成オプションが利用可能で、初回実行時に構成できます。
- サーバー IP : リモート インスタンスを使用する場合は、リモート インスタンスの IP に設定します。それ以外の場合は、
localhost
を入力します。 - Port : インスタンスが別のポートにある場合は、ここで変更します - デフォルトは
11434
です - スキーム: インスタンスの構成に応じて
http
またはhttps
選択します。 - モデル: 分析に使用するモデルを選択します。これはいつでも変更できます。
- プロジェクト固有のプロンプト: 必要な場合にモデルに追加のコンテキストを与えるために使用されます。
- 応答コメント: 一部のオプションは応答を関数の先頭にコメントとして保存します。これはここで有効/無効にすることができます。
- 自動名前変更: 一部のオプションは、応答に基づいて関数の名前を自動的に変更しようとします。これはここで有効/無効にすることができます。
オプション 11 および 12 は、初回実行後に設定を調整するために使用できます。
使用法
- GhidrOllama.pyスクリプトとghidrollama_utilsディレクトリを Ghidra スクリプト ディレクトリ (通常は
~/ghidra_scripts
) に配置します。 - LLM に送りたい関数/命令を見つけます。
- スクリプトマネージャーウィンドウからスクリプトを実行します。
- スクリプトを初めて実行する場合は、初期構成を完了します (これは後で変更できます)。
- 機能/命令を解析する方法を選択します
- 出力がコンソールに出力されるまで待ちます(待ち時間はホストのモデルや仕様によって異なります)
走る方法
毎回スクリプト ウィンドウに移動してこのスクリプトを実行するのは不便ですが、スクリプトは次の方法で簡単に実行できます。
- キーバインド: このスクリプトのデフォルトのキーバインドはQです。
- ツールバー: ツールバー上の小さなアイコンをクリックしてスクリプトを実行できます。
キーバインド
有効にするには、スクリプトを Ghidra スクリプト ディレクトリのリストに追加した後、リスト内でスクリプトを見つけます。結果を右クリックし、「キーバインドの割り当て」を選択します。キーの入力を求められたら、 qと入力します。
ツールバー
ツールバー アイコンを有効にするには、スクリプト マネージャーでスクリプトを見つけ、最初の列 ( [ツールバー内] 列) のチェック ボックスをクリックします。 GhidrOllama アイコンがツールバーに表示されます。
注意事項
- 分析はモデルと同程度にしか機能しないことに注意してください。このスクリプトは基本的にモデルと Ghidra の橋渡しをするだけです。
- モデルが優れているほど (パラメーターが多く、速度が遅いほど)、分析はより包括的で正確になります (ほとんどの場合!)。
- 関数の概要を簡単に知りたい場合は、 llama3.1:8bが素早く、適切な分析を提供します。
- 大きな関数とローコンテキストのモデルには注意してください。関数がコンテキスト ウィンドウに対して大きすぎる場合、モデルは完全に意味不明な応答を返します (応答したとしても)。
機能解析例
以下は、シンボルが除去された Ghidra 逆コンパイル ウィンドウに表示されるstrchr()の実装です。