vmoranv/jshookmcp
A search-first, profile-aware reverse-engineering workspace for AI agents — 735 tools across 36 domains in one MCP server.
📦 @jshookmcp/jshook とは?
MCP (Model-Context-Protocol) サーバーとして動作する、検索ファーストかつプロファイル対応のリバースエンジニアリングワークスペースです。AIエージェント(Claude Desktop、Cursorなど)が、ブラウザ自動化からWASM逆アセンブルまで、フロントエンドおよびバイナリ解析のための豊富なツールボックスを、数千ものツールスキーマを事前に読み込むことなく利用できるようにします。
🎯 コアコンセプト
- MCPサーバー – AIエージェントが呼び出せる統一されたJSON-RPC風インターフェースを提供します。
- プロファイル – 3つの軽量ツールセット(
search約3Kトークン、workflow、full約40Kトークン)を用意。エージェントは最小のプロファイルから開始し、タスクの成長に合わせて「昇格」することで、LLMのトークン消費を低く抑えます。 - ランタイム復元 – ストリーミング可能なHTTPセッションにより、切断後もブラウザの接続状態、カバレッジデータ、有効化されたドメインを復元しつつ、各クライアントのセッションを分離して保持します。
🔧 主な機能(概要)
| 分野 | できること |
|---|---|
| ブラウザ自動化 | CDP経由でのChromium/Camoufox操作、アンチ検知プリセット、CAPTCHA解決、HTTPS-MITM、HTTP/2フレーム構築、ポップアップ/ダウンロード/権限インターセプト。 |
| ネットワークインターセプト | HTTPS CA自動生成、WebSocketキャプチャ、GraphQLイントロスペクション、Burp Suiteブリッジ。 |
| JS解析 | LLM支援による難読化解除、暗号ルーチン検出、AST変換、ソースマップ再構築、スクリプト抽出/リプレイ。 |
| WASM RE | wabtベースの逆アセンブル (wasm2wat, wasm-decompile, wasm-objdump)、Binaryen最適化、セクション解析、差分、難読化検出、インストゥルメンテーション。 |
| バイナリ・プロセスフォレンジック | Frida/Ghidra/IDAブリッジ、ハードウェアブレークポイント、PEイントロスペクション、メモリ読み書き、相互参照グラフ。 |
| Android/APK | 静的トリアージ、マニフェストダンプ、apktoolデコード/ビルド、jadx逆コンパイル、DEXスキャン、ネイティブライブラリ一覧、unidbgエミュレーション。 |
| 調整 | 進捗/キャンセル機能付きタスクキュー、マルチエージェントセッション管理、カバレッジレポート。 |
| 拡張性 | ホットリロードプラグイン、宣言的YAMLワークフロー、自動ドメイン検出(36個内蔵)。 |
📚 代表的なユースケース
| シナリオ | jshookの活用方法 |
|---|---|
| 難読化されたバンドルの確認 | search_tools → deobfuscate → search_in_scripts → understand_code (coreドメインを使用)。 |
| CAPTCHAの解決 | Camoufoxを起動し、スクリーンショットを撮り、LLMに渡して手動入力し、解決策をリプレイ。 |
| OAuthフローのキャプチャとリプレイ | MITMプロキシ (proxy_start) を起動し、リクエストを収集、GraphQLをイントロスペクトし、シーケンスをリプレイ。 |
| WASM暗号ルーチンのリバース | モジュールをダンプし、逆アセンブルし、フックを生成し、メモリブレークポイントを設定。 |
| 不審なAPKの監査 | 静的トリアージを実行し、マニフェストをダンプし、jadxで逆コンパイルし、DEX内の不審なパターンをスキャン。 |
| 切断されたブラウザセッションの復元 | ストリーミング可能なHTTPトランスポート経由で再接続。サーバーが以前のCDP接続とカバレッジ状態を復元。 |
| カスタムワークフローの構築 | 利用可能な拡張ワークフローを一覧表示し、単一ツールとして実行 (run_extension_workflow)。 |
| ライブプロセスのフック | Fridaブリッジを使用して起動/アタッチし、インターセプターをインストールして関数を列挙。 |
🚀 AIエージェントクライアント向けクイックスタート
MCPクライアント設定にサーバーを追加します(Claude Desktop / Cursorの例):
{
"mcpServers": {
"jshook": {
"command": "npx",
"args": ["-y", "@jshookmcp/jshook@latest"],
"env": {
"MCP_TOOL_PROFILE": "search",
"npm_config_omit": "optional"
}
}
}
}
search プロファイルは最小限の3Kトークンのメタデータのみを読み込みます。
複数のエージェントで重いランタイム(ブラウザ、埋め込みなど)を共有したい場合は、共有デーモンを起動します:
pnpm build
pnpm daemon # 127.0.0.1:3000 で Streamable HTTP サーバーを実行
その後、各クライアントを http://127.0.0.1:3000/mcp に向けます。各クライアントは引き続き分離されたMCPセッションを取得します。
🏗️ アーキテクチャの概要
- ランタイムレジストリ – ドメインは
manifest.tsから検出されます。ファイルを追加すると自動的に新しいドメインが作成されます。 - 遅延初期化 – ツールハンドラーは初回呼び出し時にのみインスタンス化され、起動を高速に保ちます。
- ハイブリッド検索 –
search_toolsは BM25 + オプションのベクトルランキングを使用して、スキーマ全体を読み込まずに適切なツールを見つけます。 - ツールアノテーション – 各ツールは
readOnlyHint、destructiveHint、idempotentHint、openWorldHintを宣言し、より安全なエージェントオーケストレーションを実現します。 - トランスポートの対称性 – stdio と Streamable HTTP は全く同じツールインターフェースを公開します。後者はセッションを多重化し、再接続後に状態を復元します。
📦 ソースからのビルド/実行
# 前提条件
# Node 22.22.2+ pnpm 10.x
pnpm install # 依存関係のインストール(必要な場合を除き、オプションのランタイムは省略)
pnpm build # TypeScriptのコンパイル
pnpm start # サーバーの実行 (stdioモード)
# または
pnpm daemon # HTTPデーモンの実行
その他のスクリプト:
pnpm dev– ウォッチモードでの開発。pnpm check– リント、フォーマット、型チェック、生成されたメタデータの検証。pnpm test/pnpm test:e2e– ユニットテストおよびエンドツーエンドテストスイート。
📄 ライセンス
AGPL-v3 (LICENSE を参照)。
結論: @jshookmcp/jshook は、軽量なMCPインターフェースを通じてLLMエージェントが駆動できる、フルスタックで拡張可能なリバースエンジニアリングプラットフォームです。ブラウザ自動化から低レベルのバイナリ解析までを提供しつつ、トークン消費を制御下に置くことができます。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト