mcpField
D
Dotnet DNLib MCP

Dotnet DNLib MCP

ローカル
github.com/neozセキュリティ1329 週間前に更新

Dotnet DNLib MCP について

Dotnet DNLib MCPは、dnlibを使って.NETアセンブリを分析・リバースエンジニアリングするMCPサーバーです。コードの調査や逆コンパイルに加え、デバッグやセキュリティ分析向けのIL編集にも対応します。

主な機能

  1. 01.NETアセンブリの読み込みと分析
  2. 02正規表現による型の検索
  3. 03メソッドのILと制御フローの確認
  4. 04参照、依存関係、文字列の検索
  5. 05リフレクションと動的実行の検出
  6. 06コードの逆コンパイルと変更

活用シーン

  1. 01アセンブリ内の型とメソッドの把握
  2. 02アセンブリ内の文字列の特定
  3. 03メソッドの制御フローと依存関係の分析
  4. 04テストやデバッグ用のIL命令の変更

MCP 対応

MCPクライアントに、アセンブリの読み込み、分析、逆コンパイル、変更のツールを提供し、構造化された結果を返します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MCPPOC - MCP による .NET リバースエンジニアリング

MCPPOC は、Model Context Protocol(MCP)サーバーとして実装された .NET リバースエンジニアリングツールキットです。dnlib ライブラリを使用して構築されており、MCP 通信プロトコルを介して .NET アセンブリを分析し、メタデータを抽出し、コード構造を調査するための API 主導のアプローチを提供します。

機能

  • アセンブリ分析:MCP API 呼び出しを介して .NET アセンブリを読み込み、調査します
  • 型の検出:正規表現パターンを使用して、すべての型を検索および列挙します
  • メソッドの調査:メソッドを一覧表示し、IL コードを分析して、制御フローグラフを抽出します
  • コードの関係性:メソッドの使用箇所、依存関係、参照を検索します
  • 文字列分析:アセンブリに埋め込まれたリテラル文字列を特定します
  • 高度な分析:リフレクションの使用、動的コード実行、シリアル化を検出します
  • コードの逆コンパイル:分析を容易にするため、IL コードを C# に変換します
  • コードのパッチ適用:テストやデバッグのため、メソッドの命令を変更します

インストール

  1. リポジトリをクローンします:

    git clone https://github.com/neoz/mcp-dotnet
    cd mcp-dotnet
    
  2. .NET CLI を使用してプロジェクトをビルドします:

    dotnet build
    
  3. MCP サーバーを実行します:

    dotnet run
    

MCPPOC を MCP サーバーとして使用する

MCPPOC は Model Context Protocol(MCP)を実装し、.NET リバースエンジニアリング機能をサービスとして公開します。これにより、MCP 対応クライアントはツールキットと連携し、.NET アセンブリを分析できます。

MCPPOC への接続

実行中、MCPPOC は標準入出力を通じてコマンドを処理する MCP サーバーを提供します。次の方法で接続できます。

  1. 実行ファイルの実行中に stdin/stdout を介して直接接続する
  2. MCP 対応クライアントツールを介して接続する
  3. MCP をサポートするエディターや IDE に統合する
利用可能な MCP ツール

DnlibTools クラスは、[McpServerTool] 属性を使用してすべての機能を MCP サーバーツールとして公開します。各ツールには、説明的なパラメーター情報が自己文書化されています。

基本操作
// Load an assembly for analysis
{
  "jsonrpc": "2.0",
  "method": "mcp/execute",
  "params": {
    "tool": "LoadAssembly",
    "args": {
      "AssemblyPath": "path/to/assembly.dll"
    }
  }
}

// List types matching a pattern
{
  "jsonrpc": "2.0",
  "method": "mcp/execute",
  "params": {
    "tool": "ListTypesRegex",
    "args": {
      "pattern": "System\\..*",
      "offset": 0,
      "pageSize": 100
    }
  }
}
高度な分析
// Decompile a method using its RID
{
  "jsonrpc": "2.0",
  "method": "mcp/execute",
  "params": {
    "tool": "Decompile_Method_By_RID",
    "args": {
      "rid": 42
    }
  }
}

// Extract a method's control flow graph
{
  "jsonrpc": "2.0",
  "method": "mcp/execute",
  "params": {
    "tool": "ExtractControlFlowGraph",
    "args": {
      "methodName": "Namespace.TypeName.MethodName"
    }
  }
}

MCP サーバーのアーキテクチャ

MCPPOC は Model Context Protocol(MCP)サーバーアーキテクチャを実装しており、次のような利点があります。

  1. 言語に依存しない:MCP を扱える言語やツールであれば、MCPPOC の機能を利用できます
  2. IDE 統合:VS Code やその他の MCP 対応エディターに簡単に統合できます
  3. 自己文書化:すべてのツールが説明とパラメーター情報を公開します
  4. 構造化データ:解析や分析が容易な、JSON シリアル化された結果を返します
MCP ツールのガイドライン

MCP 経由で MCPPOC を使用する際は、最適な結果を得るために次のガイドラインに従ってください。

  1. 順次実行するワークフロー:分析ツールを使用する前に、必ず最初に LoadAssembly ツールを呼び出してください。すべての操作は、アセンブリが先に読み込まれていることを前提とします。

  2. ツールの選択方法:

    • 検出には、ListTypesRegex と SearchTypes を使用して、関心のある構造を見つけます
    • 分析には、GetMethodILBodyByRID や ListTypeDependencies などの専用ツールを使用します
    • 変更には、UpdateMethodInstructions を使用してコードにパッチを適用します
  3. ページネーションのサポート:多くのツールは、offset および pageSize パラメーターによるページネーションをサポートしています。

    {
      "tool": "FindStringLiterals",
      "args": {
        "offset": 100,
        "pageSize": 50
      }
    }
    
  4. エラー処理:操作に失敗した場合、すべてのツールは意味のあるエラーメッセージを返します。

    • 「No assembly loaded」は、最初に LoadAssembly を呼び出す必要があることを示します
    • 型またはメソッドが見つからないというエラーは、名前を確認し、検索ツールを使用する必要があることを示します
  5. 大規模なアセンブリの処理:

    • すべてを取得するのではなく、特定の検索ツールを使用します
    • 一括操作ではページサイズを大きくします
    • 必要なコンポーネントのみを抽出することを検討します
  6. セキュリティと権限:アセンブリを分析する際は、知的財産権およびライセンス上の制限を尊重してください。このツールは、正当なリバースエンジニアリングの用途に限って機能を提供します。

MCP セッションの例

MCP プロトコルを使用した、リバースエンジニアリングセッション全体の例を示します。

// 1. Load an assembly
{"jsonrpc":"2.0","method":"mcp/execute","params":{"tool":"LoadAssembly","args":{"AssemblyPath":"SampleApp.dll"}}}
// Response: {"jsonrpc":"2.0","id":null,"result":"Assembly 'SampleApp.dll' loaded successfully."}

// 2. Get metadata about the assembly
{"jsonrpc":"2.0","method":"mcp/execute","params":{"tool":"GetMetadata","args":{}}}
// Response: {"jsonrpc":"2.0","id":null,"result":"{\"AssemblyName\":\"SampleApp\",\"EntryPoint\":\"SampleApp.Program::Main\",\"MixedMode\":false}"}

// 3. Find interesting string literals
{"jsonrpc":"2.0","method":"mcp/execute","params":{"tool":"FindStringLiterals","args":{"offset":0,"pageSize":10}}}
// Response: [Array of string references]

// 4. Find methods that use a specific string
{"jsonrpc":"2.0","method":"mcp/execute","params":{"tool":"FindStringReferences","args":{"str":"password"}}}
// Response: [Array of method references]

// 5. Decompile an interesting method
{"jsonrpc":"2.0","method":"mcp/execute","params":{"tool":"Decompile_Method_By_RID","args":{"rid":42}}}
// Response: C# decompiled code

高度な機能

制御フロー分析

MCPPOC はメソッドの制御フローを抽出して可視化できます。これは複雑なメソッドを理解するうえで役立ちます。

