ObfuscationAttribute Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Weist Verschleierungstools an, die angegebenen Aktionen für eine Assembly, einen Typ oder ein Element auszuführen.
public ref class ObfuscationAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Event | System.AttributeTargets.Field | System.AttributeTargets.Interface | System.AttributeTargets.Method | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.Struct, AllowMultiple=true, Inherited=false)]
public sealed class ObfuscationAttribute : Attribute
public sealed class ObfuscationAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Event | System.AttributeTargets.Field | System.AttributeTargets.Interface | System.AttributeTargets.Method | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.Struct, AllowMultiple=true, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ObfuscationAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Event | System.AttributeTargets.Field | System.AttributeTargets.Interface | System.AttributeTargets.Method | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.Struct, AllowMultiple=true, Inherited=false)>]
type ObfuscationAttribute = class
inherit Attribute
type ObfuscationAttribute = class
inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Event | System.AttributeTargets.Field | System.AttributeTargets.Interface | System.AttributeTargets.Method | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.Struct, AllowMultiple=true, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ObfuscationAttribute = class
inherit Attribute
Public NotInheritable Class ObfuscationAttribute
Inherits Attribute
- Vererbung
- Attribute
Beispiele
Das folgende Codebeispiel zeigt eine öffentliche Assembly mit zwei Typen: Type1 und Type2. Die Assembly ist für die Verschleierung mit dem ObfuscateAssemblyAttribute, was die Assembly kennzeichnet, die als öffentlich behandelt werden soll (d. s. die AssemblyIsPrivate Eigenschaft ist false).
Type1 ist für die Verschleierung gekennzeichnet, da die Assembly zur Verschleierung markiert ist. Ein Element von Type1 ist aus der Verschleierung ausgeschlossen, wobei die Exclude Eigenschaft verwendet wird.
Type2 wird von der Verschleierung ausgeschlossen, aber ihre Member sind zur Verschleierung gekennzeichnet, da die ApplyToMembers Eigenschaft ist false.
Die MethodA Methode von Type2 ist mit dem Wert "default" für die Feature Eigenschaft gekennzeichnet. Es ist erforderlich, die Eigenschaft anzugebenfalse, um zu vermeidenMethodA, dass die Verschleierung ausgeschlossen wird, da die Standardeinstellung für die Exclude Eigenschaft lautettrue.Exclude Das Verschleierungstool sollte das Attribut nach der Verschleierung nicht entfernen, da die StripAfterObfuscation Eigenschaft lautet false. Alle anderen Attribute in diesem Codebeispiel werden nach der Verschleierung entfernt, da die StripAfterObfuscation Eigenschaft nicht angegeben ist und daher standardmäßig auf true.
Das Codebeispiel enthält Code zum Anzeigen der Attribute und deren Eigenschaften. Sie können die Attribute auch untersuchen, indem Sie die DLL mit dem Ildasm.exe (IL Disassembler) öffnen.
using System;
using System.Reflection;
// Mark this public assembly for obfuscation.
[assembly:ObfuscateAssemblyAttribute(false)]
// This class is marked for obfuscation, because the assembly
// is marked.
public class Type1
{
// Exclude this method from obfuscation. The default value
// of the Exclude property is true, so it is not necessary
// to specify Exclude=True, although spelling it out makes
// your intent clearer.
[ObfuscationAttribute(Exclude=true)]
public void MethodA() {}
// This member is marked for obfuscation because the class
// is marked.
public void MethodB() {}
}
// Exclude this type from obfuscation, but do not apply that
// exclusion to members. The default value of the Exclude
// property is true, so it is not necessary to specify
// Exclude=true, although spelling it out makes your intent
// clearer.
[ObfuscationAttribute(Exclude=true, ApplyToMembers=false)]
public class Type2
{
// The exclusion of the type is not applied to its members,
// however in order to mark the member with the "default"
// feature it is necessary to specify Exclude=false,
// because the default value of Exclude is true. The tool
// should not strip this attribute after obfuscation.
[ObfuscationAttribute(Exclude=false, Feature="default",
StripAfterObfuscation=false)]
public void MethodA() {}
// This member is marked for obfuscation, because the
// exclusion of the type is not applied to its members.
public void MethodB() {}
}
// This class only exists to provide an entry point for the
// assembly and to display the attribute values.
internal class Test
{
public static void Main()
{
// Display the ObfuscateAssemblyAttribute properties
// for the assembly.
Assembly assem = typeof(Test).Assembly;
object[] assemAttrs = assem.GetCustomAttributes(
typeof(ObfuscateAssemblyAttribute), false);
foreach( Attribute a in assemAttrs )
{
ShowObfuscateAssembly((ObfuscateAssemblyAttribute) a);
}
// Display the ObfuscationAttribute properties for each
// type that is visible to users of the assembly.
foreach( Type t in assem.GetTypes() )
{
if (t.IsVisible)
{
object[] tAttrs = t.GetCustomAttributes(
typeof(ObfuscationAttribute), false);
foreach( Attribute a in tAttrs )
{
ShowObfuscation(((ObfuscationAttribute) a),
t.Name);
}
// Display the ObfuscationAttribute properties
// for each member in the type.
foreach( MemberInfo m in t.GetMembers() )
{
object[] mAttrs = m.GetCustomAttributes(
typeof(ObfuscationAttribute), false);
foreach( Attribute a in mAttrs )
{
ShowObfuscation(((ObfuscationAttribute) a),
t.Name + "." + m.Name);
}
}
}
}
}
private static void ShowObfuscateAssembly(
ObfuscateAssemblyAttribute ob)
{
Console.WriteLine("\r\nObfuscateAssemblyAttribute properties:");
Console.WriteLine(" AssemblyIsPrivate: {0}",
ob.AssemblyIsPrivate);
Console.WriteLine(" StripAfterObfuscation: {0}",
ob.StripAfterObfuscation);
}
private static void ShowObfuscation(
ObfuscationAttribute ob, string target)
{
Console.WriteLine("\r\nObfuscationAttribute properties for: {0}",
target);
Console.WriteLine(" Exclude: {0}", ob.Exclude);
Console.WriteLine(" Feature: {0}", ob.Feature);
Console.WriteLine(" StripAfterObfuscation: {0}",
ob.StripAfterObfuscation);
Console.WriteLine(" ApplyToMembers: {0}", ob.ApplyToMembers);
}
}
/* This code example produces the following output:
ObfuscateAssemblyAttribute properties:
AssemblyIsPrivate: False
StripAfterObfuscation: True
ObfuscationAttribute properties for: Type1.MethodA
Exclude: True
Feature: all
StripAfterObfuscation: True
ApplyToMembers: True
ObfuscationAttribute properties for: Type2
Exclude: True
Feature: all
StripAfterObfuscation: True
ApplyToMembers: False
ObfuscationAttribute properties for: Type2.MethodA
Exclude: False
Feature: default
StripAfterObfuscation: False
ApplyToMembers: True
*/
Imports System.Reflection
' Mark this public assembly for obfuscation.
<Assembly: ObfuscateAssemblyAttribute(False)>
' This class is marked for obfuscation, because the assembly
' is marked.
Public Class Type1
' Exclude this method from obfuscation. The default value
' of the Exclude property is True, so it is not necessary
' to specify Exclude:=True, although spelling it out makes
' your intent clearer.
<ObfuscationAttribute(Exclude:=True)> _
Public Sub MethodA()
End Sub
' This member is marked for obfuscation because the class
' is marked.
Public Sub MethodB()
End Sub
End Class
' Exclude this type from obfuscation, but do not apply that
' exclusion to members. The default value of the Exclude
' property is True, so it is not necessary to specify
' Exclude:=True, although spelling it out makes your intent
' clearer.
<ObfuscationAttribute(Exclude:=True, ApplyToMembers:=False)> _
Public Class Type2
' The exclusion of the type is not applied to its members,
' however in order to mark the member with the "default"
' feature it is necessary to specify Exclude:=False,
' because the default value of Exclude is True. The tool
' should not strip this attribute after obfuscation.
<ObfuscationAttribute(Exclude:=False, _
Feature:="default", StripAfterObfuscation:=False)> _
Public Sub MethodA()
End Sub
' This member is marked for obfuscation, because the
' exclusion of the type is not applied to its members.
Public Sub MethodB()
End Sub
End Class
' This class only exists to provide an entry point for the
' assembly and to display the attribute values.
Friend Class Test
Public Shared Sub Main()
' Display the ObfuscateAssemblyAttribute properties
' for the assembly.
Dim assem As Assembly =GetType(Test).Assembly
Dim assemAttrs() As Object = _
assem.GetCustomAttributes( _
GetType(ObfuscateAssemblyAttribute), _
False)
For Each a As Attribute In assemAttrs
ShowObfuscateAssembly(CType(a, ObfuscateAssemblyAttribute))
Next
' Display the ObfuscationAttribute properties for each
' type that is visible to users of the assembly.
For Each t As Type In assem.GetTypes()
If t.IsVisible Then
Dim tAttrs() As Object = _
t.GetCustomAttributes( _
GetType(ObfuscationAttribute), _
False)
For Each a As Attribute In tAttrs
ShowObfuscation(CType(a, ObfuscationAttribute), _
t.Name)
Next
' Display the ObfuscationAttribute properties
' for each member in the type.
For Each m As MemberInfo In t.GetMembers()
Dim mAttrs() As Object = _
m.GetCustomAttributes( _
GetType(ObfuscationAttribute), _
False)
For Each a As Attribute In mAttrs
ShowObfuscation(CType(a, ObfuscationAttribute), _
t.Name & "." & m.Name)
Next
Next
End If
Next
End Sub
Private Shared Sub ShowObfuscateAssembly( _
ByVal ob As ObfuscateAssemblyAttribute)
Console.WriteLine(vbCrLf & "ObfuscateAssemblyAttribute properties:")
Console.WriteLine(" AssemblyIsPrivate: " _
& ob.AssemblyIsPrivate)
Console.WriteLine(" StripAfterObfuscation: " _
& ob.StripAfterObfuscation)
End Sub
Private Shared Sub ShowObfuscation( _
ByVal ob As ObfuscationAttribute, _
ByVal target As String)
Console.WriteLine(vbCrLf _
& "ObfuscationAttribute properties for: " _
& target)
Console.WriteLine(" Exclude: " & ob.Exclude)
Console.WriteLine(" Feature: " & ob.Feature)
Console.WriteLine(" StripAfterObfuscation: " _
& ob.StripAfterObfuscation)
Console.WriteLine(" ApplyToMembers: " & ob.ApplyToMembers)
End Sub
End Class
' This code example produces the following output:
'
'ObfuscateAssemblyAttribute properties:
' AssemblyIsPrivate: False
' StripAfterObfuscation: True
'
'ObfuscationAttribute properties for: Type1.MethodA
' Exclude: True
' Feature: all
' StripAfterObfuscation: True
' ApplyToMembers: True
'
'ObfuscationAttribute properties for: Type2
' Exclude: True
' Feature: all
' StripAfterObfuscation: True
' ApplyToMembers: False
'
'ObfuscationAttribute properties for: Type2.MethodA
' Exclude: False
' Feature: default
' StripAfterObfuscation: False
' ApplyToMembers: True
Hinweise
Mit ObfuscationAttribute den Attributen und ObfuscateAssemblyAttribute Attributen können Assemblyautoren ihre Binärdateien kommentieren, damit Verschleierungstools sie ordnungsgemäß mit minimaler externer Konfiguration verarbeiten können.
Von Bedeutung
Durch anwenden dieses Attributs wird die Codeentität, auf die Sie es anwenden, nicht automatisch verschleiert. Das Anwenden des Attributs ist eine Alternative zum Erstellen einer Konfigurationsdatei für das Verschleierungstool. Das heißt, es enthält lediglich Anweisungen für ein Verschleierungstool. Microsoft empfiehlt anbietern von Verschleierungstools die hier beschriebene Semantik. Es gibt jedoch keine Garantie dafür, dass ein bestimmtes Tool microsoft-Empfehlungen folgt.
Das ObfuscationAttribute Attribut verfügt über eine Zeichenfolgeneigenschaft Feature . Verschleierungstools können die Zeichenfolgenwerte dieser Eigenschaft features zuordnen, die sie implementieren, vorzugsweise mithilfe einer XML-Konfigurationsdatei, auf die Benutzer zugreifen können. Dies ObfuscationAttribute definiert zwei Featurezeichenfolgen, "default" und "all". Die Zeichenfolge "default" sollte den standardmäßigen Verschleierungsfeatures eines Tools zugeordnet werden, und "alle" sollten dem vollständigen Satz von Verschleierungsfeatures zugeordnet werden, die von einem Tool unterstützt werden. Der Standardwert der Feature Eigenschaft ist "all", wodurch der vollständige Satz von Verschleierungsfeatures aktiviert wird.
Bei Anwendung auf eine Assembly ObfuscationAttribute gilt auch für alle Typen innerhalb der Assembly. Wenn die ApplyToMembers Eigenschaft nicht angegeben oder auf true"Festgelegt" festgelegt ist, gilt das Attribut auch für alle Member.
ObfuscationAttribute gibt nicht an, ob eine Assembly öffentlich oder privat ist. Verwenden Sie das ObfuscateAssemblyAttribute Attribut, um anzugeben, ob eine Assembly öffentlich oder privat ist.
Wenn sie auf Klassen und Strukturen angewendet wird, gilt auch für alle Member des Typs, ObfuscationAttribute wenn die ApplyToMembers Eigenschaft nicht angegeben ist oder auf true.
Bei Anwendung auf Methoden, Parameter, Felder und Eigenschaften wirkt sich das Attribut nur auf die Entität aus, auf die sie angewendet wird.
Konstruktoren
| Name | Beschreibung |
|---|---|
| ObfuscationAttribute() |
Initialisiert eine neue Instanz der ObfuscationAttribute-Klasse. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| ApplyToMembers |
Dient zum Abrufen oder Festlegen eines Boolean Werts, der angibt, ob das Attribut eines Typs auf die Member des Typs angewendet werden soll. |
| Exclude |
Dient zum Abrufen oder Festlegen eines Boolean Werts, der angibt, ob das Verschleierungstool den Typ oder das Element von der Verschleierung ausschließen soll. |
| Feature |
Dient zum Abrufen oder Festlegen eines Zeichenfolgenwerts, der vom Verschleierungstool erkannt wird und die Verarbeitungsoptionen angibt. |
| StripAfterObfuscation |
Dient zum Abrufen oder Festlegen eines Boolean Werts, der angibt, ob das Verschleierungstool dieses Attribut nach der Verarbeitung entfernen soll. |
| TypeId |
Wenn sie in einer abgeleiteten Klasse implementiert wird, wird ein eindeutiger Bezeichner für diese Attribute. (Geerbt von Attribute) |
Methoden
| Name | Beschreibung |
|---|---|
| Equals(Object) |
Gibt einen Wert zurück, der angibt, ob diese Instanz einem angegebenen Objekt entspricht. (Geerbt von Attribute) |
| GetHashCode() |
Gibt den Hashcode für diese Instanz zurück. (Geerbt von Attribute) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| IsDefaultAttribute() |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, gibt an, ob der Wert dieser Instanz der Standardwert für die abgeleitete Klasse ist. (Geerbt von Attribute) |
| Match(Object) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem angegebenen Objekt entspricht. (Geerbt von Attribute) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu. (Geerbt von Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Ruft die Typinformationen für ein Objekt ab, mit denen die Typinformationen für eine Schnittstelle abgerufen werden können. (Geerbt von Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1). (Geerbt von Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Bietet Zugriff auf Eigenschaften und Methoden, die von einem Objekt verfügbar gemacht werden. (Geerbt von Attribute) |