リバースエンジニアリング新時代へ! 「Ghidra」と「Claude Desktop」をMCPで繋ぐ

2025年5月16日(金)
小竹 泰一
第4回の今回は、リバースエンジニアリングツール「Ghidra」とAIアプリ「Claude Desktop」をMCPで連携し、バイナリ解析を効率化する方法について解説します。

はじめに

Ghidra」はNSA(アメリカ国家安全保障局)が開発したOSSのリバースエンジニアリングツールです。「リバースエンジニアリング」とはバイナリを解析し動作を明らかにする作業で、インシデントレスポンスの際のマルウェア解析やバイナリの脆弱性を見つける際などに行われます。

Ghidraは、商用ツールに負けないデコンパイラやデバッガなどの機能を搭載しており、広く利用されています。このGhidraと「Claude Desktop」をMCP(Model Context Protocol)を用いて繋ぐことで「リバースエンジニアリングを効率化できるのでは」と話題になっています。

今回は、GhidraとClaude Desktopによるリバースエンジニアリングを実際に試してみます。

NSAが開発したGhidra

Ghidraが登場する以前は、デコンパイラが搭載されたGUIで動作するフリーのリバースエンジニアリングツールはなかったため、Ghidraがリリースされた時には大きな衝撃を受けました。

2019年に公開されて以来、リバースエンジニアリングの専門家から高い評価を得ています。次の特徴を持っています。

  • デコンパイラ機能
  • デバッガ機能
  • クロスプラットフォーム対応(Windows、macOS、Linux)
  • Java製のExtensionによる機能拡張
  • Python製のスクリプトによる機能拡張
  • 複数人での共同作業をサポート

これらの機能はマルウェア解析や脆弱性調査など、様々なリバースエンジニアリングに活用されています。

Claude DesktopとMCP

Claude DesktopはAnthropic社が開発した大規模言語モデル(LLM)のデスクトップアプリケーションです。MCPはAIを搭載/未搭載のツールを連携させるためのプロトコルで、Anthropic社が2024年10月に提唱したものです。MCPの公式ドキュメントには「AIアプリケーション向けのUSB-Cポートのようなもの」と記載されています。

USB-CポートがPCとデバイスを繋ぐように、MCPはAIアプリケーションと外部ツールを繋ぎます。MCPを用いることで、Claude DesktopなどのAIアプリケーションと外部ツールの間でコンテキストを共有し、双方向の通信を行えます。

2025年に入ってから、実際にMCPを活用したサービスやOSSが増えてきています。4月4日にはGitHub公式のMCPサーバが公開され、4月8日にはNotion公式のMCPサーバが公開されました。

GhidraとClaude Desktopを繋ぐ

GhidraMCPというOSSのGhidra Extensionを使うと、GhidraにMCPサーバを拡張機能として組み込むことができます。ここでは、GhidraMCPを用いてGhidraとClaude Desktopを接続する方法を紹介します。

GhidraMCPの開発者LaurieWiredさんによる紹介動画はこちら

Pythonの準備

GhidraMCPのMCPサーバ部分はPythonで実装されています。リポジトリ内に必要なライブラリが記載されたrequirements.txtがあります。次のコマンドで記載のライブラリをインストールしてください。なお、ここではパッケージマネージャーにpipを使用していますが、お好みのものを使用して問題ありません。

$ git clone https://github.com/LaurieWired/GhidraMCP.git
$ cd GhidraMCP
$ pip install -r requirements.txt

Ghidraの準備

GhidraMCPには、Pythonスクリプトの他にJavaで実装された「Ghidra Extension」が含まれています。ここではGhidra Extensionの設定方法を紹介します。Ghidraのインストール方法は公式ドキュメントを参照してください。

まず、Ghidra ExtensionをリポジトリのReleasesからZIPファイル(GhidraMCP-release-X-X.zip)をダウンロードしてください。

ダウンロードしたZIPファイルを解凍すると、ZIPファイルのGhidra Extensionのファイル(GhidraMCP-X-X.zip)が入っています。このファイルを解凍する必要はありません。ZIPのままGhidraに読み込ませることができます。

Ghidraを起動してFileメニューからInstall Extensionsを選択してください。新たに表示されたウィンドウで[+]ボタンをクリックしてください。

「Ghidra Extension」のインストール

Select Extensionというウィンドウが表示されたら、先ほど解凍したGhidraMCP-X-X.zipを選択してください。

「Ghidra Extension」の選択

ウィンドウにGhidraMCPが表示されるのでGhidraMCPにチェックを入れ、[OK]ボタンをクリックし、Ghidraを再起動してください。

Claude Desktopの準備

Claude DesktopをGhidra MCPクライアントとして設定するには、MCPサーバのURLやGhidraMCPのPythonスクリプトのパスを指定する必要があります。

Claude Desktopを起動し、設定画面を開いてください。開発者タブを選択して構成を編集をクリックします。設定ファイルclaude_desktop_config.jsonの場所がファイルエクスプローラーで開かれます。

claude_desktop_config.jsonをテキストエディタで開き、次の内容を書き込んでください。bridge_mcp_ghidra.pyのパスにはReleasesからダウンロードしたZIPファイルを解凍したフォルダ内にあるbridge_mcp_ghidra.pyのパスを指定してください。

{
    "mcpServers": {
      "ghidra": {
        "command": "<Pythonのパス>",
        "args": [
          "<GhidraMCPのパス>/bridge_mcp_ghidra.py",
          "http://127.0.0.1:8080/"
        ]
      }
    }
}

バイナリを確認する

アンチディスアセンブルを実装したバイナリを弊社のGitHubリポジトリで公開しています。ここでは、このバイナリをClaude Desktopを繋いだGhidraに読み込んで解析してみます。

バイナリをダウンロードする

