Dotfuscator Community と Visual Studio について

PreEmptive Protection - Dotfuscator は、安全なソフトウェア開発ライフサイクルに容易に適合する、包括的な .NET アプリケーションの保護機能を提供します。 この機能により、デスクトップ、モバイル、サーバー、組み込みのアプリケーションを強化および保護し、余分なものを取り除くことで、企業秘密やその他の知的財産 (IP) を守り、違法コピーや偽造を減らし、改ざんと権限のないデバッグを防止できます。 Dotfuscator はコンパイル済みのアセンブリで動作し、追加のプログラミングやソース コードへのアクセスさえ不要です。

PreEmptive Protection - Dotfuscator

保護が必要な理由

知的財産 (IP) を保護することは重要です。 アプリケーションのコードに含まれる設計と実装の詳細は、IP であるとみなすことができます。 ただし、.NET Framework で構築されたアプリケーションには重要なメタデータと高度な中間コードが含まれており、多数存在する無料の自動化ツールのいずれかを使用するだけで、簡単にリバース エンジニアリングを実行できます。 リバースエンジニアリングを中断および停止させることで、許可されていない IP の漏えいを防ぎ、コードに企業秘密が含まれていることを示すことができます。 Dotfuscator は、元のアプリケーションの動作を維持しながら、.NET アセンブリを難読化し、リバース エンジニアリングを防止します。

アプリケーションの整合性を保護することも重要です。 リバース エンジニアリングだけでなく、犯罪者がアプリケーションの違法コピーを作成したり、実行時のアプリケーションの動作を変更したり、データを操作したりしようとすることもあります。 Dotfuscator は、改ざん、サード パーティによるデバッグ、ルート化されたデバイスを含め、許可のない使用を検出し、それに対応する機能をアプリケーションに注入します。

保護されたソフトウェア開発ライフサイクルに Dotfuscator が適合するしくみの詳細については、PreEmptive Solution の「SDL App Protection」(SDL アプリの保護) のページを参照してください。

Dotfuscator Community について

Microsoft Visual Studio のコピーには、PreEmptive Protection - Dotfuscator Community の無料ライセンスが含まれています。 (この無料バージョンは、以前は Dotfuscator Community Edition または Dotfuscator CE と呼ばれていました。)Visual Studio に含まれている Dotfuscator Community のバージョンをインストールする方法の手順については、インストールに関するページを参照してください。

Dotfuscator Community は、広範なソフトウェアの保護と強化のサービスを開発者、アーキテクト、およびテスト担当者に提供します。 .NET の難読化および Dotfuscator Community に含まれるその他のアプリケーションの保護機能の例を以下に挙げます。

  • 識別子の名前の変更により、コンパイル済みアセンブリのリバース エンジニアリングをさらに難しくします。
  • 改ざん防止機能により、改ざんされたアプリケーションの実行が検出され、改ざんされたセッションが終了または対処されます。
  • デバッグ防止機能により、実行中のアプリケーションに対するデバッガーの添付ファイルが検出され、デバッグ セッションが終了または対処されます。
  • ルート化されたデバイスの防止機能により、そのようなルート化された Android デバイスで実行されているアプリケーションが検出され、そのデバイスでのセッションが終了または対処されます。
  • アプリケーションの有効期限の動作は、"有効期限" の日付をエンコードし、期限切れのアプリケーション セッションを終了します。

お客様のアプリケーション保護戦略にどのように適合するかを含めた、これらの機能の詳細については、機能に関するページを参照してください。

Dotfuscator Community には、すぐに利用できる基本的な保護機能が用意されています。 Dotfuscator Community の登録済みユーザーと、PreEmptive Protection - Dotfuscator Professional のユーザー、および世界トップレベルの .NET Obfuscator のユーザーは、さらに多くのアプリケーションの保護対策を利用できます。 Dotfuscator の拡張方法については、アップグレードに関するページを参照してください。

はじめに

Visual Studio から Dotfuscator Community の使用を開始するには、検索ボックス (Ctrl + Q) に dotfuscator と入力します。

  • Dotfuscator Community が既にインストールされている場合は、検索ボックス[メニュー] 見出しの下に Dotfuscator Community を開始するオプションが表示されます。 詳細については、Dotfuscator Community の完全なユーザー ガイドの概要ページを参照してください。
  • Dotfuscator Community がまだインストールされていない場合は、検索ボックス[個別のコンポーネント] 見出しに、代わりに [PreEmptive Protection - Dotfuscator のインストール] が表示されます。 詳細については、インストールに関するページを参照してください。

