ILSpy

.NET のアセンブリ(DLL・EXE)を C# のコードに戻して読むデコンパイラ。Windows・Linux・macOS で動くデスクトップ版があります。

cat ilspy/meta.yml確認日 2026-10-28

安全性

影響範囲 手元だけ自分の端末の中で完結し、外には何も送らない
管理者権限
不要
検証環境
不要

使い方

用途
診断・監査
難易度
中級
形態
デスクトップアプリ
対応環境
Windows / macOS / Linux

信頼性

リポジトリ
icsharpcode/ILSpy
ライセンス
自由に使えるMIT
GitHub
スター27,0302026-11-10 時点
メンテ状況
更新が続いている最終更新 2026-11-09
目次
  1. はじめに
  2. ILSpy でできること
  3. 入手と動作環境
  4. 外と行う通信
  5. 安全な試し方:自作アプリに埋めたダミーの秘密を読む
  6. 主な使い方
  7. Ghidra・x64dbg・jadx との違い
  8. 注意点
  9. 次に読む
  10. 出典

ILSpy を使うと、.NET で作られたプログラム(DLL や EXE)を C# のコードに戻して、画面で読めます。この記事では、自分で作った小さなアプリを開き、埋め込んだ秘密が丸見えになることを確かめて、秘密をプログラムに入れてはいけない理由を体験する使い方を説明します。

この記事は、.NET でアプリやライブラリを作っていて、配る前に「ビルドした成果物から何が読み取れるか」を自分の目で確かめたい人に向けています。読み終えると、次のことができるようになります。

  • ILSpy のデスクトップ版、コマンドライン版(ilspycmd)、VS Code 拡張の違いが分かる
  • 自分でビルドした .NET アプリを開き、コードと文字列を読む
  • 埋め込んだダミーの秘密が読めることを確かめ、秘密の持ち方を見直す

ILSpy でできること

ILSpy は、.NET のアセンブリ(実行用にまとめられたファイル)を読むためのブラウザー兼デコンパイラです。公式 README によると、次のことができます。

  • アセンブリを C# のコードに戻す(IL という中間言語で表示することもできる)
  • プロジェクト全体をまとめて書き出す
  • 型・メソッド・プロパティなどを検索し、リンクをたどって移動する
  • アセンブリのメタデータ(型や参照の一覧表)を調べる
  • ディスクのほか、NuGet フィードと実行中のプロセスからもアセンブリを開く(v11.0 のリリースノートは、実行中のプロセスから開く機能を全 OS で使えると書いています。GAC から開く機能は Windows 専用です)
  • プラグインで機能を足す
しないことILSpy は、プログラムの危険度を判定しません。何が問題かは、戻したコードを読んで自分で判断します。戻したコードは元のソースそのものではありません。変数名やコメントは失われ、読みやすさのために形が変わることもあります。また、ILSpy が読むのは .NET のアセンブリです。C や C++ で作られたネイティブの実行ファイルは対象外なので、Ghidra のような道具を使います。

入手と動作環境

ILSpy は MIT ライセンスです。同じ ILSpy の名前で、使う場面の違う入口がいくつかあります。2026-10-28 時点の最新版は v11.2 です。

入口 動く環境 備考
デスクトップ版 Windows(x64・arm64)、Linux(x64)、macOS(arm64)向けの配布ファイルがある v11.0 から Avalonia で作り直した版だけを配布している
ilspycmd Windows、Linux、macOS dotnet tool で入れるコマンドライン版
VS Code 拡張 VS Code と .NET ランタイムが動く環境 Wiki の比較表では、リソースやメタデータの解析、PDB の生成、プラグインが使えない
Visual Studio 拡張 Visual Studio 2022 / 2026 公式の拡張。Visual Studio 本体にも、F12 で使える逆コンパイル機能が最初から入っている

