XML マップファイル
Babel Obfuscator は XML マップファイルを使って、クラス、メソッド、プロパティ、イベント、フィールドの難読化前の元の名前を、難読化された名前に対応付けます。これらのファイルは難読化の過程で Babel Obfuscator が生成でき、難読化されたアセンブリと同じディレクトリに保存されます。
XML マップファイルは、開発者が次のことを行えるようにする重要なファイルです。
- 例外のスタックトレースの難読化を解除する。
- アセンブリのパブリックインターフェイスを難読化する。
スタックトレースの難読化解除
難読化されたアプリケーションで例外がスローされると、スタックトレースには難読化されたシンボルの名前が含まれ、読み取りや識別が容易ではありません。しかし XML マップファイルを使えば、難読化された名前を元の名前に対応付け直すことができ、開発者は例外の発生元を特定して問題をデバッグしやすくなります。そのため XML マップファイルは、難読化されたアプリケーションを扱う開発者にとって有用なツールです。
スタックトレースの難読化解除について詳しくは、スタックトレースのデコードを参照してください。
パブリックインターフェイスの難読化
.NET アセンブリは、サードパーティのライブラリを含むほかのアセンブリを参照することが多いため、あるアセンブリのオブジェクト、メソッド、プロパティの名前が別のアセンブリで使われるのは一般的です。これらのアセンブリを個別に難読化すると、あるアセンブリの外部から参照できるオブジェクトやメソッドの元の名前が変更され、それらを参照するほかのアセンブリが正しく動作しなくなることがあります。外部から参照できるアセンブリのメンバーの難読化は、多くの場合アセンブリ間のリネームと呼ばれます。
XML マップファイルは、複数のアセンブリにまたがって、元の名前と難読化された名前の関係を維持する手段になります。複数のアセンブリを難読化する場合、それぞれの XML マップファイルを組み合わせることで、名前同士の元の関係が保たれます。これにより、難読化されたコードは、難読化されていないほかのアセンブリから呼び出される場合でも正しく動作します。
XML マップファイルの生成の設定
XML マップファイルの生成は、コマンドラインや Babel Desktop から設定できるほか、ビルド環境では MSBuild の Babel タスクと Babel Obfuscator の NuGet パッケージを通じて設定できます。
コマンドライン
Babel Obfuscator のコマンドラインツールは、XML マップファイルの生成を有効にする --mapout オプションを受け付けます。マップファイルの生成を有効にする基本的な構文は次のとおりです。
babel MyApp.exe --mapout [output file]このオプションには、生成する XML マップファイルの完全パスを指定できます。パスを指定しない場合、XML マップファイルの名前は、元のターゲットファイル名に拡張子「.map.xml」を付けたものになり、難読化されたアセンブリと同じディレクトリに保存されます。
たとえば、難読化されたアセンブリの名前が「MyApp.exe」の場合、XML マップファイルの名前は「MyApp.exe.map.xml」になります。
マップファイルの生成をカスタマイズする追加のオプションも指定できます。たとえば、マップファイル内の名前の出力エンコード形式を変更できます。
babel MyApp.exe --mapout encoding=base64サポートされる形式は「none」と「base64」です。エンコード形式を指定しない場合、Unicode Normalization が有効なときは、babel は base64 形式を選択します。
MSBuild の Babel タスク
MSBuild の Babel タスクで XML マップファイルの生成を有効にするには、タスクの GenerateMapOutFile 属性を true に設定します。必要に応じて、MapOutFile 属性で生成するファイルのパスを指定できます。
<Babel GenerateMapOutFile="true" MapOutFile="MyAssembly.map.xml" />プロジェクトファイルで Babel Obfuscator の NuGet パッケージを使用している場合は、次の XML 要素をプロジェクトファイルに追加すると、難読化されたターゲットアセンブリの XML マップファイルの生成を有効にできます。
<PropertyGroup>
<GenerateMapOutFile>true</GenerateMapOutFile>
</PropertyGroup>生成される XML マップファイルのパスは、次のプロパティで上書きできます。
<PropertyGroup>
<GenerateMapOutFile>true</GenerateMapOutFile>
<BabelMapOutFile>MyAssembly.map.xml</BabelMapOutFile>
</PropertyGroup>Babel Desktop
Babel Desktop で XML マップファイルの生成を有効にするには、プロジェクトのキャンバスでアセンブリを選択し、プロパティパネルの「Output & diagnostics」グループで GenerateMapOutFile を有効にします。必要に応じて MapOutFile を設定してマップファイルの書き出し先を選択し、プロジェクトを保存します。
XML マップファイルの生成を有効にすると、Babel Obfuscator は難読化する入力アセンブリのマップファイルを作成します。ファイル名は、難読化されたアセンブリと同じ名前に拡張子 .map.xml を付けたものです。マップファイルは、MapOutFile で指定したパス、または難読化されたアセンブリの隣に保存されます。