アセンブリの埋め込み
Babel Obfuscator には、複数のアセンブリをメインアプリケーションに埋め込む機能があり、配布するアセンブリ全体のサイズを小さくできます。Babel Obfuscator でアセンブリを埋め込むと、埋め込みアセンブリはまず暗号化および圧縮されたうえで、メインアプリケーションのアセンブリ内にマネージドリソースとして格納されます。
埋め込みアセンブリは難読化されない点に注意してください。そのため、埋め込むのは、独自のコードを含まないアセンブリや、保護の対象ではないコンポーネントだけにすることをお勧めします。
埋め込みは、単一ファイルの Avalonia アプリケーションを作成する方法として推奨されます。埋め込みアセンブリは元のアセンブリ ID を維持するため、Avalonia の avares://<AssemblyName>/… リソース URI は引き続き解決されます。この点が、Avalonia と互換性のないマージとは異なります。
コードも保護するには、まず各依存関係を難読化し(アセンブリ間の参照が壊れないように、パブリック API は維持します)、難読化済みのアセンブリを埋め込みます。
babel MyApp.View.dll --output obf/MyApp.View.dll [obfuscation options]
babel MyApp.dll --embed obf/MyApp.View.dll [obfuscation options]コマンドラインからの埋め込み
Babel ツールを使ってコマンドラインからアセンブリを埋め込むには、--embed オプションに続けて、埋め込むアセンブリファイルのパスを指定します。このオプションを複数回指定すると、複数のアセンブリを埋め込めます。
babel MyApp.exe --embed Library1.dll --embed Library2.dllこのコマンドは、Library1.dll と Library2.dll を MyApp.exe に埋め込みます。埋め込みアセンブリは、メインアセンブリ内にマネージドリソースとして格納されます。
XML ルールファイルを使用して、圧縮や暗号化などの追加の設定を指定することもできます。たとえば、次の内容で embed.xml という名前のファイルを作成します。
<Rules>
<Rule name="Library1" feature="embed" exclude="false">
<Target>Assembly</Target>
<Pattern>Library1.dll</Pattern>
<Properties>
<Compress>false</Compress>
</Properties>
</Rule>
<Rule name="Library2" feature="embed" exclude="false">
<Target>Assembly</Target>
<Pattern>Library2.dll</Pattern>
<Properties>
<Encrypt>false</Encrypt>
</Properties>
</Rule>
</Rules>続いて次のコマンドを実行し、ルールファイルに基づいてアセンブリを埋め込みます。
babel MyApp.exe --embed Library1.dll --embed Library2.dll --rules embed.xmlMSBuild の Babel タスクからの埋め込み
MSBuild の Babel タスクでアセンブリを埋め込むには、プロジェクトファイルに新しい ItemGroup 要素を追加する必要があります。ItemGroup の中には EmbedAssembly 項目を複数定義でき、それぞれに埋め込むアセンブリファイルのパスを指定します。たとえば、次のようにします。
<ItemGroup>
<EmbedAssembly Include="path/to/Assembly1.dll" />
<EmbedAssembly Include="path/to/Assembly2.dll" />
</ItemGroup>EmbedAssembly は、Babel タスクの EmbedAssemblies 属性で参照できます。
<Babel EmbedAssemblies="@(EmbedAssembly)" RulesFiles="embed.xml" />必要に応じてルールファイルを指定し、埋め込みアセンブリごとに圧縮と暗号化の設定をカスタマイズできます。既定では、埋め込みアセンブリは Babel の既定の設定で圧縮および暗号化されますが、必要であればルールファイルでこれらの設定をカスタマイズできます。
Babel Desktop からの埋め込み
Babel Desktop でアセンブリを埋め込むには、次の手順に従います。
プロジェクトを開くか作成する
既存のプロジェクトを開くか、新しいプロジェクトを作成します。
アセンブリを追加する
プライマリアセンブリと埋め込むアセンブリを、プロジェクトのキャンバスに追加します。
依存関係を接続する
各依存関係をプライマリアセンブリに接続します。依存関係の下のアンカーから、プライマリアセンブリの上のアンカーへドラッグします。
接続の種類を「埋め込み」に設定する
接続をクリックし、その種類を「埋め込み」に設定します。新しい接続は、プライマリアセンブリが依存関係を参照している場合は既定で「マージ」になり、そうでない場合は「参照」になります。
圧縮と暗号化を設定する
埋め込みアセンブリの圧縮と暗号化は、プライマリアセンブリの「XML ルール」ビューで、XML ルールを使って設定します。
プロジェクトのキャンバスについて詳しくは、難読化プロジェクトを参照してください。