デスクトップ版について、公式が書いていることは次のとおりです。

  • v11.0 のリリースノートによると、ILSpy は WPF から Avalonia に移りました。これで Linux と macOS でも動くようになりました。WPF 版は完全に取り除かれたので、v11.0 以降は Avalonia 版だけです。WPF 版は Windows 専用でした。
  • Windows 向けの zip は、.NET ランタイムが別に要る版(x64・arm64)と、ランタイムを同梱した版(x64)があります。Linux と macOS の配布ファイルは、ランタイムを同梱しています。
  • Windows 向けのインストーラー(MSI)は、ユーザー単位(%LocalAppData%\Programs\ILSpy)に入る設定です。zip を展開して使うなら、どの OS でも管理者権限は要りません。Linux 向けには .deb と .rpm もありますが、こちらは /opt/ilspy に入るので root 権限が要ります。
  • README によると、Microsoft Store にも版があります(正式版のみ)。
  • v11.2 の配布ファイルに、macOS の Intel 向けと、Linux の arm64 向けはありません。その環境では、README のビルド手順で自分で作ります。

ilspycmd のインストールには、.NET SDK 10.0.100 以上が要ります。Windows x64 と Linux x64 では、.NET ランタイムが要らない Native AOT 版が入ります。それ以外の環境では、.NET 10 のランタイムで動く版が入ります。

公式の記述が食い違っていますVS Code 拡張の Wiki にある機能比較表は、デスクトップ版を「Windows のみ(WPF)」と書いています。これは v11.0 より前の情報で、本体の README とリリースノートの内容と合いません。この記事は、本体の README とリリースノートに従います。

外と行う通信

ソースコードを読んで確かめた範囲は、次のとおりです。

  • デスクトップ版の更新確認。既定で有効です。起動したときにバックグラウンドで、https://icsharpcode.github.io/ILSpy/updates.xml を取得して、新しい版があるか調べます。前回の成功から 7 日以内なら調べません。失敗しても、画面にエラーは出ません。「Help → Check for Updates」で手動でも調べられます。止めるには、About 画面の「Automatically check for updates every week」のチェックを外します。
  • NuGet フィードから開く機能。「Open from NuGet feed」を使ったときだけ、NuGet のフィードに接続します。既定のフィードは https://api.nuget.org/v3/index.json です。
  • ilspycmd の更新確認。既定で有効です。実行のたびに https://api.nuget.org/v3-flatcontainer/ilspycmd/index.json を取得して、最新版と比べます。古いときは、標準エラーに「更新してください」と出します。止めるには --disable-updatecheck を付けます。
  • VS Code 拡張。初回の起動時に、.NET ランタイムを自動でダウンロードします。ランタイムは VS Code のフォルダーに入り、システムには手を加えません。Linux だけは、ランタイムに必要なパッケージを入れることがあります。

README のプライバシーの項は、個人を特定できる情報を集めないこと、ユーザーのファイルを第三者のサービスに送らないこと、利用状況の計測サービスを使わないことを書いています。更新確認のコードにも、開いたファイルを送る処理はありませんでした。ただし、ILSpy の全部のコードは読んでいません。

安全な試し方:自作アプリに埋めたダミーの秘密を読む

自分でビルドした小さなアプリを使います。他人のソフトは使いません。ここで埋め込む文字列は、本物ではないダミーです。

  1. .NET SDK を入れて、作業用のフォルダーでコンソールアプリを作ります。

    dotnet new console -n demo
  2. demo/Program.cs を、次の内容に書き換えます。ダミーの API キーを、コードの中に直接書いています。

    var apiKey = "DUMMY-API-KEY-0000-NOT-REAL";
    Console.WriteLine($"key length: {apiKey.Length}");
  3. demo フォルダーでリリースビルドをします。

    dotnet build -c Release

    できあがる bin/Release/<フレームワーク名>/demo.dll が、配る形のファイルです。手元の環境(.NET SDK 10.0.402)では bin/Release/net10.0/demo.dll でした。この DLL の中に、ダミーの文字列が UTF-16 のまま入っていることを、バイト列の検索で確かめました。つまり、読み出すのに特別な技術は要りません。

  4. リリースページから、自分の環境に合う zip を入手して展開し、ILSpy を起動します。.NET ランタイムが別に要る Windows 版の zip を選ぶなら、先に .NET 10 のランタイムを入れます。ランタイムを入れたくないときは、selfcontained の付いた zip を選びます。

  5. demo.dll を開きます(File メニューから開きます)。

  6. 左のツリーで Program を選びます。右に戻した C# のコードが出て、apiKey に入れたダミーの文字列が、そのまま読めるはずです。

  7. 検索ボックスで、c:DUMMY のように種類を絞って探すこともできます。検索の種類には Constant があります。ただし、Constant で探せる値の範囲は、公式の説明では確かめられませんでした。見つからないときは、Program を開いて直接読みます。

  8. 確かめたら、秘密の持ち方を見直します。キー、トークン、パスワードを、コードやアプリの設定ファイルに書いて配ってはいけません。環境変数、秘密管理サービス、サーバー側の処理で持ちます。すでに配ったビルドに本物の秘密が入っていた場合は、漏れたものとして扱い、キーを再発行します。

