Dotnet DNLib MCP について
Dotnet DNLib MCPは、dnlibを使って.NETアセンブリを分析・リバースエンジニアリングするMCPサーバーです。コードの調査や逆コンパイルに加え、デバッグやセキュリティ分析向けのIL編集にも対応します。
主な機能
- 01.NETアセンブリの読み込みと分析
- 02正規表現による型の検索
- 03メソッドのILと制御フローの確認
- 04参照、依存関係、文字列の検索
- 05リフレクションと動的実行の検出
- 06コードの逆コンパイルと変更
活用シーン
- 01アセンブリ内の型とメソッドの把握
- 02アセンブリ内の文字列の特定
- 03メソッドの制御フローと依存関係の分析
- 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# に変換します
- コードのパッチ適用:テストやデバッグのため、メソッドの命令を変更します
インストール
-
リポジトリをクローンします:
git clone https://github.com/neoz/mcp-dotnet cd mcp-dotnet -
.NET CLI を使用してプロジェクトをビルドします:
dotnet build -
MCP サーバーを実行します:
dotnet run
MCPPOC を MCP サーバーとして使用する
MCPPOC は Model Context Protocol(MCP)を実装し、.NET リバースエンジニアリング機能をサービスとして公開します。これにより、MCP 対応クライアントはツールキットと連携し、.NET アセンブリを分析できます。
MCPPOC への接続
実行中、MCPPOC は標準入出力を通じてコマンドを処理する MCP サーバーを提供します。次の方法で接続できます。
- 実行ファイルの実行中に stdin/stdout を介して直接接続する
- MCP 対応クライアントツールを介して接続する
- 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)サーバーアーキテクチャを実装しており、次のような利点があります。
- 言語に依存しない:MCP を扱える言語やツールであれば、MCPPOC の機能を利用できます
- IDE 統合:VS Code やその他の MCP 対応エディターに簡単に統合できます
- 自己文書化:すべてのツールが説明とパラメーター情報を公開します
- 構造化データ:解析や分析が容易な、JSON シリアル化された結果を返します
MCP ツールのガイドライン
MCP 経由で MCPPOC を使用する際は、最適な結果を得るために次のガイドラインに従ってください。
-
順次実行するワークフロー:分析ツールを使用する前に、必ず最初に
LoadAssemblyツールを呼び出してください。すべての操作は、アセンブリが先に読み込まれていることを前提とします。 -
ツールの選択方法:
- 検出には、
ListTypesRegexとSearchTypesを使用して、関心のある構造を見つけます - 分析には、
GetMethodILBodyByRIDやListTypeDependenciesなどの専用ツールを使用します - 変更には、
UpdateMethodInstructionsを使用してコードにパッチを適用します
- 検出には、
-
ページネーションのサポート:多くのツールは、
offsetおよびpageSizeパラメーターによるページネーションをサポートしています。{ "tool": "FindStringLiterals", "args": { "offset": 100, "pageSize": 50 } } -
エラー処理:操作に失敗した場合、すべてのツールは意味のあるエラーメッセージを返します。
- 「No assembly loaded」は、最初に
LoadAssemblyを呼び出す必要があることを示します - 型またはメソッドが見つからないというエラーは、名前を確認し、検索ツールを使用する必要があることを示します
- 「No assembly loaded」は、最初に
-
大規模なアセンブリの処理:
- すべてを取得するのではなく、特定の検索ツールを使用します
- 一括操作ではページサイズを大きくします
- 必要なコンポーネントのみを抽出することを検討します
-
セキュリティと権限:アセンブリを分析する際は、知的財産権およびライセンス上の制限を尊重してください。このツールは、正当なリバースエンジニアリングの用途に限って機能を提供します。
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 分析機能を直接利用できます。
-
VS Code MCP Client 拡張機能をインストールします。
code --install-extension ms-toolsai.vscode-mcp-client -
settings.jsonで拡張機能を設定します。"mcp.servers": [ { "name": "MCPPOC", "command": "dotnet", "args": ["path/to/MCPPOC.dll"], "capabilities": ["dnlib", "decompiler"] } ] -
コマンドパレットからサーバーを起動します。
> MCP: Connect to Server > MCPPOC -
VS Code MCP Client パネルから MCPPOC のツールにアクセスします。
Claude AI での使用
適切に設定すると、Claude は MCPPOC を使用して .NET アセンブリを分析できます。
-
MCP 機能を有効にした Claude AI 環境をセットアップします。
-
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" } ] } -
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
依存関係
- dnlib:.NET アセンブリの読み書き用ライブラリ
- ICSharpCode.Decompiler:C# コード生成用の .NET デコンパイラー
- ModelContextProtocol:MCP サーバーの実装
- .NET 9.0 以降
貢献
貢献を歓迎します。改善の提案やバグの報告は、プルリクエストを送信するか、Issue を作成してください。
ライセンス
このプロジェクトは MIT ライセンスのもとでライセンスされています。詳細は LICENSE ファイルをご覧ください。
免責事項
このツールは教育およびデバッグのみを目的としています。責任を持って使用し、適用される法令や規制を遵守してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。