最新バージョンの Dotfuscator Community も、preemptive.com の Dotfuscator Downloads ページからダウンロードできます。

Dotfuscator Community 5 からアップグレードする

PreEmptive Protection - Dotfuscator Community 6 にアップグレードする方法について学習します。

Visual Studio のインストール履歴とバージョンによっては、現在、以前のメジャー バージョンである Dotfuscator Community 5 を実行している場合があります。 その場合は、コードに最新の保護手段が確実に付与されるようにすることが重要であるため、アップグレードする必要があります。 アップグレードは無料でご利用いただけます。

この記事では、現在のバージョンを確認する方法、必要に応じてバージョン 6 にアップグレードする方法、および 2 つのバージョン間で置き換えられたか削除された機能について説明します。

Dotfuscator のバージョンを特定する

実行している Dotfuscator のバージョンが不明な場合は、次のオプションのいずれかを実行してバージョンを特定することができます。

  • Visual Studio の [ツール] メニューに移動し、[PreEmptive Protection - Dotfuscator Community] を選択して、グラフィカル ユーザー インターフェイス (GUI) を起動します。

    Dotfuscator GUI から [ヘルプ] メニューを開き、[バージョン情報] を選択して [バージョン情報] 画面を表示します。

    この画面に Dotfuscator のバージョンが一覧表示されます。

  • コマンドライン インターフェイス (Xamarin アプリなど) を使用してビルドに Dotfuscator を統合している場合は、ビルド ログで次の例のような行を確認することもできます。

    Dotfuscator Community Version 5.42.0.9514-e0e25f754
    

    このテキストを表示するには、ビルドの詳細度を上げることが必要になる場合があります。 Visual Studio については、詳細設定に関するセクションを参照してください。

最初のドット (.) の前のバージョンの最初の整数は、Dotfuscator のメジャー バージョンを示しています。 最初の整数が 5 である場合は、このページのアップグレード手順を行い、最新の Dotfuscator 6 機能と保護更新プログラムを利用できるようにする必要があります。

アップグレード方法の説明

このセクションには、Dotfuscator Community の一般的な使用をバージョン 5 からバージョン 6 にアップグレードする一連の手順が含まれています。

Dotfuscator 6 をインストールする

Dotfuscator Community は Visual Studio の拡張機能として配布されます。 Dotfuscator 6 をインストールする手順は、ご利用の Visual Studio のバージョンによって異なります。

  • Visual Studio 2019 Dotfuscator Community 6 は、新しいバージョンの Visual Studio 2019 (バージョン 16.10.0 以降) に含まれています。 最新バージョンに Visual Studio 2019 を更新します。 Visual Studio を更新すると、Dotfuscator Community 5 のインストールが Dotfuscator Community 6 に自動的にアップグレードされます。

    • Dotfuscator をまだインストールしていない場合は、まず Visual Studio を更新してから、「Installation」(インストール) を参照してください。

    • Visual Studio のリリースに加えて、Dotfuscator のダウンロード ページからいつでも最新バージョンの Dotfuscator Community を取得できます。

  • Visual Studio 2017 このバージョンの Visual Studio は、Dotfuscator Community 5 にのみ付属しています。 しかし、Dotfuscator のダウンロード ページに移動し、適切なダウンロード リンクを選択することで、Dotfuscator Community 6 をインストールまたはこれにアップグレードすることができます。

    ダウンロードした .vsix ファイルを実行し、画面の指示に従って、Dotfuscator Community 6 を Visual Studio にインストールします。 既存の Dotfuscator Community 5 のインストールもアップグレードされます。

  • 以前のバージョンの Visual Studio Dotfuscator Community 6 は、これらのバージョンの Visual Studio ではサポートされていません。 新しいバージョンの Visual Studio にアップグレードするか、Dotfuscator Community から Dotfuscator Professional にアップグレードすることをお勧めします。

以前に Dotfuscator Community 5 を登録していた場合は、Dotfuscator Community 6 を初めて実行するときに、その登録が自動的に変換されます。

CLI へのパスを更新する

以前に Dotfuscator 5 のコマンドライン インターフェイス (CLI) を使用してアプリを保護していた場合は、どのプロジェクトでも CLI へのパスを更新し、それを参照するスクリプトを作成する必要があります。 これには、Dotfuscator Community の Xamarin 統合を使用するプロジェクトが含まれます。

Dotfuscator の CLI へのパスが無効になる場合がある理由は、Community Dotfuscator でインストールされたいくつかの実行可能ファイルの名前が Dotfuscator 6 で変更されたためです。 この変更により、これらの実行可能ファイル名が Dotfuscator Community と Dotfuscator Professional で同じになります。

実行可能ファイル Dotfuscator 5 Dotfuscator 6
GUI dotfuscator.exe dotfuscatorUI.exe
CLI dotfuscatorCLI.exe dotfuscator.exe

Note

また、Dotfuscator CLI は Visual Studio のインストール ディレクトリにインストールされているため、Visual Studio のメジャー バージョン間でアップグレードする場合や、Visual Studio エディションを切り替える場合に、CLI パスが無効になることがあります。 以下に一覧表示されている現象と解決策もこのシナリオに適用されます。

ビルドで無効な Dotfuscator CLI パスが使用されている場合は、次のいずれかの例のようなエラーが発生するおそれがあります。

'"[...]\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe"' is not recognized as an internal or external command, operable program or batch file.

The command ""[...]\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe" Dotfuscator.xml" exited with code 9009.

When the DotfuscatorXamarinEnabled property is 'true', the Dotfuscator command line interface specified by DotfuscatorXamarinCliPath ('[...]\DotfuscatorCE\dotfuscatorCLI.exe') must exist.

正しい CLI パスを使用するようにビルドを更新するには、次のようにします。

  1. Visual Studio の [ツール] メニューに移動し、[PreEmptive Protection - Dotfuscator Community] を選択して、Dotfuscator Community GUI を起動します。

  2. Dotfuscator Community GUI で、[ツール] メニューに移動し、[Dotfuscator コマンド プロンプト] を選択します。

  3. 開いたコマンド プロンプトで、「where dotfuscator.exe」と入力します。 後で参照するために、プレーン テキスト ドキュメントに表示されている最初のパスをコピーします。 このパスは、Dotfuscator Community 6 の CLI への新しいパスです。

  4. ビルド システムに応じて、プロジェクトまたはビルド構成を開きます。

    • Visual Studio のプロジェクトでは、プロジェクト ファイル (.csproj.vbproj、または .fsproj) をプレーンテキストとして開きます。 Visual Studio でプロジェクト ファイルを開きます

    • 以前に Dotfuscator Community の Xamarin 統合を使用して Xamarin アプリを保護している場合は、Dotfuscator が個別の各アプリ プロジェクト (MyProject.Android.csprojMyProject.iOS.csproj など) に別個に統合されていて、共有ライブラリ プロジェクトには統合されていないことを思い出してください。 Dotfuscator が現在使用されているすべてのアプリ プロジェクトを更新します。

  5. Dotfuscator Community 5 の CLI への古いパスが使用されているプロジェクトまたはビルド構成内の場所を見つけます。 これは通常、dotfuscatorCLI.exe で終わるパスです。

    • Dotfuscator Community の Xamarin 統合を使用してプロジェクトを更新する場合、古いパスは <DotfuscatorXamarinCliPath></DotfuscatorXamarinCliPath> のタグの間に配置されます。
  6. 手順 5 で見つかった古いパスを、手順 3 でメモした新しいパスに置き換えます。

    古いパスのいずれかが絶対パスでない場合は、コンテキストに基づいて新しいパスを適切に調整する必要があります。 以下の例の場合、VSInstallDir 環境変数が古いパスで使用されていたため、対応する新しいパスでも同じになるはずです。

    • 手順 3 の新しいパス: C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscator.exe
    • プロジェクト ファイルの古いパス: %VSInstallDir%\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe
    • プロジェクト ファイルの新しいパス: %VSInstallDir%\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscator.exe
  7. Git などのソース管理システムを使用している場合は、手順 6 の変更がそのシステムに確実に反映されるようにします。 これらの変更は、ご自分のシステムと組織に適している場合があるため、チームの他のメンバーにも伝えてください。

警告

Dotfuscator 5 では dotfuscator.exe によりグラフィカル ユーザー インターフェイス (GUI) が参照されますが、Dotfuscator 6 ではコマンド ライン インターフェイス (CLI) が参照されるため、複数のコンピューター間で共有されているビルド スクリプトを更新する際にはご注意ください。

Dotfuscator 6 用に更新されたスクリプトを実行する Dotfuscator 5 がインストールされているコンピューターでは、意図したコマンド ライン インターフェイスではなく、グラフィカル ユーザー インターフェイスがスクリプトで起動されます。 これにより、Dotfuscator の保護が適用されていなくてもビルドが成功する可能性があります。つまり、出力パッケージは保護されません。

それ以外の場合は、代わりにビルド エラーが発生するおそれあります。

これらのシナリオを回避するには、同時にすべてのコンピューターとビルド スクリプト全体で Dotfuscator Community をバージョン 5 からバージョン 6 にアップグレードします。

