.NET MAUI を難読化する
Babel Obfuscator は、コンパイル済みのアセンブリファイル(DLL や EXE など)を難読化エンジンで処理して、.NET MAUI(Multi-platform App UI)アプリケーションを難読化できます。難読化の処理では、アプリケーションの機能を保ったまま、コードの理解とリバースエンジニアリングが難しくなるように、コンパイル済みのアセンブリを変更します。
Babel Obfuscator で .NET MAUI アプリケーションを難読化するときは、最新バージョンの Babel Obfuscator を使用し、難読化のベストプラクティスに従うことをお勧めします。たとえば、すべてのコードとリソースを難読化する、除外を使って重要な名前をそのまま残す、難読化されたアプリケーションをテストして正しく動作することを確認する、などです。
ここでは、GitHub の https://github.com/dotnet/maui-samples からダウンロードできる MAUI サンプルアプリケーション「TwoPaneView」を使用します。
git clone https://github.com/dotnet/maui-samplesこれらのサンプルアプリケーションは、MAUI フレームワークのさまざまな機能を紹介するために作られており、独自の MAUI アプリケーションを構築する出発点として適しています。
Babel タスクを設定する
サンプルリポジトリをクローンする
プロジェクトのリポジトリを GitHub からクローンし、ローカルのコンピューターに保存します。
サンプルプロジェクトを開く
リポジトリ内の 7.0 という名前のフォルダーに移動し、その中の UserInterface/Views/TwoPaneView に移動します。このフォルダーにあるソリューションファイル TwoPaneViewSample.sln を開きます。
プロジェクトファイルを開く
Visual Studio でソリューションを開いたら、「Solution Explorer」ウィンドウにあるプロジェクト TwoPaneViewSample のノードをダブルクリックします。プロジェクトファイルが Visual Studio のエディターで開きます。
Babel 用の MSBuild の記述を追加する
必要な MSBuild の記述をプロジェクトファイルに追加します。この記述で、プロジェクトのコードをどのように難読化するかを Babel Obfuscator に指示します。
<UsingTask TaskName="Babel" AssemblyName="Babel.Build, Version=10.0.0.0, Culture=neutral, PublicKeyToken=138d17b5bd621ab7" />
<Target Name="Obfuscate" AfterTargets="Compile">
<ItemGroup>
<_BabelSearchDirectories Include="@(ReferencePathWithRefAssemblies->'%(rootdir)%(directory)')" Condition="'%(Extension)' == '.dll'" />
<BabelSearchDirectories Include="@(_BabelSearchDirectories->Distinct())" />
</ItemGroup>
<Babel InputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" OutputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" SearchDirectories="@(BabelSearchDirectories)" GenerateDebug="true" ObfuscateTypes="true" ObfuscateEvents="true" ObfuscateMethods="true" ObfuscateProperties="true" ObfuscateFields="true" ObfuscateXaml="true" VirtualFunctions="true" UnicodeNormalization="false" FlattenNamespaces="true" StringEncryption="hash" ResourceEncryption="true" ControlFLowObfuscation="if=on;switch=on;case=on;call=on" ControlFLowIterations="3" />
</Target>Babel Obfuscator では、@BabelSearchDirectories 項目グループを使って、プロジェクトで使われるアセンブリ参照を解決するために難読化の処理が検索するディレクトリの一覧を定義します。
この一覧は、プロジェクトが参照するアセンブリの一覧から検索ディレクトリを取り出して生成されます。Babel Obfuscator は、参照されているアセンブリのメタデータを調べて依存関係の場所を特定し、それらのディレクトリを @BabelSearchDirectories の一覧に追加します。これにより、Babel Obfuscator はプロジェクトのコードを正しく難読化するために必要なファイルをすべて見つけられます。
プロジェクトをビルドして実行する
これで、難読化された .NET MAUI アプリケーションをコンパイルして実行できます。

TwoPaneView MAUI サンプルアプリケーション
NuGet パッケージの使用
Ultimate、Server、Data Center のいずれかのエディションをお持ちの場合は、Windows、macOS、Linux で Babel.Obfuscator NuGet パッケージを使用できます。構成の手順がより簡単になり、関連するほかのビルド項目を設定する手間なしに、Babel に関する難読化の設定だけを追加できます。NuGet パッケージを使えば、Babel タスクを記述せずに済み、プロジェクトの構成を簡素化できます。
- 「Babel.Obfuscator.nupkg」を TwoPaneViewSample プロジェクトに追加します。
- TwoPaneViewSample プロジェクトファイルで、次のプロパティを設定します。
<PropertyGroup>
<StringEncryption>hash</StringEncryption>
<ResourceEncryption>true</ResourceEncryption>
<ObfuscateXaml>true</ObfuscateXaml>
<ControlFlowObfuscation>if=on;switch=on;case=on;call=on</ControlFlowObfuscation>
<ControlFlowIterations>3</ControlFlowIterations>
</PropertyGroup>Babel タスクの記述をあらかじめ含めたサンプルプロジェクトは、こちら からダウンロードできます。
.NET MAUI iOS アプリのリンク動作
.NET MAUI アプリをビルドするときは、リンカー(ILLink)が未使用のコードを除去してアプリのサイズを最小限に抑えます。必要なメソッド、プロパティ、フィールド、イベント、構造体、クラスだけが残ります。
ILLink は、iOS と Mac Catalyst の .NET MAUI アプリ向けに 3 つのモードをサポートしています。
- Don’t link:リンカーの最適化はすべて無効になります。
- Link SDK assemblies only:SDK のアセンブリだけが未使用の型とメンバーの除去によって最適化され、自分のアセンブリは変更されません。
- Link all assemblies:中間コードを変更してアプリのサイズを最小限に抑える最適化を適用するモードです。
Babel Obfuscator で難読化されたアセンブリには、ILLink が検出できない動的コードと複雑な構造が含まれています。そのため、「Link all assemblies」のような積極的な最適化は、アプリの機能に悪影響を及ぼすおそれがあります。
難読化されたアセンブリを使用するときに ILLink で問題が起きないようにするには、ILLink のモードを「Link SDK assemblies only」に設定することをお勧めします。