カスタム属性
Babel は、.NET Framework と .NET が提供するカスタム属性 System.Reflection.ObfuscationAttribute と System.Reflection.ObfuscateAssemblyAttribute による宣言的な難読化をサポートしています。
ObfuscateAssembly 属性
System.Reflection.ObfuscateAssemblyAttribute はアセンブリレベルの属性で、プライベートアセンブリ用の難読化ルールを使用するよう Babel Obfuscator に指示します。
プライベートアセンブリとは、ライブラリとして使用されないアセンブリ、つまりほかのソフトウェアコンポーネントから使用されないアセンブリです。Babel はプライベートアセンブリを完全に難読化し、すべてのパブリックシンボルをリネームします。
[assembly: ObfuscateAssembly(true)]コンストラクターのブール型引数「assemblyIsPrivate=true」は、アセンブリが 1 つのアプリケーションの範囲内で使用され、パブリックインターフェイスを安全にリネームできることを Babel に伝えます。
Obfuscation 属性
System.Reflection.ObfuscationAttribute 属性は、型、メソッド、イベント、プロパティ、フィールドなどのアセンブリのメンバーに付けて、特定の難読化機能に対する動作を設定できます。
Obfuscation 属性には次のプロパティがあります。
Feature
Feature プロパティは、文字列値を難読化ツールの特定の機能、または機能のリストに対応付けます。Feature プロパティの既定値は「all」です。
Babel では、「all」は利用できるすべての機能を表し、「default」はリネーム機能を表します。
詳しくは、難読化の機能の表を参照してください。
Exclude
関連付けられたメンバーについて、難読化機能を除外するかどうかを示します。
ApplyToMembers
関連付けられた型に対する難読化ツールの動作を、その型のすべてのメンバーにも適用するかどうかを指定します。
StripAfterObfuscation
処理の後に属性を除去するかどうかを指定します。
次のコード例は、ObfuscationAttribute をメソッドに付けてコード暗号化を有効にする方法を示しています。
[Obfuscation(Feature="msil encryption", Exclude=false)]
public string DoSomething()
{機能の拡張構文
Babel Obfuscator は、機能文字列の拡張構文をサポートしています。この構文では、各機能の名前の後に、機能のプロパティをキーと値のペアのリストとして設定できます。
[Obfuscation(Feature="msil encryption:source=opt;cache=true", Exclude=false)]#Feature の拡張構文を使うと、ObfuscationAttribute をアセンブリレベルで設定して、アセンブリ全体の機能を設定できます。
リネーム
[assembly: Obfuscation(Feature="renaming:flatten namespaces=ACME.Test.*", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:flattenNamespaces=ACME.Data.*", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:internalize=true;rename parameters=true", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:overloaded=true;unicode=false", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:name length=5;name prefix=Acme_", Exclude=false)]難読化エージェント
Serializable types タスクと Reflected enums タスクについて、難読化エージェントを無効にします。
[assembly: Obfuscation(Feature="agent:tasknamelist=Serializable types,Reflected enums", Exclude=true)]値の暗号化
命令数が 10 から 100 までのメソッドの値と配列を暗号化します。
[assembly: Obfuscation(Feature="value encryption:min instruction count=10; max instruction count=100", Exclude=false)]Obfuscation 属性だけでは、選択した機能は有効になりません。この属性が機能するのは、その機能が構成で全体として有効になっている場合だけです。
その他の例
コンパイラーが生成したコードを難読化しません。
[assembly: Obfuscation(Feature="all:compilergenerated=true", Exclude=true)]