スマート難読化
スマート難読化は進行中の取り組みの 1 つで、自動的に既知の API 使用パターンおよびアプリケーションの種類を識別し、難読化規則を適用しようとするものです。
スマート難読化規則は、組み込みの名前の変更対象除外規則にとてもよく似ていますが、単純な正規表現では表せない状況のためにあります。
これの最も簡単な例は、Dotfuscator が、enum
メンバーのいずれかで ToString()
が呼び出されたことを確認したときに、そのメンバーを除外するものです。
ユーザーが enum
メンバーで ToString()
を呼び出している場合には、その呼び出しに元の名前を持たせたいでしょう。
カスタム対象除外規則のメカニズムを使用して、この状況を表現するために考え得る方法はありません。
現在の実装では、次のようないくつかの共通のテクノロジやパターンを使用するアプリケーションおよびライブラリを認識できます。
- Windows Presentation Foundation (WPF) (アセンブリに対して XAML の変換が有効な場合は無効)
- Windows Communication Foundation (WCF)
- Windows Workflow
- Windows Cardspace
- データバインドされた Windows フォーム コントロール
- 文字列として使用される列挙型の値
- VB アプリケーションの遅延呼び出し
- カスタム シリアル化
- Web サービス
- Silverlight(アセンブリに対して XAML の変換が有効な場合は無効)
- その他
上記のようなアプリケーションの種類の場合、Dotfuscator の名前の変更機能および除去機能は、要素の名前を変更したり要素を削除したりすることによって出力アプリケーションが壊れる状況を特定できるよう、最善の努力をします。 そのため、ユーザーが構成を追加しなくても、名前の変更および除去を自動的に回避できます。
スマート難読化規則は静的分析を使用して、名前の変更から除外したり、除去のエントリ ポイントとして使用する必要のある要素を検出します。 このような場合、規則は警告を発し、[スマート難読化]タブに表示します。 規則は処置を取る必要があることは認識できますが、静的分析がもたらす情報は十分でないため、どの特定操作を行うかを判断できないことがあります。 このような場合、規則は警告を発し、[スマート難読化]タブに表示します。
発生し得る警告が非常に多数あります。そのような警告のほんの一例を以下に示します。
Method Namespace.ContextMenu::void OnApplyTemplate() に FrameworkElementRule フラグ付きのものがあります。理由:System.Windows.FrameworkElement::FindName に指定する可能性のある name 引数を調べて、参照される要素を手動で除外します。
ユーザーは、単に次の指示に従ってください。ContextMenu
クラスを探して、OnApplyTemplate()
メソッドを調べます。そのメソッド内で FindName(string)
を呼び出しているすべての場所を検出し、その文字列が、手動で除外される必要のある入力のプロパティに相当するかどうかを判断します。
Dotfuscator では、スマート難読化を無効にできます。 スマート難読化は既定で有効に設定されており、ほとんどの場合は有効にしておく必要があります。 ただし、ユーザーが、もっと積極的な難読化を行ってもアプリケーションを損なわないと確信している場合には無効にすることができます。 無効にする方法はいくつかあります。
<smartobfuscation>
セクションの<option>
設定をdisable
にする。- Visual Studio UI のプロジェクト プロパティ ダイアログを使用する。
- 構成エディターの[設定]タブを使用する。
Dotfuscator では、スマート難読化レポートの詳細を制御することができます。 すべての操作と警告、または警告のみをレポートするか、まったくレポートしないかを選択できます。 レポートのレベルを設定する方法はいくつかあります。
- 構成ファイルの
<smartobfuscationreport>
要素に verbosity 属性を設定する。 - Visual Studio UI の プロジェクト プロパティ ダイアログを使用する。
- 構成エディターの[設定]タブを使用する。
Dotfuscator では、スマート難読化レポートを表示するだけでなく、ファイルに保存することができます。 以下のいずれかの場所でファイルのパスを指定することにより、レポートを保存するよう Dotfuscator に指示することができます。
- 構成ファイル内の
<smartobfuscationreport>
要素内の file 要素。 - Visual Studio UI の プロジェクト プロパティ ダイアログを使用する。
- 構成エディターの[設定]タブを使用する。
Dotfuscator は同じ名前の既存のスマート難読化レポートが検出された場合には、自動的にそのレポートの名前を変更してから、新しいレポートで既存レポートを上書きします。 この動作を行わせたくない場合、Dotfuscator が既存のレポートを上書きする前に名前を変更しないように指示するには、いくつかの方法があります。
- 構成ファイルで、
<smartobfuscationreport>
要素の overwrite 要素を true に設定する。 - Visual Studio UI の プロジェクト プロパティ ダイアログを使用する。
- 構成エディターの[設定]タブを使用する。
スマート難読化レポート
Dotfuscator は、スマート難読化処理でフラグ付けされたすべての項目を一覧表示するスマート難読化レポートを XML 形式で生成します。 レポートの内容はスマート難読化レポートの詳細レポートの詳細設定が警告のみまたはなしに設定されていると、スマート難読化でフラグ付けされた項目はレポートから除外されます。 各エントリはスマート難読化によってフラグ付けされた 1 つの項目を表し、項目が何で、なぜ除外されたかの説明と、フラグ動作が警告であったか通知であったかを示す属性も示されます。
スマート難読化レポートの要素は、割り当てファイルおよび除去レポートの要素と類似しています。 以下に、注意する必要のある点を示します。
- レポートには項目にフラグを付けた規則の名前、項目の ID、行われた動作、およびその動作の理由が含まれます。
- フラグ付けされた項目の ID は、項目の種類(型、メソッド、フィールド、プロパティなど)および完全な署名によって指定されます。
- 型名では、入れ子になったクラスの名前は
/
文字で親と区切られます。 - コンストラクターには
.ctor
という名前が付けられますが、(静的初期化子、クラス コンストラクターなどとも呼ばれる)静的コンストラクターには.cctor
という名前が付けられます。