まず、リポジトリのReleasesからbinaries.zipをダウンロードしてください。

解凍するとarm32フォルダとarm64フォルダがあるはずです。ここではarm64フォルダ内のbogus-control-flowを使用します。このバイナリには、分岐先が一意に定まる、最適化では消えない条件分岐を挿入する「Bogus Control Flow」という難読化が施されています。

次のコードをARM64向けにビルドしたのがbogus-control-flowです。このコードには条件分岐が存在しますが、abは定数でsqrt(a*a+b*b)の計算結果は一意に定まります。そのため、この条件式は常に偽となりif文内のコードは実行されません。ここに命令として実行できないバイト列を埋め込むことでディスアセンブルを妨害しています。

#include <math.h>
#include <stdio.h>

int main() {
    int a = 3;
    int b = 2;
    int c = 5;
    if (c < sqrt(a*a+b*b)) {
        __asm__ volatile(
            ".long 0x01020304\n"
            ".long 0x05060708\n"
        );
    }
    printf("Hello, world!\n");
    return 0;
}

バイナリをGhidraで読み込む

Ghidraを起動し、FileメニューよりNew Projectを選択します。ダイアログに沿ってプロジェクト名を入力し、プロジェクトを作成してください。

プロジェクトを作成したら、FileメニューよりImport Fileを選択します。arm64フォルダ内のbogus-control-flowを選択してください。正常にバイナリを読み込めていると、次のような画面が表示されます。なお、ここではプロジェクト名をmcp-testとしています。

バイナリの読み込み

bogus-control-flowをクリックするとCodeBrowserウィンドウが表示され、ディスアセンブル処理が実行されます。main関数のディスアセンブル結果を確認すると、アセンブリ命令の中にバイト列が存在することを確認できます。

ディスアセンブル結果

Claude Desktopでバイナリを解析する

Claude Desktopにmain関数中のバイト列について質問してみましょう。私は「main関数にはディスアセンブルできない箇所(LAB_0010082c)が存在します。この原因を教えてください」と質問してみました。なお、Claude DesktopからGhidraを操作するに当たっては警告が出るため「このチャットで許可する」もしくは「一度だけ許可」を選択し、Ghidraの実行を許可してください。

Ghidraの実行許可

その結果、下図のような回答が返ってきました。

Claudeの回答

このケースではsqrt(13.0)を計算して5.0と比較し、条件が真であれば「Hello, world!」を表示して正常に終了するというプログラムフローが見えます。しかし、条件が偽の場合(つまりsqrt(13.0)が5.0より大きい場合)、ディスアセンブラは続くコードを正確に解析できなくなっています。

sqrt(13.0)は約3.606なので実際には条件は真となり、不正なデータが存在する部分には実行フローが到達しないはずです。これは意図的に配置された難読化技術の一部かもしれません。

条件式の計算結果が常に一意に定まり、バイト列の部分は実行されないこと、難読化が施されている可能性があると判断できています。

元のC言語のコードでは条件式は常に偽になりますが、デコンパイル結果では常に真になるように解釈されています。条件式の記述、条件式に続く処理が実態に沿っており、元のコードとは異なりますが、これは正しいデコンパイル結果です。これにより、Claude Desktopはデコンパイル結果を正確に解釈できていると分かります。

デコンパイル結果

おわりに

今回は、MCPを用いてGhidraとClaude Desktopを接続し、バイナリの解析を行ってみました。AIツールをリバースエンジニアリングツールに接続することで、専門家でなくてもバイナリの解析をある程度行うことができるようになリました。また、専門家がリバースエンジニアリングを行うときには、作業を従来より効率的に進められるでしょう。

AIツールにはClaude Desktopを使用しましたが「Cline」や「Cursor」などのAIを搭載したエディタを接続することもできます。Ghidraはバイナリの解析を効率化するための「Ghidra Script」と呼ばれるPythonによるスクリプティング機能が搭載されています。バイナリ解析の補助だけでなく、Ghidra Scriptの実装にもこれらのエディタを使用することで、バイナリの脆弱性を効率的に発見できるのではと私は考えています。今年のセキュリティカンファレンスでは、Ghidra+Cursor/Clineで効率的にバイナリの脆弱性を発見する発表が増えるのではないかと予想しています。

MCPを用いてAIツールを接続することで、色々なセキュリティツールを用いた作業が効率的に行える未来が楽しみです。

株式会社ステラセキュリティ 取締役副社長 CTO
大学卒業後、株式会社ディー・エヌ・エーに入社し、セキュリティエンジニアとして活躍。その後、株式会社アカツキに1人目のセキュリティエンジニアとして入社し、脆弱性診断内製化、セキュリティチーム組成に尽力。 著書に『ポートスキャナ自作ではじめるペネトレーションテスト』『マスタリングGhidra』(いずれもオライリー・ジャパン)、『リバースエンジニアリングツールGhidra実践ガイド』(マイナビ出版)

連載バックナンバー

セキュリティ技術解説
第4回

リバースエンジニアリング新時代へ! 「Ghidra」と「Claude Desktop」をMCPで繋ぐ

2025/5/16
第4回の今回は、リバースエンジニアリングツール「Ghidra」とAIアプリ「Claude Desktop」をMCPで連携し、バイナリ解析を効率化する方法について解説します。
セキュリティ技術解説
第3回

AI開発の外注リスク ーデータ品質と労働環境問題

2025/4/9
第3回の今回は、AI開発を外注する際の品質・倫理・安全リスクについて、国内外の事例を交えて解説します。
セキュリティ技術解説
第2回

ハルシネーション ーAIが見せる幻想のリスクと利活用

2025/3/13
第2回の今回は、AIが誤った事実を生成する「ハルシネーション」という現象とそのリスク、利活用について解説します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています