DexSQL について
DexSQLは、AndroidのAPKやDEXに含まれるクラス、メソッド、文字列、呼び出し参照をSQLで検索するツールです。リバースエンジニアやAIエージェント向けに、コマンドラインと内蔵MCPサーバーを提供し、ファイルをローカルで解析します。
主な機能
- 01APKとDEXを横断するSQLクエリ
- 02クラス、メソッド、文字列、参照の検索
- 03複数ファイルをまとめて入力
- 04対話型クエリと再利用可能なスクリプト
- 05サードパーティーのライセンス通知を抽出
活用シーン
- 01特定の文字列やURLを参照するメソッドの検索
- 02直接および複数段階の呼び出し元の追跡
- 03APKから関連するSmaliを確認
- 04DEXファイルに対する分析クエリの反復実行
MCP 対応
内蔵MCPサーバーはstdio経由でAIクライアントをDexSQLに接続します。MCPリソースでスキーマとドキュメントを提供し、APKの解析はローカルで行います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
DexSQL
English | 简体中文
Android バイナリ向けの SQL です。
APK ファイルと DEX ファイル内のクラス、メソッド、文字列、呼び出し参照をクエリできます。MCP 経由で AI エージェントに接続するか、コマンドラインから使用できます。
プレイグラウンド · ドキュメント · ダウンロード · スキルをインストール · ベンチマーク
DexSQL を使う理由
AI エージェントは、DEX ファイル全体を対象にシグネチャ、文字列、呼び出し関係を1つの SQL クエリで組み合わせ、必要な構造化結果だけを返せます。クエリを生成、改良し、再利用できるスクリプトとして保存できます。
DexSQL は DEX を直接読み取り、読み込み済みのデータセットを再利用するため、低レイテンシーかつ少ないメモリ使用量でクエリを繰り返し実行できます。測定結果についてはベンチマークをご覧ください。
組み込みの MCP サーバーは GUI を必要とせず、エージェントに直接接続できます。
flowchart LR
A["AI client"] -->|stdio MCP| D["DexSQL"]
D --> F["APK / DEX"]
A -->|stdio MCP| P["JADX-MCP · Python"]
P -->|HTTP| J["JADX GUI + plugin · JVM"]
J --> F
AI エージェントで使用する
DexSQL は、公式 MCP Registry に org.lsposed/dexsql として掲載されています。レジストリからサーバーをインストールするクライアントでは、DexSQL を直接追加できます。また、Claude Desktop では Releases から dexsql.mcpb バンドルを開けます。このバンドルは macOS、x86_64 Linux、x86_64 Windows に対応しています。他のプラットフォームでは、以下のスキルまたは手動セットアップを使用してください。
Skills CLI でセットアップスキルをインストールします。
npx skills add LSPosed/dexsql-release --skill install-dexsql
次に、エージェントに install-dexsql を使用して DexSQL をインストールし、MCP 接続を設定するよう指示します。Codex では $install-dexsql として呼び出してください。
このスキルは Releases から互換性のあるバイナリをダウンロードし、SHA-256 チェックサムを検証して、MCP 設定を追加し、接続を確認します。ローカルの実行ファイルも使用できます。上記のコマンドはスキルをインストールします。実際のセットアップは、スキルを呼び出したときにエージェントが行います。
MCP の手動セットアップ
Releases を開き、お使いのオペレーティングシステムと CPU アーキテクチャに合った実行ファイルまたはアーカイブを選択します。選択したリリースのアセットとリリースノートで、入手可能かどうかとシステム要件を確認してください。必要に応じてアーカイブを展開し、実行ファイルの名前を Windows では dexsql.exe、macOS/Linux では dexsql に変更します。macOS/Linux では chmod +x /path/to/dexsql を実行してください。
同じ Release から LICENSE と LICENSE-AUXILIARY をダウンロードして実行ファイルと同じ場所に保存し、実行ファイルの絶対パスを登録します。Codex の場合:
codex mcp add dexsql -- /absolute/path/to/dexsql mcp
mcpServers JSON を使用するクライアントの場合:
{
"mcpServers": {
"dexsql": {
"command": "/absolute/path/to/dexsql",
"args": ["mcp"]
}
}
}
Windows では dexsql.exe を使用し、JSON 内のバックスラッシュをエスケープしてください。例:"D:\\Tools\\dexsql.exe"。必要に応じて、クライアントの MCP 接続を再読み込みします。クライアント設定については、Codex MCP ドキュメントをご覧ください。
接続したら、次のように試してください。
/path/to/app.apkを開いてください。このログメッセージを参照しているメソッドを見つけ、その呼び出し元を一覧表示し、関連する Smali を表示してください。
サーバーは MCP リソースを通じてスキーマとドキュメントを提供します。APK の解析はローカルで実行され、入力ファイルは変更されません。どの結果がモデルに送信されるかは、AI クライアントの設定によって決まります。
パフォーマンス
実際の MCP セッション
AI エージェントが DexSQL MCP サーバーを通じて、Douyin 40.7.0(343 MiB、DEX ファイル56個)を分析しました。分析の目標を DexSQL 0.1.1 とほかの6つのツールで再現しました:rasc(ASCのRust実装)、DexDec、[ddc](https://github.com/ejfkdev/ddc)、[JADX](https://github.com/skylot/jadx) API、[garlic](https://github.com/neocanable/garlic)、[droidsaw](https://github.com/droidsaw/droidsaw)。
APKを1回開いて10個の目標に回答するまで、DexSQLでは0.71秒、rascでは1.69秒、DexDecでは16秒、ほかのツールでは75秒から449秒かかりました。DexSQLは1セッションにつきAPKを1回開くために0.38秒を要します。rascは開く処理はありませんが、各ステップでAPKを読み直すため、質問が1つだけのセッションではrascのほうが早く完了します。一部のツールでは期待される証拠がすべて見つかりませんでした。これらの見落としは現在も調査中です。すべての目標、各ツールのインターフェース、手法、ハーネスについては、再生レポートをご覧ください。
QQに対する固定クエリ
約372 MiBの同一のQQ 9.3.55 APKに対して、クラスとメソッドの検索、文字列参照、直接および2ホップの呼び出し元、複合条件の8つのクエリを実行します。比較対象には、JADX、zinja-coderのJADX-MCP、ASC、DexDec、ddc、[garlic](https://github.com/neocanable/garlic)、[droidsaw](https://github.com/droidsaw/droidsaw)が含まれます。
起動時間には、プロセスの起動、読み込みと準備、最初の完全一致クラス検索が含まれます。値は3回実行したときの中央値です。OSのファイルキャッシュはフラッシュしていません。
クエリ時間には、準備済みの3つのワークフローで9回繰り返したときの中央値を使用します。garlicは呼び出しごとにMCPを再起動するため、その時間も含まれます。droidsaw CLIでは、読み込み時間を含む3回の個別の呼び出しを使用します。各クエリは、ゼロから始まる1つの線形グラフで表示します。軸の上限を超えるバーは途中で切り、矢印を付けて実際の時間を表示します。**斜線入りのバーは、クエリが60秒以内に完了しなかったことを示します。**灰色の項目は、比較結果がない理由を説明します。
呼び出しチェーンと複合条件
直接および2ホップのクエリは、15個と16個のメソッドを返します。各複合クエリは1つのメソッドを返します。完了してグラフに表示された結果セットは、すべて検証済みです。JADXのネイティブアダプターはメタデータとDEX命令を直接読み取ります。参照を見つけるためにAPK全体を逆コンパイルすることはありません。
メモリの測定では、プロセスツリー全体を対象に50 msの間隔でポーリングします。明るい色のバーは、共通の読み込みとクラス検索のワークフローを示します。濃い色のバーは、各ツールで実行したケースを示します。RSSの合計では、共有ページが複数回カウントされる場合があります。プライベートコミットメモリと準備完了時の使用量も記録しています。
今回の実行では、DexDecの参照キャッシュにより、繰り返し実行する呼び出し元クエリがDexSQLより速くなっています。droidsawのMCPは固定の解析予算内で入力を処理できなかったため、CLIの結果をグラフに表示しています。初回クエリと準備の時間、インターフェースの違い、SQL、結果ハッシュ、再現スクリプトについては、レポートをご覧ください。
CLI
dexsql query --input app.apk --sql "SELECT DISTINCT method FROM method_strings WHERE value = 'https://api.example.com'"
dexsql query --input app.apk --interactive
dexsql extract licenses --output THIRD_PARTY_NOTICES
dexsql --help
--inputを繰り返し指定すると、複数のファイルをまとめてクエリできます。同じ実行ファイルでCLIとMCPサーバーを利用できます。
ライセンス
DexSQL は LSPosed のクローズドソースソフトウェアであり、DexSQL Binary License 1.0 に基づいてライセンスされています。その条件のもとで、個人利用および商用利用、統合、バイナリの再配布は無料です。
公開されているインストールスキル、ベンチマーク資料、ドキュメントには、MIT License が適用されます。
サードパーティの資料には、それぞれ独自のライセンスが適用されます。dexsql extract licenses を実行すると、ライセンス表記を確認できます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。