{"jsonrpc":"2.0","method":"mcp/execute","params":{"tool":"ExtractControlFlowGraph","args":{"methodName":"Namespace.TypeName.MethodName"}}}
コードのパッチ適用

テストやデバッグのために、IL レベルでメソッドを変更できます。

{"jsonrpc":"2.0","method":"mcp/execute","params":{"tool":"UpdateMethodInstructions","args":{"rid":42,"offset":10,"newInstruction":"ldstr \"Patched!\"\ncall void [System.Console]System.Console::WriteLine(string)"}}}
アセンブリの保存

アセンブリを分析または変更した後、変更を保存します。

{"jsonrpc":"2.0","method":"mcp/execute","params":{"tool":"SaveAssembly","args":{"path":"Modified.dll","mixedMode":false}}}

統合ガイド

VS Code でのセットアップ

VS Code を MCP サーバーとして MCPPOC に接続すると、エディター内で高度な .NET 分析機能を直接利用できます。

  1. VS Code MCP Client 拡張機能をインストールします。

    code --install-extension ms-toolsai.vscode-mcp-client
    
  2. settings.json で拡張機能を設定します。

    "mcp.servers": [
      {
        "name": "MCPPOC",
        "command": "dotnet",
        "args": ["path/to/MCPPOC.dll"],
        "capabilities": ["dnlib", "decompiler"]
      }
    ]
    
  3. コマンドパレットからサーバーを起動します。

    > MCP: Connect to Server > MCPPOC
    
  4. VS Code MCP Client パネルから MCPPOC のツールにアクセスします。

Claude AI での使用

適切に設定すると、Claude は MCPPOC を使用して .NET アセンブリを分析できます。

  1. MCP 機能を有効にした Claude AI 環境をセットアップします。

  2. MCP サーバーとして MCPPOC を使用するように Claude を設定します。

    {
      "mcpServers": [
        {
          "id": "dotnet-analyzer",
          "name": "MCPPOC",
          "command": "dotnet run --project /path/to/mcp-dotnet/MCPPOC.csproj",
          "documentationUrl": "https://github.com/neoz/mcp-dotnet"
        }
      ]
    }
    
  3. Claude との会話で、MCPPOC のツールを使用するよう指示できます。

    Claude, please use the MCPPOC MCP server to analyze the MyApp.dll assembly and find all string literals.
    
コマンドラインとの統合

コマンドラインで使用する場合は、標準入出力を介して MCPPOC と通信するスクリプトを作成できます。

PowerShell の例
# Start MCPPOC server
$mcpServer = Start-Process -FilePath "dotnet" -ArgumentList "run --project C:\path\to\mcp-dotnet" -RedirectStandardInput stdin.pipe -RedirectStandardOutput stdout.pipe -NoNewWindow -PassThru

# Load an assembly
$request = @{
  jsonrpc = "2.0"
  id = 1
  method = "mcp/execute"
  params = @{
    tool = "LoadAssembly"
    args = @{
      AssemblyPath = "C:\path\to\assembly.dll"
    }
  }
} | ConvertTo-Json -Compress

# Send request to MCPPOC
$request | Out-File -FilePath stdin.pipe -Encoding utf8
$response = Get-Content -Path stdout.pipe

# Process response
Write-Host $response
Bash の例
# Start MCPPOC server
mkfifo request_pipe response_pipe
dotnet run --project /path/to/mcp-dotnet < request_pipe > response_pipe &

# Load an assembly
echo '{"jsonrpc":"2.0","id":1,"method":"mcp/execute","params":{"tool":"LoadAssembly","args":{"AssemblyPath":"/path/to/assembly.dll"}}}' > request_pipe

# Read response
cat response_pipe

依存関係

貢献

貢献を歓迎します。改善の提案やバグの報告は、プルリクエストを送信するか、Issue を作成してください。

ライセンス

このプロジェクトは MIT ライセンスのもとでライセンスされています。詳細は LICENSE ファイルをご覧ください。

免責事項

このツールは教育およびデバッグのみを目的としています。責任を持って使用し、適用される法令や規制を遵守してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。