コマンドラインで一括して調べることもできます。

  1. ilspycmd を入れます。

    dotnet tool install --global ilspycmd
  2. DLL を指定して実行します。出力先を省くと、戻した C# が標準出力に出ます。

    ilspycmd --disable-updatecheck demo.dll
  3. 出力を検索ツールにかけると、ビルドのたびに秘密が残っていないかを点検できます。同じ目的で、ソースやリポジトリの履歴を調べる gitleaks と組み合わせるのも手です。

主な使い方

ilspycmd の主なオプションです。全部は ilspycmd --help で確かめられます。

オプション 内容
-o、--outputdir 出力先のフォルダー。省くと標準出力に出る
-p、--project コンパイルできるプロジェクトとして書き出す。-o が必要
-t、--type 完全修飾名で指定した型だけを戻す
-m、--member 1 つのメンバーだけを戻す
-il、--ilcode C# ではなく IL で出す
-l、--list class、interface、struct、delegate、enum を一覧にする
--list-resources 埋め込まれたリソースを一覧にする
--resource リソースを 1 つ取り出す。.baml は XAML に戻る
-genpdb、--generate-pdb PDB を生成する
-r、--referencepath 依存する DLL のあるフォルダー
--disable-updatecheck 更新確認をしない

デスクトップ版では、リンクをたどって型や参照先へ移動し、基底型と派生型の間も行き来できます。

Ghidra・x64dbg・jadx との違い

ILSpy Ghidra x64dbg jadx
主な対象 .NET のアセンブリ ネイティブの実行ファイル全般 Windows のネイティブ実行ファイル Android アプリの Dex
結果 戻した C# と IL 逆アセンブルと逆コンパイル 動かしながら見る命令・メモリ 戻した Java
動かすか ファイルを読む。README の機能一覧にデバッガーはない 読むのが中心 プログラムを動かして止める ファイルを読む

.NET のプログラムは、中間言語(IL)にメタデータが付いた形で配られます。このため、ILSpy で戻したコードは、元の C# にかなり近くなります。ネイティブの実行ファイルでは、同じようにはなりません。

目的で選ぶなら、次のようになります。.NET の成果物の中身を読むなら ILSpy、ネイティブの実行ファイルなら Ghidra、動いている最中の挙動を見るなら x64dbg、Android アプリなら jadx です。

注意点

  • 読むのは、自分が作ったアプリ、または解析してよいと明記された教材だけにしてください。他人のソフトは、利用規約や使用許諾契約が解析を禁じていることがあります。ILSpy は、保護の解除やライセンスの回避のための道具ではありません。
  • 出どころの分からないアセンブリを開くときは、普段使いのパソコンとは分けた環境を使ってください。v11.0 のリリースノートには、細工されたファイルを読み込んだときの問題を防ぐ修正が並んでいます。新しい版を使ってください。
  • プラグインは、ILSpy の中で動くプログラムです。提供元を確かめてから入れてください。
  • 戻したコードには、エラーや読み違いが混じることがあります。重要な判断は、IL の表示や、実際の動作でも確かめてください。
  • ILSpy で秘密が読めないからといって、安全とは言えません。難読化は読みにくくするだけで、秘密を守る手段ではありません。秘密は、配るプログラムに入れないのが基本です。
  • 本体は、公式の GitHub リリースページか、README に載っているマーケットプレイスから入手してください。

次に読む