Dotfuscator 構成ファイルをアップグレードする

Dotfuscator 6 より前に作成された ''すべて'' の Dotfuscator 構成ファイル (Dotfuscator.xml など) をアップグレードする必要があります。

古い構成ファイルで Dotfuscator CLI を実行しようとすると、次の例のようなエラーが発生します。

Dotfuscator Engine Initialization error: PreEmptive Analytics, Authenticode signing, and the Introduce Explicit Method Overrides setting are no longer supported. Please open your Dotfuscator config in the Config Editor which automatically upgrades it.

重要

このエラーが発生すると、前述の機能を使用していない場合でも、構成ファイルをアップグレードする必要があります。

構成ファイルをアップグレードするには、次のようにします。

  1. Visual Studio の [ツール] メニューに移動し、[PreEmptive Protection - Dotfuscator Community] を選択して、グラフィカル ユーザー インターフェイス (GUI) を起動します。

  2. 問題の Dotfuscator 構成ファイルを開きます (Ctrl + O)。

  3. [ビルド出力] タブに次のメッセージが表示されます。

    PreEmptive Analytics, Authenticode signing, and the Introduce Explicit Method Overrides setting are no longer supported. The associated settings have been removed. Please save your upgraded Dotfuscator config.

  4. 更新された Dotfuscator 構成ファイルを保存します (Ctrl + S)。

  5. Git などのソース管理システムを使用している場合は、Dotfuscator 構成ファイルに対する変更がそのシステムに確実に反映されるようにします。 これらの変更は、ご自分のシステムと組織に適している場合があるため、チームの他のメンバーにも伝えてください。

Xamarin 統合を更新する

Dotfuscator Community 5 を Xamarin プロジェクトに統合した場合、手順の 1 つとして、PreEmptive.Dotfuscator.Xamarin.targets などのカスタム MSBuild ターゲットとタスクをダウンロードする必要がありました。 これらのターゲットとタスクは Dotfuscator Community 6 で更新されているため、古いバージョンを新しいバージョンに置き換える必要があります。

Xamarin 統合ファイルを更新するには、次のようにします。

  1. これらのファイルを最初にダウンロードしたディレクトリを見つけます。 指示に示されている例では、PreEmptive.Dotfuscator.Xamarin という名前のサブディレクトリが使用されていますが、ファイルを別のディレクトリにダウンロードした可能性があります。また、Dotfuscator に関連付けられていないファイルも含まれている可能性があります。

  2. 手順 1 で見つかったディレクトリで、Dotfuscator Xamarin 統合に関連するファイルを削除します。

  3. 次のユーザー ガイドのセクションの現在のバージョンにリンクされている ZIP ファイルをダウンロードします: Dotfuscator の MSBuild ターゲットとタスクのカスタム セットをダウンロードする

  4. 手順 1 に示されているのと同じディレクトリに、ZIP ファイルの内容を抽出します。

  5. Git などのソース管理システムを使用している場合は、古いファイルの削除と新しいファイルの追加がそのシステムに確実に反映されるようにします。 システムの種類によっては、これらの変更は、置き換えではなく、ファイルの内容の変更として示されることがあります。 これらの変更は、ご自分のシステムと組織に適している場合があるため、チームの他のメンバーにも伝えてください。

このページの他のサブセクションも Xamarin プロジェクトに適用されるため、このページの残りの手順を必ず確認してください。

属性ライブラリへの参照を更新する

Dotfuscator では、ソース コードで .NET 属性を使用して特定の機能を構成できます。 プロジェクトでこのような属性を使用していた場合は、Dotfuscator 6 の変更に対処するためにそれらを更新する必要があることがあります。

難読化属性

難読化属性に変更はありません。 これらの属性は .NET 基本クラス ライブラリで定義されており、Dotfuscator Community 6 で引き続きそれらが使用されます。

チェック属性

チェック属性を含むライブラリが変更されました。 Dotfuscator Community 5 では、これは Dotfuscator 自体と共にファイルとして配布されました。 Dotfuscator Community 6 以降では、代わりにパブリック NuGet として配布されます。

まだ古い場所を参照する Visual Studio プロジェクトをビルドしようとすると、次の例のようなエラーが表示される場合があります。

The type or namespace name 'PreEmptive' could not be found (are you missing a using directive or an assembly reference?)

The type or namespace name 'TamperCheckAttribute' could not be found (are you missing a using directive or an assembly reference?)

この警告も表示される場合があります。

Could not resolve this reference. Could not locate the assembly "PreEmptive.Attributes". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.

