カスタム属性を使用した宣言による難読化
.NET Framework バージョン 2.0 で、アセンブリの自動難読化を容易にするための 2 つの新しいカスタム属性が用意されました。これらの属性により、構成ファイルを設定する必要がなくなりました。このセクションでは、Dotfuscator でこれらの属性を使用する方法を概説します。ここでの説明は、カスタム属性の基本的な使用方法や開発言語でのカスタム属性の適用方法を理解していることを前提としています。
System.Reflection.ObfuscateAssemblyAttribute
この属性はアセンブリ レベルで使用され、Dotfuscator に対してアセンブリ全体の難読化方法を指示します。AssemblyIsPrivate プロパティを false に設定すると、Dotfuscator はそのアセンブリをライブラリ モードで実行します。このプロパティを true に設定すると、Dotfuscator はそのアセンブリをライブラリ モードでは実行せず、パブリックの型やメンバなどを対象として可能な範囲で最大限の名前変更を行います。
System.Reflection.ObfuscationAttribute
この属性は型とそのメンバを対象として使用され、Dotfuscator に対してその型やメンバの難読化方法を指示します。
Feature プロパティ
この文字列プロパティの既定値は "all" です。このプロパティは、複数ある難読化の変換処理を個別に構成できるようにするために提供されています。それぞれ異なる機能文字列を持つ ObfuscationAttribute を 1 つの対象にタグ付けすることができます。
Dotfuscator は機能文字列の "default" と "all" を "renaming" に対応付けています。
次の一覧は、Dotfuscator が認識するその他の機能文字列をまとめたものです。
機能文字列 | 構成される処理 |
---|---|
renaming | 属性で構成される処理は名前変更 |
controlflow | 属性で構成される処理は制御フローの難読化 |
stringencryption | 属性で構成される処理は文字列の暗号化 |
trigger | 属性で構成される処理は、属性が指定された対象をエントリ ポイントとしてマークすることによる不要コードの除去 |
conditionalinclude | 属性で構成される処理は、属性が指定された対象を条件付きで選択することによる不要コードの除去 |
他の機能文字列に "renaming" を割り当てる必要がある場合は、[セットアップ] タブの [機能割り当て文字列] プロパティ シートを使用して割り当てを設定できます。
Dotfuscator では Dotfuscator が認識できない機能文字列が指定されている属性は無視されます。
Exclude プロパティ
このプロパティはブール型で、既定値は True です。True の場合、このプロパティは、タグ付けされた対象を Feature プロパティで指定された変換の対象から除外するように指示します。False の場合は、タグ付けされた対象を変換対象として選択するように指示します。
Dotfuscator の現在のバージョンでは、各変換処理に対して指定可能な Exclude プロパティの値は、それぞれの変換処理でサポートされている特定の 1 つの値のみです。Dotfuscator は、サポートされていない Exclude 値が指定されている規則を無視します。各処理でサポートされている値は次のとおりです。
機能文字列 | サポートされている Exclude 値 |
---|---|
renaming | True |
controlflow | True |
stringencryption | False |
trigger | False |
conditionalinclude | False |
ApplyToMembers プロパティ
このプロパティはブール型で、既定値は True です。属性がアセンブリまたは型に適用される場合、このプロパティの True 値は、選択されている型の (入れ子になっている型を含む) すべてのメンバに処理を適用するように指示します。このプロパティが false の場合、処理の対象となるのは型のみで、そのメンバ (または入れ子になっている型) には処理は適用されません。
宣言による難読化の有効化と無効化
Dotfuscator では、すべての入力アセンブリに対する宣言による難読化を有効または無効に切り替えることができます。無効になっている場合、難読化に関連するカスタム属性は無視されます。また、特定のアセンブリに対する難読化を無効に切り替えることも可能です。
宣言による難読化の属性の除去
Dotfuscator では、処理の完了後に難読化に関する属性を除去して、難読化の処理方法を調べる手掛かりを出力アセンブリ内に残さないようにできます。宣言による難読化の 2 つの属性にはブール型の "StripAfterObfuscation" プロパティが定義されています。このプロパティの既定値は true です。
また、Dotfuscator の構成設定には、難読化時の StripAfterObfuscation プロパティ値との組み合わせによって属性が除去されるかどうかを左右する設定項目があります。
次の表は、宣言による難読化の属性の除去に影響を与える設定項目を示し、それらの設定と StripAfterObfuscaton プロパティ値の組み合わせによって処理の結果がどのように変化するかをまとめたものです。
Dotfuscator で [難読化属性の使用] を選択 | Dotfuscator で [難読化属性の除去] を選択 | 属性の StripAfterObfuscation プロパティ | 結果 |
---|---|---|---|
はい | はい | True または False | 属性が除去される |
はい | いいえ | True | 属性が除去される |
はい | いいえ | False | 属性が保持される |
いいえ | はい | True または False | 属性が除去される |
いいえ | いいえ | True または False | 属性が保持される |
機能割り当て文字列の使用
Dotfuscator では、難読化属性の Feature プロパティで指定された値に Dotfuscator が認識できる機能文字列を割り当てることができます。
たとえば、アプリケーションにおいて "testmode" という名前の機能を参照する難読化属性を指定したとします。Dotfuscator は既定値ではこの機能文字列を認識しないので、その属性は無視されます。後で、名前の変更や制御フローの難読化を設定するためにこれらの属性の使用が必要になった場合は、機能文字列の "testmode" に Dotfuscator に組み込みの "renaming" および "controlflow" 文字列を割り当てることによって、その設定を実現できます。
© 2002-2007 PreEmptive Solutions. All rights reserved.