Dotfuscator 構成エディターは、アプリケーションで要素を、対象として選択する規則を指定する場合も、対象から除外する規則を指定する場合も、共通のインターフェイスを使用します。 規則エディターは、以下の操作について規則を設定するために使用されます。
- 名前の変更の対象除外規則
- 制御フロー難読の対象除外規則
- 文字列暗号化対象選択規則
- 除去トリガー メソッドの選択規則
- 除去の条件付き対象の選択規則
規則を作成するには、2 とおりの方法があります。 1 つ目は、アプリケーションのツリー ビューで個々の要素のチェック ボックスをオンにする方法です。 この操作によって、特定の要素を選択する単純な規則を作成できます。 2 つ目は、規則の編集ビューに "ノード" を追加する方法です。 この方法を使用すると、最初の方法の場合よりも高機能でカスタマイズ可能な規則を作成できます。 規則の種類に応じて正規表現などの複数の選択基準を使い分けることも可能になります。 また、この方法を使用すると、各規則で選択される項目をプレビューすることができます。
個々の要素の選択
アプリケーションのツリー ビューで、項目の隣にあるチェック ボックスをオンにして、個々の要素に対する選択規則を作成できます。 隣にあるチェック ボックスをオンにすることによって、アセンブリ、モジュール、型、メソッド、およびフィールドを選択できます。
アセンブリ
アプリケーションのツリー ビューの最上位ノードはパッケージまたはアセンブリを表します。 アセンブリ ノードのチェック ボックスをオンにすると、すべての子ノードのチェック ボックスもオンになります。 つまり、アセンブリを選択すると、アセンブリに含まれるすべての項目(モジュール、型、およびそのメンバー)を選択することになります。
モジュール
アプリケーションのツリー ビューでアセンブリ ノードの直下に表示されるノードは、アセンブリを構成するモジュールを表します(ほとんどの場合、各アセンブリに対して表示されるモジュールは 1 つです)。 モジュール ノードのチェック ボックスをオンにすると、すべての子ノードのチェック ボックスもオンになります。 つまり、モジュールを選択すると、モジュールに含まれるすべての項目("グローバル" メソッド、フィールド、型、およびそのメンバー)を選択することになります。
名前空間
名前空間ノードは、アプリケーションのツリー ビューでモジュール ノードの子ノードとして表示されます。 名前空間ノードのチェック ボックスをオンにすると、すべての子ノードのチェック ボックスもオンになります。 つまり、名前空間を選択すると、その名前空間に含まれるすべての項目(型およびメンバー)を選択することになります。
型
型ノードは、モジュール ノードまたは名前空間ノードの下に表示されます。 入れ子になっている型もこのレベルに表示され、型名の前に '/' 文字で区切られた親の型名が付けられます。 型ノードのチェック ボックスをオンにすると、作成している規則の種類に応じて、以下の 2 つのいずれかの状態になります。
名前の変更の対象除外規則を作成している場合、子ノードのチェック ボックスはオンになりません。 つまり、名前の変更の対象除外規則の場合、型はメンバーから独立して選択されます。 型ノードのチェック ボックスをオンにすると、チェック ボックスをオンにした型名のみ を名前の変更処理から除外する規則が生成されます。
その他の種類の規則を指定している場合は、すべての子ノードのチェック ボックスもオンになります。 つまり、その他の規則の場合、型を選択すると、その型によって定義されているすべてのメンバーを選択することになります。
メンバー
メンバーは、メソッド、フィールド、プロパティまたはイベントです。 メンバー ノードは通常は型ノードの下に表示されますが、"グローバル" メンバーの場合はモジュール ノードの下に表示されることもあります。 メンバー ノードのチェック ボックスをオンにすると、チェック ボックスをオンにしたメンバーを選択する規則が生成されます。
カスタム規則の作成
規則の編集ビューにノードを追加して、カスタム規則を作成できます。 規則の種類に応じて、正規表現や別の選択条件を規則に付加することができます。 規則を構成したら、ノードを右クリックし、[プレビュー]をクリックして規則の結果をプレビューできます。 規則で選択される項目は、アプリケーションのツリー ビューで網掛け表示になります。 以下のセクションでは、それぞれの種類の規則について個別に説明します。
名前空間による選択
名前空間の規則を作成すると、条件を満たす名前空間に属するすべての型とそのメンバーが選択されます。
名前空間名
名前空間の規則を作成するには、[名前空間の追加]ボタンをクリックし、[名前]ボックスに名前を入力します。 [正規表現]チェック ボックスがオンになっている場合、入力された名前は正規表現として解釈されます。このチェック ボックスがオフになっている場合は、入力された名前は文字どおりに解釈されます(したがって、この場合は条件を満たす名前空間が複数存在することはありません)。
名前空間の規則のノード
規則の編集ビューに表示される規則のノードは、その規則が正規表現であるかどうかを示す子要素を持っています。 その規則で選択される項目をプレビューするには、ノードを右クリックし、表示されるメニューから[プレビュー]を選択します。
型による選択
型の規則によって選択される対象は、以下のように、作成している規則の種類によって異なります。
名前の変更の除外規則を作成している場合、[型を除外する]チェック ボックスがオンになっていると、指定した型名のみが除外の対象として選択されます。メンバーは除外の対象になりません。
その他の種類の規則を作成している場合、それらの規則では 0 個以上の型およびそのメンバーが選択されます。 つまり、その他の規則の場合、型を選択すると、その型によって定義されているすべてのメンバーを選択することになります。
型名
型の規則を作成するには、[型の追加]ボタンをクリックし、[名前]ボックスに名前を入力します。 [正規表現]チェック ボックスがオンになっている場合、入力された名前は正規表現として解釈されます。このチェック ボックスがオフになっている場合は、入力された名前は文字どおりに解釈されます。 入れ子になっている型の場合、名前空間および親クラスの情報を含む完全修飾の型名を入力する必要があります。
型の属性指定子
型名に加えて、[属性指定子]ボックスの一覧に表示されている値を使用することにより、型の属性指定子に基づいて型を選択できます。 属性指定子の前に付いている '-' は、その属性の否定を意味します(つまり、指定した属性を持たないすべての型を選択します)。 一覧から複数の属性を選択することができます。複数の選択を行った場合に暗黙に適用される条件は、論理的に AND
で結合されます。 たとえば、一覧から +public と +abstract を選択することにより、パブリックかつ抽象的な型を選択できます。
属性の指定は、型名と論理的に AND
で結合されます。したがって、特定の属性のセットを持つすべての型を選択する場合、すべての型を選択するような正規表現(つまり、".*
")を型名として指定する必要があります。
[型を除外する]チェック ボックス
[型を除外する]チェック ボックスが有効になるのは、名前の変更の対象除外規則を作成している場合だけです。 このチェック ボックスがオンになっている場合、条件を満たす型名は名前の変更対象から除外され、除外される型のメンバーを選択する追加の規則を指定できるようになります。 このチェック ボックスがオフになっている場合、規則は、条件を満たす型のメンバーを選択しますが、型名自体は選択しません。 このように、メソッドとフィールドは難読化の対象から除外し、型名だけを難読化する名前の変更の除外規則を記述できます。
[派生型に適用する]チェック ボックス
[派生型に適用する]チェック ボックスが有効になるのは、名前の変更または不要コードの除去規則を作成している場合だけです。 このチェック ボックスがオンになっている場合、条件を満たす型の子クラスも規則によって名前変更または不要コードの除去から除外されます。 このように、継承関係にあるすべての階層を除外する名前の変更の除外規則を記述できます。
型の規則のノード
規則の編集ビューに表示される型の規則のノードは、その規則が正規表現かどうか、および規則と関連のある属性指定子が指定されているかどうかを示す子要素を持っています。 その規則で選択される型をプレビューするには、ノードを右クリックし、表示されるメニューから[プレビュー]を選択します。
このスクリーン ショットでは、すべての具象型(抽象型ではない型)の名前を名前変更の対象から除外する型の規則が定義されています。
メソッドによる選択
メソッドの規則は、型の規則によって限定されるので、規則の編集ビューでは型ノードの子として表示されます。 メソッドの規則は、(親の型の規則の条件を満たすすべての型のメソッドのうちで)条件を満たすすべてのメソッドを選択します。 サポートされる選択条件は、メソッド名、メソッド属性、および署名です。
メソッド名
メソッドの規則を作成するには、親である型の規則のノードを右クリックして、[メソッドの追加]をクリックし、[名前]ボックスに名前を入力します。 [正規表現]チェック ボックスがオンになっている場合、入力された名前は正規表現として解釈されます。このチェック ボックスがオフになっている場合は、入力された名前は文字どおりに解釈されます。
メソッドの属性指定子
メソッド名に加えて、[属性指定子]ボックスの一覧に表示されている値を使用することにより、メソッドの属性指定子に基づいてメソッドを選択できます。 属性指定の前に付いている '-' は、その属性の否定を意味します(つまり、指定した属性を持たないすべてのメソッドを選択します)。 一覧から複数の属性を選択することもできます。複数の属性を選択した場合に暗黙に適用される条件は、論理的に AND
で結合されます(つまり、選択されるメソッドのセットは、各属性指定子に一致するすべてのメソッドの共通部分です)。 たとえば、一覧から +public および +virtual を選択することにより、パブリックかつ仮想的なメソッドを選択できます。
属性の指定は、メソッド名および署名リストと論理的に AND
で結合されます。したがって、特定の属性のセットを持つすべてのメソッドを選択する場合、すべてのメソッドを選択するような正規表現(つまり、".*")をメソッド名として指定する必要があります。
メソッドの署名
メソッドを署名によって選択することもできます。 署名は、メソッドの戻り値の型とパラメーターの型を特定します。 メソッドの署名はメソッドの規則のスコープを縮小するので、署名に無関係にメソッドを選択する規則を作成する場合は、すべての署名(たとえば ".*")を選択する正規表現を指定する必要があります。 これが既定値です。
メソッドの規則のノード
規則の編集ビューに表示されるメソッド ノードは、その規則が正規表現かどうか、および規則と関連のある属性指定子および署名が指定されているかどうかを示す子要素を持っています。 その規則で選択される項目をプレビューするには、ノードを右クリックし、表示されるメニューから[プレビュー]を選択します。
このスクリーン ショットでは、メソッド名が "S" で始まる(すべての型の)すべてのパブリック メソッドの名前を選択するメソッドの規則が定義されています。
フィールドによる選択
フィールドの規則は、型の規則によって限定されるので、規則の編集ビューでは型ノードの子として表示されます。 フィールドの規則は、(親の型の規則の条件を満たすすべての型のフィールドのうちで)条件を満たすすべてのフィールドを選択します。 サポートされる選択条件は、フィールド名およびフィールドの属性です。
フィールド名
フィールドの規則を作成するには、親である型の規則のノードを右クリックして、[フィールドの追加]をクリックし、[名前]ボックスに名前を入力します。 [正規表現]チェック ボックスがオンになっている場合、入力された名前は正規表現として解釈されます。このチェック ボックスがオフになっている場合は、入力された名前は文字どおりに解釈されます。
フィールドの属性指定子
フィールド名に加えて、[属性指定子]ボックスの一覧に表示されている値を使用することにより、フィールドの属性指定子に基づいてフィールドを選択できます。 属性指定子の前に付いている '-' は、その属性の否定を意味します(つまり、指定した属性を持たないすべてのフィールドを選択します)。 一覧から複数の属性を選択することもできます。複数の属性を選択した場合に暗黙に適用される条件は、論理的に AND
で結合されます(つまり、選択されるフィールドのセットは、各属性指定子に一致するすべてのフィールドの共通部分です)。 たとえば、一覧から +public と +static を選択することにより、パブリックかつ静的なフィールドを選択できます。
属性の指定は、フィールド名と論理的に AND
で結合されます。したがって、特定の属性のセットを持つすべてのフィールドを選択する場合は、すべてのフィールドを選択するような正規表現(つまり、".*")をフィールド名として指定する必要があります。
フィールドの署名
フィールドを署名によって選択することもできます。 署名はフィールドの型を指定します。 フィールドの署名はフィールドの規則のスコープを縮小するので、タイプに無関係にフィールドを選択する規則を作成する場合は、すべての署名(たとえば ".*")を選択する正規表現を指定する必要があります。 これが既定値です。
フィールドの規則のノード
規則の編集ビューに表示されるフィールド ノードは、その規則が正規表現かどうか、および規則と関連のある属性指定子および署名が指定されているかどうかを示す子要素を持っています。 その規則で選択されるフィールドをプレビューするには、ノードを右クリックし、表示されるメニューから[プレビュー]を選択します。
このスクリーンショットでは、名前が "my" で始まるすべてのフィールド(すべての型)の名前を選択するフィールドの規則が定義されています。
プロパティによる選択
プロパティの規則は、型の規則によって限定されるので、規則の編集ビューでは型ノードの子として表示されます。 プロパティの規則は、(親の型の規則の条件を満たすすべての型のプロパティのうちで)条件を満たすすべてのプロパティを選択します。 サポートされる選択条件は、プロパティ名およびプロパティの属性です。
プロパティ名
プロパティの規則を作成するには、親である型の規則のノードを右クリックして、[プロパティの追加]をクリックし、[名前]ボックスに名前を入力します。 [正規表現]チェック ボックスがオンになっている場合、入力された名前は正規表現として解釈されます。このチェック ボックスがオフになっている場合は、入力された名前は文字どおりに解釈されます。
プロパティの属性指定子
プロパティ名に加えて、[属性指定子]ボックスの一覧に表示されている値を使用することにより、プロパティの属性指定子に基づいてプロパティを選択できます。 属性指定子の前に付いている '-' は、その属性の否定を意味します(つまり、指定した属性を持たないすべてのプロパティを選択します)。 一覧から複数の属性を選択することもできます。複数の属性を選択した場合に暗黙に適用される条件は、論理的に AND
で結合されます(つまり、選択されるプロパティのセットは、各属性指定子に一致するすべてのプロパティの共通部分です)。 たとえば、一覧から +public および +virtual を選択することにより、パブリックかつ仮想的なプロパティを選択できます。
属性の指定は、プロパティ名および署名リストと論理的に AND
で結合されます。したがって、特定の属性のセットを持つすべてのプロパティを選択する場合、すべてのプロパティを選択するような正規表現(つまり、"*.**")をプロパティ名として指定する必要があります。
プロパティの規則のノード
規則の編集ビューに表示されるプロパティの規則のノードは、その規則が正規表現かどうか、および規則に属性指定子が指定されているかどうかを示す子要素を持っています。 その規則で選択される項目をプレビューするには、ノードを右クリックし、表示されるメニューから[プレビュー]を選択します。
このスクリーンショットでは、名前が "C" で始まるすべてのパブリック プロパティ(すべての型)の名前を選択するプロパティの規則が定義されています。
イベントによる選択
イベントの規則は、型の規則によって限定されるので、規則の編集ビューでは型ノードの子として表示されます。 イベントの規則は、(親の型の規則の条件を満たすすべての型のフィールドのうちで)条件を満たすすべてのイベントを選択します。 サポートされる選択条件は、イベント名およびイベントの属性です。
イベント名
イベントの規則を作成するには、親である型の規則のノードを右クリックして、[イベントの追加]をクリックし、[名前]ボックスに名前を入力します。 [正規表現]チェック ボックスがオンになっている場合、入力された名前は正規表現として解釈されます。このチェック ボックスがオフになっている場合は、入力された名前は文字どおりに解釈されます。
イベントの属性指定子
イベント名に加えて、[属性指定子]ボックスの一覧に表示されている値を使用することにより、イベントの属性指定子に基づいてイベントを選択できます。 属性指定子の前に付いている '-' は、その属性の否定を意味します(つまり、指定した属性を持たないすべてのイベントを選択します)。 一覧から複数の属性を選択することもできます。複数の属性を選択した場合に暗黙に適用される条件は、論理的に AND
で結合されます(つまり、選択されるイベントのセットは、各属性指定子に一致するすべてのイベントの共通部分です)。 たとえば、一覧から +public と +static を選択することにより、パブリックかつ静的なイベントを選択できます。
属性の指定は、イベント名と論理的に AND
で結合されます。したがって、特定の属性のセットを持つすべてのイベントを選択する場合は、すべてのイベントを選択するような正規表現(つまり、".*")をイベント名として指定する必要があります。
イベントの規則のノード
規則の編集ビューに表示されるイベントの規則のノードは、その規則が正規表現かどうか、および規則に属性指定子が指定されているかどうかを示す子要素を持っています。 その規則で選択されるイベントをプレビューするには、ノードを右クリックし、表示されるメニューから[プレビュー]を選択します。
このスクリーンショットでは、名前が "G" で始まるすべてのイベント(すべての型)の名前を選択するイベントの規則が定義されています。
カスタム属性による選択
カスタム属性の規則は、型、メソッド、フィールド、プロパティまたはイベントの規則によって限定されるので、規則の編集ビューでは型、メソッド、フィールド、プロパティまたはイベントのノードの子として表示されます。 カスタム属性の規則は、親ノードによって選択されていて、かつ規則の条件を満たすカスタム属性が指定されているすべての項目を選択します。
カスタム属性名
カスタム属性の規則を作成するには、親である型、メソッド、フィールド、プロパティまたはイベントの規則のノードを右クリックして、[カスタム属性の追加]をクリックし、[名前]ボックスに名前を入力します。 [正規表現]チェック ボックスがオンになっている場合、入力された名前は正規表現として解釈されます。このチェック ボックスがオフになっている場合は、入力された名前は文字どおりに解釈されます。
[継承を可能にする]チェック ボックス
[継承を可能にする]チェック ボックスは、カスタム属性の規則を継承階層に適用する方法を制御します。 このチェック ボックスがオンになっている場合、オーバーライドするメソッド、プロパティ、イベント、および子の型も除外されます。
カスタム属性の規則のノード
規則の編集ビューに表示されるカスタム属性のノードは、その規則が正規表現であるかどうかを示す子要素を持っています。 カスタム属性の規則のノードでは、ノードを右クリックして、メニューから[プレビュー]オプションを選択することにより、その規則で選択される型、メソッド、フィールド、プロパティ、またはイベントをプレビューできます。
このスクリーン ショットでは、AttributeExample.MyAttribute という名前のカスタム属性が指定されているすべてのメソッドを選択するカスタム属性の規則が定義されています。
スーパータイプによる選択
スーパータイプの規則は、型の規則によって限定されるので、規則の編集ビューでは型ノードの子として表示されます。 スーパータイプ規則は、親の型の規則の条件に一致し、かつ指定したスーパータイプから派生する型のみが条件に一致するよう、型の規則のスコープを狭くします。
スーパータイプ名
スーパータイプの規則を作成するには、親である型の規則のノードを右クリックして、[スーパータイプの追加]をクリックし、[名前]ボックスに名前を入力します。 [正規表現]チェック ボックスがオンになっている場合、入力された名前は正規表現として解釈されます。このチェック ボックスがオフになっている場合は、入力された名前は文字どおりに解釈されます。
スーパータイプの規則のノード
規則の編集ビューに表示されるスーパータイプの規則のノードは、その規則が正規表現であるかどうかを示す子要素を持っています。 その規則で選択される型をプレビューするには、ノードを右クリックし、表示されるメニューから[プレビュー]を選択します。
このスクリーンショットでは、System.Attribute のスーパータイプであるすべての型を選択するスーパータイプ規則が定義されています。
規則の編集と削除
既存の規則を編集するには、規則の編集ビューで目的の規則をクリックします。 次に、ビューの下部にあるコントロールを使用して、ノードに関連する値(たとえば、名前、属性指定子リストなど)を編集します。
規則を削除するには、規則の編集ビューで目的の規則をクリックし、[削除]をクリックします。
規則での宣言による難読化の使用
規則のエディターでは、宣言による難読化がサポートされており、アプリケーションのツリー ビューにはすべての難読化属性(つまり、System.Reflection.ObfuscateAssemblyAttribute
および System.Reflection.ObfuscationAttribute
)の引数が表示されます。 アプリケーションのツリー ビューでは、難読化属性によって選択されている項目(型、メソッド、フィールド)は青色で表示されます。
次のスクリーン ショットでは、ObfuscationAttribute
を使用して、Class1 および Class2 のメソッドを除去トリガーとして指定しています。 また、このビューでは、各属性のプロパティと値が展開表示されています。
規則のプレビュー
規則の編集ビューで 1 つの規則の結果をプレビューするには、規則のノードをクリックして、[プレビュー]をクリックします。 規則で選択される項目は、アプリケーションのツリー ビューで網掛け表示になります。
規則の編集ビューで定義されている規則をすべて適用した場合の結果をプレビューするには、[プレビュー]ボタンをクリックします。 すべての規則を適用した場合に選択されるすべての項目が、アプリケーションのツリー ビューで網掛け表示になります。