.NET 用に作成されたプログラムは、リバース エンジニアリングが簡単です。 .NET アプリケーションは、MSIL(Microsoft Intermediate Language)と呼ばれる高度な、表現的ファイル構文にコンパイルします。これには、メソッド名と変数名が含まれており、簡単にソースの形式に逆コンパイルすることができます。
攻撃者は自由に利用できる逆コンパイラを使用して、あらゆる .NET アプリケーションのソースや、公開しているソフトウェアのライセンス コード、コピー保護メカニズム、所有権を有するビジネス ロジックなどを、合法的であるかどうかは別として、簡単に見ることができます。 ソフトウェア アプリケーションの詳細を隅々まで調べることができるため、セキュリティ上の欠陥を探して利用したり、ユニークなアイデアを盗んだり、機能をクラックすることなども可能です。
オプションはこれだけではありません。 難読化は、アセンブリ内のシンボルの名前をシームレスに変更する技法であり、その他にも逆コンパイラを妨害する対策を備えています。 難読化を正しく適用すると、アプリケーションを変えることなく、逆コンパイルに対する保護を格段に高めることができます。
難読化ツールを判読可能なプログラム命令に対して適用すると、その出力を人間が解釈できなくなるほか、その人が使った逆コンパイラも機能しなくなるという副次的な効果が得られます。 実行可能ロジックは保持されたまま、リバース エンジニアリングの意味が不明確になります。 その結果、リバース エンジニアリングを試みると、変換があいまいなために失敗します。 厳重な難読化を行うと、逆コンパイルの可能性が無数になり、そのうちのいくつかを再コンパイルすると、間違ったロジックが生成されることになります。 計算機械である逆コンパイラには、どれが正しい意味に再コンパイルされるかを認識する手段はありません。 人間は、ロジックを追うのが非常にたいへんな逆コンパイル アルゴリズムを自動化するため、逆コンパイラを記述し、使用します。 逆コンパイラを混乱させる難読化プログラムは、逆コンパイラと同じことを行おうとする人間を思いとどまらせる効果があると言って間違いありません。
難読化レイヤー以外の保護レイヤーも利用可能です。 保護レイヤーの 1 つである[チェック]では、攻撃と推定される操作(改ざん、デバッグ、ルート化されたデバイスでの実行など)を事前に検出し、事前定義されている動作または独自のロジックで応答することができます。 これらすべての保護が連携することで、アプリケーションはリバース エンジニアリングや改変が非常に困難になります。
コンパイル後の保護
重要なのは、Dotfuscator は「コンパイル後」のツールである、つまり既にコンパイルされた .NET アセンブリ(.dll および .exe ファイル)を保護するのだということを理解することです。 開発環境や開発ツールは、保護に対応させるために変更されることはありません。また、ソース コードは、いかなる方法でも変更されず、読み取られることすらありません。 保護されたアセンブリは、機能上、従来のアセンブリと同等であり(意図的に変更された場合を除く)、共通言語ランタイム(CLR)で実行すると、結果は同じになります。 (ただし、逆は当てはまりません。難読化されたアセンブリを厳密に逆コンパイルできる場合でも、元のソース コードと比較すると、意味に重大な格差があります。)
次の図は、Dotfuscator を使用する場合と使用しない場合の典型的なビルド処理の流れを示しています。
上の図に示すように、アプリケーションは正常にコンパイルされ、コンパイル後のアセンブリは Dotfuscator によって保護されます。 Dotfuscator はアセンブリを入力として受け取り、構成設定を通じて保護を実行し、出力としてアセンブリの保護されたバージョンを生成します。
作業の開始
Dotfuscator Professional の使用を開始するには、まず開発用コンピューターにインストールしてください。
- Windows コンピューターの場合は Windows インストーラー(
.msi
)を使用します。 - macOS および Linux コンピューターの場合は、NuGet パッケージを使用します。
インストールが完了したら、アプリケーションの保護を参照してください。
保護されたアプリをリリースする前に
保護されたアプリまたはライブラリをリリースする前に、リリース チェックリストを見直してください。 このチェックリストでは、保護されたソフトウェアのリリースの一環として考慮すべきトピックをすべてまとめています。