出典

  1. 公式リポジトリ README(機能・フロントエンド・ビルド・プライバシーの記述)github.com/icsharpcode/ILSpy/blob/master/README.md
  2. ライセンス(MIT)github.com/icsharpcode/ILSpy/blob/master/LICENSE
  3. リリース v11.0(WPF 版の廃止と Avalonia 版への移行)github.com/icsharpcode/ILSpy/releases/tag/v11.0
  4. リリース v11.2(最新版と配布ファイル)github.com/icsharpcode/ILSpy/releases/tag/v11.2
  5. ソース:配布ファイルを作る手順(publish.ps1)github.com/icsharpcode/ILSpy/blob/master/publish.ps1
  6. ソース:インストーラーの設定(setup.cs、ユーザー単位のインストール)github.com/icsharpcode/ILSpy/blob/master/ILSpy.Installer/setup.cs
  7. ソース:更新確認のコード(UpdateService.cs)github.com/icsharpcode/ILSpy/blob/master/ILSpy/Updates/UpdateService.cs
  8. ソース:更新確認の設定の既定値(UpdateSettings.cs)github.com/icsharpcode/ILSpy/blob/master/ILSpy/Updates/UpdateSettings.cs
  9. ソース:About 画面の更新確認のチェックボックス(AboutCommand.cs)github.com/icsharpcode/ILSpy/blob/master/ILSpy/Commands/AboutCommand.cs
  10. ソース:NuGet フィードの既定値(NuGetFeedSettings.cs)github.com/icsharpcode/ILSpy/blob/master/ILSpy/NuGetFeeds/NuGetFeedSettings.cs
  11. ilspycmd の README(インストール・オプション)github.com/icsharpcode/ILSpy/blob/master/ICSharpCode.ILSpyCmd/README.md
  12. ソース:ilspycmd の更新確認(DotNetToolUpdateChecker.cs)github.com/icsharpcode/ILSpy/blob/master/ICSharpCode.ILSpyCmd/DotNetToolUpdateChecker.cs
  13. VS Code 拡張の READMEgithub.com/icsharpcode/ilspy-vscode/blob/master/README.md
  14. VS Code 拡張のインストール手順(Wiki)github.com/icsharpcode/ilspy-vscode/wiki/Installation
  15. VS Code 拡張とデスクトップ版の機能比較(Wiki)github.com/icsharpcode/ilspy-vscode/wiki/Feature-Comparison
  16. Linux 向け rpm パッケージの定義(ilspy.spec)github.com/icsharpcode/ILSpy/blob/master/BuildTools/packaging/linux/rpm/ilspy.spec
  17. 検索オプション(Wiki)github.com/icsharpcode/ILSpy/wiki/Search-Options

確認日 2026-10-28

似たツール

Ghidra

影響範囲 手元だけ
NationalSecurityAgency/ghidra

米国 NSA が開発し、オープンソースで無料公開しているリバースエンジニアリングの道具一式。コンパイル済みのプログラムを逆アセンブル・逆コンパイルして、中身を読めるようにします。

用途
学習
形式
デスクトップアプリ
難易度
上級
ライセンス
自由に使えるApache-2.0
分類
リバースエンジニアリング/学習・演習環境
更新が続いているスター99,232最終更新 2026-11-10
Ghidraの解説を読む

Gitleaks

影響範囲 手元だけ
gitleaks/gitleaks

Git リポジトリやファイルに紛れ込んだパスワード、API キー、トークンなどの秘密情報を見つけるコマンドラインツール。

用途
防御
形式
コマンドライン
難易度
初級
ライセンス
自由に使えるMIT
分類
脆弱性スキャン
更新が続いているスター30,858最終更新 2026-10-28
Gitleaksの解説を読む

jadx

影響範囲 手元だけ
skylot/jadx

Android アプリの APK や DEX を Java のソースコードに戻して読むデコンパイラ。画面から読む GUI 版と、コマンドラインで一括出力する版があります。

用途
診断・監査
形式
デスクトップアプリ
難易度
中級
ライセンス
自由に使えるApache-2.0
分類
リバースエンジニアリング/モバイルセキュリティ
更新が続いているスター51,739最終更新 2026-11-08
jadxの解説を読む

x64dbg

影響範囲 外に届く
x64dbg/x64dbg

Windows 向けのオープンソースのデバッガー。ソースコードのない実行ファイルを動かしながら止め、命令・レジスター・メモリを見て動作を調べます。

用途
学習
形式
デスクトップアプリ
難易度
上級
ライセンス
条件つきGPL-3.0
分類
リバースエンジニアリング/マルウェア解析
更新が続いているスター50,266最終更新 2026-11-09
x64dbgの解説を読む