Babel Obfuscator
Babel Obfuscator は、.NET Framework 2.0 から .NET 10 まで、デスクトップ、モバイル、Web、サーバーの各ターゲットで、.NET アセンブリをリバースエンジニアリングから保護します。コンパイル済みのコードをリネーム、暗号化、再構成し、デコンパイラーが復元したものを読む価値のないものにします。
.NET コードを難読化する理由
C#、VB.NET、F# などの .NET 言語で書かれたソフトウェアは、MSIL(Microsoft Intermediate Language)にコンパイルされます。MSIL は CPU に依存しない命令セットで、型名、メンバーのシグネチャ、文字列リテラル、属性といった豊富なメタデータとともにアセンブリに格納されます。この 2 つがそろっているため、無償で入手できるデコンパイラーを使えば、特別なスキルがなくても、元のソースコードに近いコードを数秒で再構築できます。
難読化は、この再構築が役に立たなくなるように、コンパイル済みのアセンブリを変換します。Babel Obfuscator は、シンボルをリネームし、文字列、定数、リソースを暗号化し、メソッドの制御フローを書き換えます。さらに、メソッド本体全体を暗号化して、マネージドの仮想マシン内で実行させることもできます。アプリケーションはこれまでとまったく同じように動作しますが、攻撃者が復元するコードはそうではありません。
12.0 の新機能
バージョン 12.0 では、自動化された難読化解除に対する Babel の耐性を強化し、改ざん検出をモバイルに拡張し、製品を AI アシスタントから操作できるようにしました。
Windows、macOS、Linux 用の新しいクロスプラットフォームアプリです。難読化プロジェクトの編集と実行、スタックトレースのデコード、Babel Licensing の管理ができ、MCP サーバーをホストします。
自動難読化解除ツールに耐えるように設計された、制御フローのフラット化アルゴリズムです。検証可能な IL を出力し、NativeAOT と MAUI に対応し、実行時の速度は通常のフラット化と数パーセント以内の差です。
認証付きで、文字列ごとに遅延して復号する暗号化です。復号ルーチンは完全にマネージドで、トリミング、NativeAOT、FIPS でも安全に動作し、Android と iOS で検証済みです。
Android 上の .NET MAUI 向けの改ざん検出です。アプリは APK の署名証明書を、難読化時にピン留めした署名者のフィンガープリントと照合するため、再パッケージされたアプリは、トリミングや AOT コンパイルをしていても拒否されます。
iOS 上の .NET MAUI 向けの改ざん検出です。アプリは、完全な AOT のもとで、自身のバンドル ID と Apple のチーム ID を、ピン留めした値と照合して検証します。
デコードされたスタックトレースに、動的プロキシの各ブリッジの背後にあるメソッドの名前が表示されるようになりました。Babel が生成したフレームを完全に非表示にすることもできます。
12.0 に至るまでのリリースでも、機能が追加されています。バージョン 11.8 では、保護されたアセンブリが FIPS モードのホストで起動できるようにするマネージド AES 復号ルーチン、非常に大きなアセンブリの難読化の大幅な高速化、ハードウェアドングルへの紐付けのサンプルが追加されました。バージョン 11.7 では、AI に適したコマンドラインが導入されました。
Ultimate バッジ
このマニュアルの見出しには、Ultimate というマークが付いているものがあります。これは、その機能が Babel Obfuscator の Ultimate エディション以上で利用できることを意味します。バッジにポインターを合わせると、同じ情報が表示されます。
Babel Obfuscator には 2 つのエディションがあります。Enterprise は Windows 用のシングルユーザーライセンスで、.NET Framework 版(babel_net472)zip パッケージのコマンドラインツールと MSBuild タスクが含まれます。Ultimate はサイトライセンスで、Windows、Linux、macOS 上で台数の制限なく動作し、Babel Desktop、NuGet パッケージ、ビルドサーバーとの統合、Babel Encrypt Plugin、および 12.0 で Ultimate 向けに導入された保護機能であるチェーン状態、STREAM 文字列暗号化、Android と iOS のパッケージの整合性による改ざん検出が加わります。Babel Licensing のエディションである Server と Data Center には Babel Obfuscator Ultimate が含まれるため、バッジの付いた機能はすべてこれらのエディションでも利用できます。MCP サーバーのライセンス管理ツールなど、ライセンス管理に関する一部の機能はこの 2 つのエディションに固有のもので、その旨は該当するページに記載されています。
バッジのない見出しは、両方のエディションに共通の機能を説明しています。価格を含む完全な比較表は、エディションの比較 ページにあります。
保護機能
各機能は個別に有効にでき、難読化ルールによってシンボルごとに調整できます。そのため、最も強力な変換を、知的財産のある箇所だけに適用できます。
名前空間、型、メンバー、パラメーターを、ASCII または Unicode の意味のない名前にリネームします。XAML と BAML を認識し、アセンブリ間のマップファイルにも対応しています。
文字列リテラルを XOR、HASH、STREAM のいずれかのアルゴリズムで暗号化します。独自のアルゴリズムを組み込むこともできます。
不透明な分岐を挿入し、条件分岐を書き換え、ディスパッチャーを中心にメソッドをフラット化します。最上位には Ultimate のチェーン状態アルゴリズムがあります。
メソッド本体を暗号化し、マネージドの Babel Virtual Machine で実行します。外部ファイルに格納したりパスワードで保護したりして、機能ベースのライセンスに利用できます。
外部メソッドと内部メソッドの呼び出しを、生成されたプロキシ経由にします。これにより、実際の呼び出し先が IL から見えなくなります。
埋め込みリソースを圧縮して暗号化し、実行時に必要に応じて復号します。
キーやルックアップテーブルなど、インラインの数値定数と配列初期化子を隠します。
アタッチされたデバッガーを検出してプロセスを終了するか、独自のハンドラーを実行します。
デスクトップではイメージのハッシュを、Android と iOS ではパッケージの署名または識別情報を検証し、終了するかカスタムコードで対応します。
依存関係を 1 つのアセンブリにまとめるか、暗号化されたリソースとして埋め込みます。単一ファイルでの配布が可能になり、外部に露出する範囲も小さくなります。
デッドコードを除去し、クラスをシールし、属性を取り除き、小さなメンバーをインライン展開して、メタデータを縮小し、読み込みを高速化します。
XML ルールとカスタム属性で、すべての機能を細かく調整できます。リフレクションとシリアル化が動作し続けるようにする解析エージェントも備えています。
AI を活用したワークフローへの対応
Babel は、AI アシスタントを製品の正式な操作者として扱い、2 つのレベルで対応しています。
Babel MCP Server:Babel Desktop は、ローカルコンピューター上に MCP エンドポイントを公開できます。これにより、Claude Code をはじめ、Model Context Protocol に対応した任意のクライアントが、ユーザーと同じようにアプリケーションを操作できます。プロジェクトを作成し、アセンブリを追加し、ルールを記述し、マージまたは埋め込む対象を選択し、難読化を開始し、警告と統計を読み取り、スタックトレースをデコードし、テーマを作成し、スクリーンショットを取得して自身の作業を確認します。Server エディションと Data Center エディションでは、同じサーバーでライセンス管理データベースも管理できます。サーバーは既定でオフになっています。オンにするには、「設定 > MCP」の「オートメーション サーバーを有効にする」を使用します。サーバーはループバックでのみ待ち受け、アクセストークンを必須にできます。同じページの「Claude Code コマンドをコピー」で、登録用のコマンドを取得できます。Babel MCP Server を参照してください。
claude mcp add --transport http babel-obfuscator http://127.0.0.1:8765/mcp \
--header "X-Babel-Token: paste-the-token-from-settings-mcp"AI に適したコマンドライン:バージョン 11.7 以降、コマンドラインツールは、CI パイプラインや AI エージェント向けに、構造化されバージョン管理された出力ストリームを生成できます。--format=json または --format=ndjson は stdout を babel.cli.v1 スキーマに切り替え、--quiet は無人実行時に入力を求める代わりにただちに失敗させ、--strict-exit は意味を持つ終了コードを有効にします。同じフラグによって --help と --version も機械可読になるため、AI エージェントはすべてのオプションを自分で調べられます。AI に適したモードを参照してください。
Babel Licensing には、ホストされた Licensing Service 向けの専用の MCP サーバーがあり、アシスタントは REST API を介して顧客、ライセンス、アクティベーションを管理できます。Babel Licensing のマニュアルの AI 連携を参照してください。
プラットフォームとフレームワーク
| 領域 | サポート |
|---|---|
| ビルドホスト | Windows:zip パッケージのコマンドラインツールと MSBuild タスク。Linux、macOS、CI ビルドサーバー:Babel の NuGet パッケージと dotnet ツール(Ultimate エディション)。Windows、macOS、Linux:Babel Desktop(Ultimate エディション) |
| ターゲットランタイム | .NET 10 とそれ以前のすべての .NET および .NET Core のリリース、.NET Framework 2.0 から 4.8、.NET Standard、Mono |
| アプリケーションモデル | デスクトップ(WPF、Windows Forms、Avalonia)、Android と iOS 上の .NET MAUI、Xamarin、Blazor、ASP.NET Core、UWP、nanoFramework |
| 言語 | C#(C# 14 を含む)、VB.NET、F# |
| 公開モード | フレームワーク依存、自己完結型、単一ファイル、トリミング、NativeAOT |
難読化は IL に対して行われるため、あるオペレーティングシステム上のビルドホストで、任意のランタイム識別子向けに公開されたアセンブリを保護できます。シンボルのリネーム、STREAM 文字列暗号化、およびチェーン状態を含む制御フロー難読化は、トリミングと NativeAOT を経てもそのまま維持されます。コード暗号化、動的プロキシ、デスクトップの改ざんチェックなど、メモリマップされたイメージや動的 IL を必要とする機能には、MAUI、Blazor、AOT のターゲットで制限事項があり、各機能のページに記載されています。
実行方法
Windows、macOS、Linux 用のアプリケーションです。難読化プロジェクトの作成と実行、スタックトレースのデコード、Babel Licensing の管理ができ、MCP サーバーをホストします。
シェルやスクリプトからすべての機能を利用でき、AI に適した出力モードも備えています。Linux と macOS では、Ultimate の dotnet ツールとして動作します。
Visual Studio やビルドサーバーから、ビルドの一部として難読化します。タスクのすべてのプロパティで IntelliSense を利用できます。
パッケージ参照を追加すると、dotnet build または dotnet publish が、SDK パイプラインの適切な位置、つまりトリミングと AOT の前で難読化を実行します。Linux、macOS、CI ビルドサーバーで Babel を実行するための方法です。
Ultimate エディションと Babel Licensing の各エディションには NuGet パッケージが含まれているため、Babel は Windows、Linux、macOS で dotnet ツールとして動作し、SDK スタイルのビルドの中でも動作します。Babel Desktop はエンジンを .NET 10 上で実行するため、Babel Desktop で難読化する場合もこれらのエディションのいずれかが必要です。Enterprise エディションには、.NET Framework 版 zip パッケージに含まれる Windows 用のコマンドラインツールと MSBuild タスクが付属します。
次のステップ
- はじめに:Babel のインストールとライセンスのアクティベーション
- 一般機能:機能を 1 つずつ紹介
- コードセキュリティの強化:最小限の手間で最大の保護を得るための設定
- サンプル:MAUI、Blazor、ClickOnce、ビルドサーバー、機能ベースのライセンス