ターゲットの設定
ターゲットはそれぞれ独自の Babel Obfuscator の設定を持ちます。プロパティパネルでは 1 つのターゲットずつ設定を編集し、セットアップコマンドと保護レベルでは多くの設定を 1 回の操作で変更します。
プロパティパネル
ターゲットを選択してツールバー右上の「プロパティ」ボタンをクリックするか、選択したノードで Enter を押すか、ノードまたは行のメニューで「プロパティ」を選択します。パネルは右側にドッキングされ、タイトルには「ターゲットのプロパティ」とターゲットの名前が表示されます。パネルには「設定」と「XML ルール」の 2 つのタブがあります。
「設定」タブには、選択したターゲットの Babel Obfuscator のオプションがすべて表示され、「マップ ファイル」、「リネーム」、「制御フロー」、「コード暗号化」、「最適化」、「署名と保護」、「ファイルと依存関係」、「Output & diagnostics」、「Advanced」のグループに分かれています。各グループには含まれるオプションの数が表示され、グループは折りたたむことができます。「設定を検索」に入力すると、一覧が絞り込まれます。



選択したターゲットのプロパティパネル
設定には MSBuild タスクのオプション名が使われているため、各設定の働きは Babel タスクリファレンスと各保護機能のページで確認できます。各オプションには、その型に合ったコントロールが用意されています。スイッチにはチェックボックス、アルゴリズムにはリスト、パスにはファイルやフォルダーの選択ダイアログ、フィルターとプロパティマップにはエディターが使われます。リストを「既定」にすると、そのオプションはプロジェクトに書き込まれず、エンジンは独自の既定値を使用します。変更は選択したターゲットだけに適用されます。複数のターゲットをまとめて変更するには、グリッドを使用します。



コード暗号化の設定:文字列、MSIL、値の暗号化
「Control Flow Obfuscation」のような複合オプションでは、プロパティごとに 1 つのコントロールが表示されます。次の図は制御フローのスイッチを示しています。最後の chain は、Ultimate エディションのチェーン状態アルゴリズムをオンにします。



「Control Flow Obfuscation」のプロパティ
署名キーやマップファイルのパスワードなどは、現在のセッションの間だけ保持されます。プロジェクトファイルに書き込まれることはないため、再起動後はもう一度入力します。実行中にエンジンがパスワードを必要とした場合は、Babel Desktop が入力を求めます。
マップファイル
「設定」タブの先頭にある「マップ ファイル」グループには、選択したターゲットのマップに関する設定がまとめられています。
- 「リネーム マップを書き出す」は、ターゲットのマップファイルの書き出しをオンまたはオフにします。その下の行にはマップの書き出し先が表示されます。既定では「難読化されたアセンブリと同じ場所」で、「変更…」で選択した場合はそのファイル名が表示されます。
- 「ほかのターゲットのマップ」には、このターゲットを終点とするマップリンクが一覧表示されます。ターゲット名をクリックするとそのターゲットが選択され、× をクリックするとリンクが削除されます。
- 「その他のマップ ファイル」には、このターゲットが読み込むマップのうち、プロジェクト内のどのターゲットも書き出さないものが一覧表示されます。以前のビルドで難読化したライブラリのマップなどです。「マップ ファイルを追加…」で追加し、「削除」で取り除きます。



ライブラリのマップを読み込むターゲットの「マップ ファイル」グループ
XML ルール
「XML ルール」タブでは、選択したターゲットのインラインの XML 難読化ルールを編集します。エディターは XML を構文強調表示し、「検証」は Babel のルールスキーマに照らして XML を検査して、各エラーの行と列を報告します。「XML を開く」はルールファイルをエディターに読み込み、「XML ファイルを保存」はエディターの内容をファイルに書き出し、「アセンブリに適用」はルールをターゲットに格納します。インラインルールはプロジェクトファイルに保存されます。



