AIによるリバースエンジニアリングとは|生成AIでコード解析・逆アセンブル・図の自動生成
リバースエンジニアリングは、設計図やソースコードが手元にない状態から、既存のソフトウェアや製品の構造・動作を解析して仕様を推定する作業です。生成AIの登場で、この「読み解き」の負担が大きく変わりました。コードの意図を自然言語で要約させたり、逆アセンブル結果に注釈を付けさせたり、シーケンス図やフロー図を自動生成させたりと、これまで熟練者が時間をかけていた工程をAIが下支えします。本記事では、生成AIでできるリバースエンジニアリングの手法をタスク別に整理し、ソースコード向け(GitHub Copilot・Codex)とバイナリ向け(Ghidra・IDA連携)のツール、Azure OpenAIでの実装例、そして見落とされがちな適法性の注意点まで解説します。
まとめ:生成AIでリバースエンジニアリングはどこまで変わるか
- 生成AIが得意なのはコードの意図理解・命名やドキュメントの復元・逆アセンブル結果の注釈。ゼロから完全なソースを自動復元する魔法ではなく、解析者の判断を速める補助にとどまる。
- ソースコードが読める対象なら、仕様・フローチャート・シーケンス図の復元が得意。バイナリが対象なら、GhidraなどのデコンパイラでC言語相当へ戻してからLLMに渡すのが実務的。
- ツールは対象で使い分ける。可読コードはGitHub Copilot・Codex、バイナリはGhidra+LLMプラグイン(GhidrAssist・GhidraMCP)やIDA Pro・Binary Ninja。
- リバースエンジニアリング自体は違法ではないが、著作権法(平成30年改正)・不正競争防止法・使用許諾契約(EULA)の範囲を守る必要がある。加えて機密コードを外部AIへ送る情報漏えいとハルシネーション(誤った復元)に注意する。
リバースエンジニアリングと生成AIの基礎
リバースエンジニアリングとは何を対象にするのか
リバースエンジニアリングとは、完成した製品やシステムを分解・解析し、その設計や動作原理を明らかにする技術です。対象はソフトウェア、ハードウェア、通信プロトコルなど幅広く、AIと組み合わせる場面が多いのはソフトウェア解析です。ソフトウェアでは主に2つの層を扱います。ひとつは実行ファイル(バイナリ)を人間が読めるアセンブリ言語へ戻す逆アセンブル、もうひとつはバイナリからC言語などの高水準コード相当へ戻す逆コンパイル(デコンパイル)です。ソースコードが入手できる場合は、この復元工程を飛ばして「読みにくいコードの意図を理解する」ことが主目的になります。
生成AIがリバースエンジニアリングで担う役割
生成AIは、大量のコードで学習した言語モデルの性質上、断片的なコードやデコンパイル結果からも「何をしている処理か」を推定できます。具体的には、難読化された変数・関数への意味のある命名の提案、処理内容の自然言語での要約、コードに対する質問応答、そしてフロー図・シーケンス図・仕様書といったドキュメントの生成です。従来は解析者がひとつずつ追っていた制御フローを、AIが下書きとして提示するため、確認と修正が中心の作業へ変わります。あくまで下書きであり、最終的な正しさは人が検証する前提で使うのが原則です。
生成AIでできるリバースエンジニアリングの手法
ソースコードからの仕様・図の復元
ソースコードが読める対象では、生成AIに関数群を渡して処理の流れをシーケンス図やフローチャートとして出力させると、全体像の把握が速くなります。Mermaid記法やPlantUML記法を指定すれば、そのままドキュメントに貼り付けられる図が得られます。仕様が失われたレガシーシステムで、コードから業務ロジックや入出力の仕様を逆算する用途にも向きます。
LLMによる逆アセンブル・バイナリ解析の補助
ソースコードが無いバイナリでは、まずGhidra・IDA Pro・Binary NinjaといったデコンパイラでアセンブリやC言語相当の擬似コードへ戻し、その結果をLLMに渡して注釈させる流れが定石です。デコンパイル結果は変数名や関数名が失われ読みにくいため、LLMに「この関数の役割」「怪しい処理の有無」を尋ねて理解を補います。Ghidra向けにはLLM連携プラグインが公開されており(後述)、マルウェア解析やファームウェア調査での一次スクリーニングに使われています。
レガシーコードのドキュメント化と業務要件の逆生成
長年改修を重ねて仕様書が実態と乖離したシステムでは、既存コードをAIに読ませて設計ドキュメントや業務要件の草案を生成させる使い方が効果的です。移行やリプレイスの前段で、現行システムが実際に何をしているかを棚卸しする工程を短縮できます。生成された要件は必ず有識者がレビューし、AIが取りこぼした例外処理や暗黙のルールを補う必要があります。
リバースエンジニアリングに使える主なAIツール
| ツール | 主な対象 | 役割 | 備考 |
|---|---|---|---|
| GitHub Copilot / Codex | ソースコード | 可読コードの解読・要約・テスト生成 | チャットで質問しながら解析 |
| Ghidra + GhidrAssist / GhidraMCP | バイナリ | デコンパイル結果への注釈・命名 | OpenAI v1互換API・ローカルLLMも可 |
| IDA Pro / Binary Ninja | バイナリ | デコンパイラ+プラグインでLLM連携 | 商用(無償版は機能制限あり) |
| Azure OpenAI / OpenAI API | ソース・擬似コード | 図・仕様・要約の生成 | 機密コードの送信可否を要確認 |
Copilot・Codexによるソースコードの解読
GitHub Copilotのチャットは、開いているコードに対して「この関数の処理を説明して」「呼び出し関係を図にして」と尋ねながら解析を進められます。エージェントモードを使えば、複数ファイルにまたがる依存関係を追わせることもできます。OpenAIのCodexは自律的にリポジトリを調べて要約や修正案を出すため、規模の大きいコードベースの初見調査に向きます。使い方はGitHub Copilotエージェントモードの使い方やCodexとは?OpenAIの自律型AIコーディングエージェントで詳しく解説しています。解読した仕様の妥当性確認には、GitHub Copilotでテストコードを自動生成する方法のようにテストを書かせて挙動を突き合わせる手も有効です。
Ghidra・IDAとLLMを組み合わせたバイナリ解析
バイナリ解析では、Ghidraのデコンパイラが出力する擬似コードにLLMを重ねる構成が広がっています。GhidrAssistはGhidraにLLM連携を組み込むプラグインで、OpenAI v1互換のAPIに対応し、Ollamaなどのローカルモデルからクラウドのモデルまで切り替えられます。GhidraMCPはModel Context Protocol経由でLLMからGhidraの解析機能を呼び出し、実行ファイルの機能を要約させる用途に使われます。機密性の高い検体を扱う場合は、外部送信を避けられるローカルLLM構成が選択肢になります。
実践:生成AIでソースコードからシーケンス図を作る
Azure OpenAI Serviceを使い、PythonのソースコードからMermaid記法のシーケンス図を生成する最小例です。旧来のopenai.Completion.createやCodexエンジンは廃止されているため、現行のチャット補完APIで記述します。モデルのデプロイ名やAPIバージョンは変動するため、最新は公式ドキュメントで確認してください。
from openai import AzureOpenAI
client = AzureOpenAI(
api_key="YOUR_API_KEY",
api_version="2024-10-21",
azure_endpoint="https://YOUR-RESOURCE.openai.azure.com/",
)
source_code = """
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
"""
resp = client.chat.completions.create(
model="gpt-4o", # Azure上のデプロイ名。最新モデルは公式で確認
messages=[
{"role": "system", "content": "あなたはコード解析の専門家です。"},
{"role": "user", "content": f"次のコードの処理をMermaid記法のシーケンス図で表してください。\n\n{source_code}"},
],
)
print(resp.choices[0].message.content)
出力されたMermaidのコードをドキュメントツールに貼れば図として表示されます。同じ要領で、system指示を「フローチャートで」「処理仕様を箇条書きで」と変えるだけで、復元したい成果物を切り替えられます。バイナリ相手のときは、このsource_codeにデコンパイラの擬似コードを渡します。
リバースエンジニアリングの適法性と生成AI利用時の注意点
著作権法・不正競争防止法・EULAの位置づけ
リバースエンジニアリングは技術行為として一律に違法なわけではありませんが、関わる法律の範囲を理解しておく必要があります。著作権法は平成30年(2018年成立・2019年施行)の改正で、互換性の確保や脆弱性の調査、研究・開発目的でアイデアを得るためのプログラム解析について、権利者の許諾なく行える範囲が明確化されました(享受を目的としない利用を定めた著作権法第30条の4)。不正競争防止法との関係では、市場で正規に購入した製品を解析するのは問題ない一方、他社の試作品などを不正な手段で入手して解析・利用する行為は違反となり得ます。特許権は製品の分解・解析そのものでは侵害になりません。ただし、多くのソフトウェアの使用許諾契約(EULA)にはリバースエンジニアリングを禁じる条項があり、これに反すると契約違反を問われる可能性があります。実務では、対象の入手経路・利用目的・契約条項を事前に確認することが重要です。
生成AIならではのリスク
生成AIを使う場合、法的注意に加えてAI固有の落とし穴があります。第一に情報漏えいです。解析対象のソースコードやバイナリを外部のクラウドAIへ送信すると、機密情報や第三者の著作物を社外へ持ち出すことになりかねません。機微なコードを扱うなら、送信可否を契約・社内規程で確認するか、ローカルLLM構成を選びます。第二にハルシネーションです。AIは自信ありげに誤った処理内容や、実在しない関数の動作を説明することがあります。復元された図・仕様・コードは必ず実物と突き合わせて検証し、AIの出力を最終成果物としてそのまま採用しないことが安全です。
よくある質問
リバースエンジニアリングにAIを使うと何が変わりますか?
コードの意図理解、難読化された名前の推定、ドキュメント(図・仕様)の生成といった「読み解き」の工程が速くなります。従来は解析者が手作業で追っていた制御フローをAIが下書きするため、作業の中心が「一から追う」から「AIの出力を確認・修正する」へ移ります。完全自動ではなく補助である点は変わりません。
逆アセンブルやバイナリ解析にも生成AIは使えますか?
使えます。ただしバイナリを直接AIに理解させるより、Ghidra・IDA Pro・Binary NinjaなどのデコンパイラでアセンブリやC言語相当へ戻し、その結果をLLMに注釈・要約させる二段構えが実務的です。Ghidra向けのGhidrAssistやGhidraMCPのようなLLM連携プラグインを使うと、この流れをツール内で完結できます。
GitHub CopilotやCodexでリバースエンジニアリングはできますか?
ソースコードが読める対象であれば有効です。Copilotのチャットやエージェントモードでコードの説明・呼び出し関係の可視化を依頼でき、Codexはリポジトリ全体を自律的に調べて要約します。一方、ソースの無いバイナリを直接読み解く用途にはデコンパイラとの併用が必要です。
生成AIによるリバースエンジニアリングは違法ではないですか?
行為自体は違法ではありません。著作権法は平成30年改正で研究・互換性・脆弱性調査目的の解析を許容し、正規購入品の解析は不正競争防止法上も問題になりません。ただし不正に入手した対象の解析・利用や、EULAでリバースエンジニアリングを禁じる契約に反する行為はリスクがあります。目的と入手経路、契約条項を事前に確認してください。
生成AIが復元したコードや図はそのまま信用してよいですか?
そのままの採用は避けてください。AIは誤った処理内容を自信ありげに説明することがあり(ハルシネーション)、実物と食い違う図やコードを出す場合があります。テストによる挙動の突き合わせや、有識者のレビューで検証したうえで成果物に反映するのが安全です。