Skip to Content
新しいバージョン 12 を公開しました 🎉

代表的なワークフロー

単一のアプリケーションから、一緒に配布する一連のライブラリまで、プロジェクトを設定する代表的な 3 つの方法を紹介します。

単一のアプリケーションの保護

1 つのアセンブリを配布する場合や、ライブラリをマージしたくないアプリケーションの場合に使用します。

アプリケーションを追加する

.exe または .dll をキャンバスにドラッグするか、「+ アセンブリを追加」をクリックします。

保護レベルを選択する

コマンドパレットから「難読化: レベルを設定…」を実行し、出発点として「バランス」を選択します。プロパティパネルを開いて結果を確認し、必要に応じて別の文字列暗号化アルゴリズムを選択するなどの調整をします。

マップファイルを残す

プロパティパネルの「マップ ファイル」グループで「リネーム マップを書き出す」にチェックを付けます。マップがあれば、お客様から送られてきたスタックトレースをスタックデコーダーでデコードできます。マップはアプリケーションと一緒にせず、ビルドと一緒に保管してください。

実行して確認する

「プロジェクトを実行」をクリックします。「アクティビティ」パネルの「問題」タブと、ターゲットのカードの難読化スコアを確認します。次に、「実行 > 難読化されたアプリを実行」(Ctrl+F5、macOS では Cmd+F5)で保護されたアプリケーションを起動し、動作を試します。

アプリケーションがリフレクション、シリアル化、名前に基づくデータバインディングを使用している場合は、一部のシンボルの名前を維持する必要があります。それらは、「XML ルール」タブの XML ルールか、コード内の Obfuscation 属性で除外してください。

ライブラリのメイン実行可能ファイルへのマージ

実行可能ファイルとそのプライベートライブラリの代わりに、1 つのファイルを配布する場合に使用します。Internalize をオンにすると、マージされた型は内部型になるため、その名前も難読化できます。アセンブリのマージを参照してください。

すべてのアセンブリを追加する

実行可能ファイルと、マージするライブラリを、すべてターゲットとして追加します。

マージのセットアップを実行する

コマンドパレットから「難読化: メイン アセンブリへのマージを設定」を実行するか、グリッドで「マージを設定」をクリックします。ライブラリは実行可能ファイルのマージ入力になります。エンジンがマージできないアセンブリは、別のターゲットのまま残ります。

グラフを確認する

キャンバスでは、ライブラリが「マージ」というラベルの付いた線で実行可能ファイルに接続されています。グリッドでは、実行可能ファイルだけが行として表示され、件数はたとえば「1 ターゲット · 4 件マージ済み」となります。その行の「入力」タブを開くと、マージされたファイルを確認できます。

保護を設定して実行する

実行可能ファイルのレベルを選択し、プロジェクトを実行します。出力フォルダーには 1 つのアセンブリが書き出されます。

ライブラリのコードをマージせずに、リソースとして実行可能ファイルの中に格納するには、「入力」タブまたは依存関係のポップオーバーで、その種類を「埋め込み」に変更します。依存関係を参照してください。

パブリックシンボルのリネームによる一連のライブラリの難読化

フレームワークとその上に構築したアプリケーションのように、互いを呼び出す複数のアセンブリを配布し、パブリック API もリネームしたい場合に使用します。各アセンブリはほかのアセンブリの新しい名前を使う必要があるため、ターゲット同士でリネームマップを受け渡します。

アセンブリを追加する

すべてのライブラリと、それを使用するすべてのアプリケーションを、ターゲットとして追加します。

互いを使用するターゲットを接続する

各ライブラリについて、その右のアンカーから、そのライブラリを呼び出すターゲットの左のアンカーへドラッグし、「マップ ファイルを渡す」を選択します。これで、ライブラリが先に実行されてマップを書き出し、それを使用するターゲットがマップを読み込みます。

パブリック難読化のセットアップを実行する

「難読化: パブリック難読化を設定 (すべてのアセンブリ)」を実行するか、グリッドで「パブリック難読化を設定」をクリックします。すべてのターゲットに「obfuscate public」ルールが追加され、各ターゲットがリネームマップを書き出すようになります。依存関係にほかのターゲットを含むターゲットには、マップリンクが自動的に設定されます。

順序を確認する

グリッドで「フロー · ステップ」列と「後に実行」列を追加し、「フローでグループ化」をオンにします。各ライブラリが、そのマップを読み込むターゲットより前にあることを確認します。

実行する

プロジェクトを実行します。実行で生成されたマップファイルはすべて保管してください。スタックトレースのデコードや、同じバージョンのライブラリに対してアプリケーションの後のビルドを難読化するときに必要になります。

件数 1 の「Maps」タブを開いた CrossAssembly1App.dll の詳細。「From CrossAssembly1.dll」と示された項目 CrossAssembly1.dll.map.xml と、そのゴミ箱アイコンが表示されています件数 1 の「Maps」タブを開いた CrossAssembly1App.dll の詳細。「From CrossAssembly1.dll」と示された項目 CrossAssembly1.dll.map.xml と、そのゴミ箱アイコンが表示されています件数 1 の「Maps」タブを開いた CrossAssembly1App.dll の詳細。「From CrossAssembly1.dll」と示された項目 CrossAssembly1.dll.map.xml と、そのゴミ箱アイコンが表示されています

ライブラリのマップを読み込むアプリケーション

ライブラリが以前のビルドで難読化されていてプロジェクトに含まれていない場合は、それを使用する各ターゲットのプロパティパネルで、「その他のマップ ファイル」の「マップ ファイルを追加…」からそのマップを追加します。アセンブリ間のリネームを参照してください。

リネームマップと統計ファイルには、コードの元の名前が含まれています。ビルドの記録と一緒に保管し、アプリケーションと一緒に配布しないでください。

Babel Desktop 以外でのプロジェクトのビルド

Babel Desktop で保存したプロジェクトは MSBuild ファイルです。期待どおりに実行できるようになったら、MSBuild タスクを使ってビルドサーバー上でビルドします。フローエッジとマップリンクはターゲット依存関係として保存されるため、MSBuild も同じ順序でターゲットを実行します。

Last updated on