新しい場所を使用するためにプロジェクトを更新するには、次のようにします。

  1. PreEmptive.Attributes.dll へのプロジェクトのアセンブリ参照を削除します。

  2. プロジェクトに NuGet パッケージ参照 PreEmptive.Protection.Checks.Attributes を追加します。 パッケージは、既定の NuGet フィード (nuget.org) で入手できます。

各チェック属性の ExtendedKey パラメーターも削除されています。 これらのパラメーターは、Dotfuscator Community 5 では無視されましたが、それでもソース コードで使用していた場合は、プロジェクトをコンパイルするためにこれらの使用を削除します。

インストルメンテーション属性

インストルメンテーション属性は、Dotfuscator 5 で PreEmptive Analytics 機能を構成するために使用されました。 しかし、Dotfuscator 6 では PreEmptive Analytics が削除されています。「削除された機能」のサブセクション「PreEmptive Analytics」を参照してください。 その結果、インストルメンテーション属性も削除されました。

インストルメンテーション属性を使用した Visual Studio プロジェクトをビルドしようとすると、「チェック属性」に記載されているのと同じ種類のエラーと警告が表示される場合があります。ただし、属性名は異なります (たとえば、TamperCheckAttribute ではなく FeatureAttribute)。

インストルメンテーション属性の使用を含む既にビルドされたアセンブリで Dotfuscator を実行しようとすると、次の例のようなエラーが発生します。

The PreEmptive.Attributes.FeatureAttribute attribute (annotating SomeNamespace.SomeType::SomeMethod) is not recognized by this version of Dotfuscator.

これらの問題を解決するには、インストルメンテーション属性のすべての使用をソース コードから削除します。 また、属性を定義したライブラリ (PreEmptive.Attributes.dll) へのアセンブリ参照も削除する必要があります。 (このライブラリで定義されているチェック属性も使用していた場合、それらは移動されたため、上記の「チェック属性」を参照してください)。

削除済みの機能

Dotfuscator Community 6 には、Dotfuscator Community 5 からの破壊的変更が導入されています。 Dotfuscator Community 5 を使用しているユーザー向けに、このセクションでは、ビルドの変更が必要になるか、Dotfuscator の出力に影響を与える可能性がある変更に対処する方法を説明します。

変更の完全な一覧は、変更ログで確認できます。

PreEmptive Analytics

Dotfuscator 6 では、チェックの遠隔測定を含め、PreEmptive Analytics はサポートされていません。 しかし、チェック自体 (アプリケーション通知チェック アクションを含む) は引き続きサポートされています。

Dotfuscator 6 を使用するには、 構成ファイルをアップグレードして PreEmptive Analytics の設定を削除します。

コード内の属性を使用して PreEmptive Analytics を構成していた場合は、Dotfuscator 6 でこれらのアセンブリを保護する前に、ソース コードからそれらを削除し、入力アセンブリをリビルドします。

チェックで無効な状態が検出されたとき (改ざんが検出されたときなど) にチェックの遠隔測定を使用して報告していた場合は、インシデントを Azure Application Insights または任意の別のサービスに報告するカスタム アプリケーション通知に置き換えることができます。

サポートされていないアプリケーションの種類

Dotfuscator 6 では、次のアプリケーションの種類がサポートされなくなりました。

  • Windows Phone
  • WinRT (Windows 8 アプリ)
  • Silverlight
  • Unity (ゲーム エンジン)

さらに、ユニバーサル Windows プラットフォーム (UWP) アプリは、Xamarin シナリオでのみサポートされます。

他の種類の UWP アプリを保護するには、Dotfuscator Professional にアップグレードし、「Protect Your App」(アプリを保護する) の手順に従います。

サポートされていない入力

Dotfuscator Community では、ユニバーサル Windows Platform (UWP) .appx パッケージが入力としてサポートされなくなりました。 Xamarin 統合を使用して、UWP をターゲットとする Xamarin アプリは引き続き保護できます。 他の種類の UWP アプリを保護するには、Dotfuscator Professional にアップグレードし、「Protect Your App」(アプリを保護する) の手順に従います。

また、Silverlight はサポートされなくなったため、.xap パッケージを入力として使用できなくなりました。

明示的なメソッドのオーバーライドを導入する

明示的なメソッドのオーバーライドを導入する名前変更オプションが、Dotfuscator から削除されました。 Dotfuscator 6 を使用するには、構成ファイルをアップグレードして、この設定を削除します。

すべてのドキュメント

Dotfuscator Community ユーザー インターフェイスの使用を開始する方法を含めた、詳細な使用方法の説明については、Dotfuscator Community の完全なユーザー ガイド (preemptive.com) を参照してください。