ターゲットのインライン XML ルール
まだ適用していないルールがある間、パネルは同じターゲットにとどまります。別のターゲットを選択したりプロジェクトを実行したりする前に、ルールを適用するか、コマンドパレットの「設定: 未適用の編集を破棄して再読み込み」で破棄してください。プロジェクトの外にあるルールファイルは、グリッドの詳細の「ルール」タブに一覧表示されます。
エンジンプラグイン
Babel Obfuscator のプラグインは、コマンドパレットの「エンジン プラグイン: DLL パスを設定」、またはグリッドの詳細の「プラグイン」タブで、ターゲットごとに設定します。「エンジン プラグイン: 引数名を検出」はプラグインが宣言している引数名を読み取るので、それを基に引数を入力できます。プラグインはエンジン内で実行される .NET コードです。信頼できるプラグインだけを使用してください。
セットアップコマンド
2 つのセットアップコマンドはプロジェクト全体を 1 回の操作で設定し、「難読化: レベルを設定…」は選択したターゲットに保護レベルを適用します。先にアセンブリを追加してから、アプリケーションに合ったコマンドを実行してください。3 つのコマンドはすべてコマンドパレットにあり、2 つのセットアップコマンドはグリッドのツールバーにも「パブリック難読化を設定」と「マージを設定」として表示されます。



コマンドパレットのセットアップコマンド
| コマンド | 効果 |
|---|---|
| 難読化: メイン アセンブリへのマージを設定 | ほかのすべてのターゲットをメインアセンブリにマージし、プロジェクトの出力ファイルが 1 つになるようにします。メインアセンブリは、プロジェクトで唯一の .exe です。該当するものがない場合や複数ある場合は、最初のターゲットがメインアセンブリになります。エンジンがマージできないアセンブリは、そのまま残されます。 |
| 難読化: パブリック難読化を設定 (すべてのアセンブリ) | 一緒に配布する一連のアセンブリを、パブリックシンボルがリネームされるように準備します。各ターゲットには「obfuscate public」という名前の XML ルールが追加され、リネームマップを書き出すようになります。マージ、埋め込み、参照の依存関係にほかのターゲットを含むターゲットは、マップリンクを通じてそのターゲットのマップを読み込みます。 |
| 難読化: レベルを設定… | 選択したターゲットに、3 段階の保護レベルのいずれかを適用します。 |
マージとパブリック難読化を設定する 2 つのコマンドは、パッケージターゲット(.apk、.appx、.xap)をスキップします。3 つのコマンドはいずれも、ジョブの実行中や、適用待ちの編集がある間は実行されません。これらのコマンドは開いているプロジェクトを変更しますが、保存はしないので、先にキャンバス、グリッド、プロパティパネルで結果を確認できます。
保護レベル
コマンドパレットの「難読化: レベルを設定…」は選択したターゲットにレベルを適用し、グリッドの行メニューの「難読化レベルを設定」は選択したすべての行にレベルを適用します。各レベルは次のオプションを設定し、それ以外のオプションは変更しません。
| レベル | 保護 |
|---|---|
| 軽量 | 型、メソッド、フィールド、プロパティ、イベントのリネーム。制御フロー、暗号化機能、解析対策の保護はオフになります。 |
| バランス | リネーム、goto アルゴリズムによる制御フロー難読化、文字列暗号化、ILDASM の抑止。 |
| 最大 | リネーム、goto、switch、case、if、チェーン状態による制御フロー難読化、ストリーム文字列暗号化、値の暗号化、MSIL 暗号化、改ざん検出、デバッグ保護、ILDASM の抑止。ライセンスにストリームアルゴリズムが含まれていない場合は、既定の文字列暗号化が使用されます。 |
高いレベルの後に低いレベルを適用すると、追加されていた保護は再びオフになります。レベルはあくまで出発点で、後から個々のオプションを変更できます。
「最大」はフィルターなしで MSIL 暗号化をオンにするため、暗号化されるのは XML ルールまたは Obfuscation 属性で選択したメソッドだけです。名前空間や型の単位で暗号化するには、「コード暗号化」グループの「Msil Encryption」にフィルターを追加します。コード暗号化を参照してください。
レベルは、パブリックシンボルのリネーム、マップファイル、マージ、署名には影響しません。これらはアセンブリの配布方法によって決まるもので、そのためにセットアップコマンドが用意されています。