ObfuscationAttribute ObfuscationAttribute ObfuscationAttribute ObfuscationAttribute Class

정의

어셈블리, 형식 또는 멤버에 대해 지정된 동작을 수행하도록 난독 처리 도구를 설정합니다.Instructs obfuscation tools to take the specified actions for an assembly, type, or member.

public ref class ObfuscationAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Struct | System.AttributeTargets.Enum | System.AttributeTargets.Method | System.AttributeTargets.Property | System.AttributeTargets.Field | System.AttributeTargets.Event | System.AttributeTargets.Interface | System.AttributeTargets.Parameter | System.AttributeTargets.Delegate, AllowMultiple=true, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
[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
type ObfuscationAttribute = class
    inherit Attribute
Public NotInheritable Class ObfuscationAttribute
Inherits Attribute
상속
ObfuscationAttributeObfuscationAttributeObfuscationAttributeObfuscationAttribute
특성

예제

다음 코드 예제에서는 두 가지 유형이 공용 어셈블리를 보여 줍니다. Type1Type2입니다.The following code example shows a public assembly with two types: Type1 and Type2. 사용 하 여 난독 처리에 대 한 어셈블리가 표시 됩니다는 ObfuscateAssemblyAttribute, 공용으로 처리 될 어셈블리를 표시 하는입니다 (즉, 합니다 AssemblyIsPrivate 속성은 false).The assembly is marked for obfuscation with the ObfuscateAssemblyAttribute, which marks the assembly to be treated as public (that is, the AssemblyIsPrivate property is false).

Type1 어셈블리를 난독 처리에 대 한 표시 되어 있으므로 난독 처리에 대 한 표시 됩니다.Type1 is marked for obfuscation because the assembly is marked for obfuscation. 멤버 중 하나 Type1 난독 처리 대상에서 제외 됩니다 사용 하는 Exclude 속성입니다.One member of Type1 is excluded from obfuscation, using the Exclude property.

Type2 난독 처리 대상에서 제외 됩니다 때문에 해당 멤버 난독 처리에 대 한 표시는 ApplyToMembers 속성은 false합니다.Type2 is excluded from obfuscation, but its members are marked for obfuscation because the ApplyToMembers property is false.

합니다 MethodA 메서드의 Type2 값으로 표시 됩니다 "default" 에 대 한는 Feature 속성입니다.The MethodA method of Type2 is marked with the value "default" for the Feature property. 지정 하는 데 필요한 것 false 에 대 한는 Exclude 속성을 제외 하지 않으려면 MethodA 를 난독 처리 대상에서 때문에 대 한 기본을 Exclude 속성은 true합니다.It is necessary to specify false for the Exclude property to avoid excluding MethodA from obfuscation, because the default for the Exclude property is true. 난독 처리 도구가 해야 특성을 제거 하지 난독 처리 후 때문에 합니다 StripAfterObfuscation 속성은 false합니다.The obfuscation tool should not strip the attribute after obfuscation because the StripAfterObfuscation property is false. 이 코드 예제에 있는 모든 특성 때문에 난독 처리 후 제거 됩니다는 StripAfterObfuscation 속성을 지정 하지 않으면 이며 따라서 기본값 true합니다.All the other attributes in this code example are stripped after obfuscation, because the StripAfterObfuscation property is not specified, and therefore defaults to true.

코드 예제에서는 특성 및 해당 속성을 표시 하는 코드를 포함 합니다.The code example includes code to display the attributes and their properties. 사용 하 여 DLL을 열어 특성을 검사할 수도 있습니다는 Ildasm.exe (IL 디스어셈블러)합니다.You can also examine the attributes by opening the DLL with the Ildasm.exe (IL Disassembler).

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

설명

합니다 ObfuscationAttributeObfuscateAssemblyAttribute 어셈블리 작성자 난독 처리 도구 외부 최소 구성으로 올바르게 처리할 수 있도록 해당 이진 파일에 주석을 추가할 특성을 사용 합니다.The ObfuscationAttribute and ObfuscateAssemblyAttribute attributes allow assembly authors to annotate their binaries so that obfuscation tools can process them correctly with minimal external configuration.

중요

이 특성을 적용 해도 적용 하는 코드 엔터티 자동으로 난독 처리 하지 않습니다.Applying this attribute does not automatically obfuscate the code entity to which you apply it. 특성을 적용 하는 대신 난독 처리 도구에 대 한 구성 파일을 만듭니다.Applying the attribute is an alternative to creating a configuration file for the obfuscation tool. 즉, 난독 처리 하는 도구에 대 한 지침만 제공 합니다.That is, it merely provides instructions for an obfuscation tool. 난독 처리 도구 공급 업체에 따라 여기에 설명 된 의미 체계는 것이 좋습니다.Microsoft recommends that vendors of obfuscation tools follow the semantics described here. 그러나 특정 도구 Microsoft 권장 사항을 따르는지 하지 않을 수도가 있습니다.However, there is no guarantee that a particular tool follows Microsoft recommendations.

합니다 ObfuscationAttribute 특성에는 문자열 Feature 속성입니다.The ObfuscationAttribute attribute has a string Feature property. 난독 처리 도구 구현 된 기능, 가급적 이면 사용자가 액세스할 수 있는 XML 구성 파일을 사용 하 여이 속성의 문자열 값을 매핑할 수 있습니다.Obfuscation tools can map the string values of this property to features they implement, preferably by using an XML configuration file that users can access. ObfuscationAttribute 두 기능 문자열, "default" 및 "all"을 정의 합니다.The ObfuscationAttribute defines two feature strings, "default" and "all". "Default" 문자열을 도구의 기본 난독 처리 기능에 매핑해야 합니다. 및 "all" 도구에서 지원 되는 난독 처리 기능의 전체 집합에 매핑해야 합니다.The string "default" should map to the default obfuscation features of a tool, and "all" should map to the complete set of obfuscation features supported by a tool. 기본값은 Feature 속성은 "all", 난독 처리 기능의 전체 집합을 사용 하도록 설정 합니다.The default value of the Feature property is "all", enabling the complete set of obfuscation features.

어셈블리에 적용 될 때 ObfuscationAttribute 어셈블리 내의 모든 형식에도 적용 됩니다.When applied to an assembly, ObfuscationAttribute also applies to all types within the assembly. 경우는 ApplyToMembers 속성을 지정 하지 않으면 또는로 설정 된 true를 특성으로 모든 멤버에 적용 됩니다.If the ApplyToMembers property is not specified, or is set to true, the attribute applies to all members as well. ObfuscationAttribute 공용 또는 개인 어셈블리 인지 여부를 지정 하지 않습니다.ObfuscationAttribute does not specify whether an assembly is public or private. 공용 또는 개인 어셈블리 인지 여부를 지정 하려면 사용 된 ObfuscateAssemblyAttribute 특성입니다.To specify whether an assembly is public or private, use the ObfuscateAssemblyAttribute attribute.

클래스와 구조체를 적용할 때 ObfuscationAttribute 경우 형식의 모든 멤버에도 적용 합니다 ApplyToMembers 속성을 지정 하지 않으면 또는로 설정 된 true합니다.When applied to classes and structures, ObfuscationAttribute also applies to all members of the type if the ApplyToMembers property is not specified, or is set to true.

메서드, 매개 변수, 필드 및 속성에 적용 되 면 특성이 적용 되는 엔터티를만 영향을 줍니다.When applied to methods, parameters, fields, and properties, the attribute affects only the entity to which it is applied.

생성자

ObfuscationAttribute() ObfuscationAttribute() ObfuscationAttribute() ObfuscationAttribute()

ObfuscationAttribute 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ObfuscationAttribute class.

속성

ApplyToMembers ApplyToMembers ApplyToMembers ApplyToMembers

형식의 특성이 형식의 모든 멤버에 적용되는지 여부를 나타내는 Boolean 값을 가져오거나 설정합니다.Gets or sets a Boolean value indicating whether the attribute of a type is to apply to the members of the type.

Exclude Exclude Exclude Exclude

난독 처리 도구가 형식 또는 멤버를 난독 처리 대상에서 제외할지 여부를 나타내는 Boolean 값을 가져오거나 설정합니다.Gets or sets a Boolean value indicating whether the obfuscation tool should exclude the type or member from obfuscation.

Feature Feature Feature Feature

난독 처리 도구에서 인식한 후 처리 옵션을 지정하는 문자열 값을 가져오거나 설정합니다.Gets or sets a string value that is recognized by the obfuscation tool, and which specifies processing options.

StripAfterObfuscation StripAfterObfuscation StripAfterObfuscation StripAfterObfuscation

난독 처리 도구가 처리 후 이 특성을 제거하는지 여부를 나타내는 Boolean 값을 가져오거나 설정합니다.Gets or sets a Boolean value indicating whether the obfuscation tool should remove this attribute after processing.

TypeId TypeId TypeId TypeId

파생 클래스에서 구현된 경우 이 Attribute에 대한 고유 식별자를 가져옵니다.When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)

메서드

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

@FSHO2@이 인스턴스가 지정한 개체와 같은지를 나타내는 값을 반환합니다.Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

이 인스턴스의 해시 코드를 반환합니다.Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

파생 클래스에서 재정의된 경우 이 인스턴스 값이 파생 클래스에 대한 기본값인지 여부를 표시합니다.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

파생 클래스에서 재정의된 경우 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(Inherited from Object)

명시적 인터페이스 구현

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

이름 집합을 해당하는 디스패치 식별자 집합에 매핑합니다.Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

인터페이스의 형식 정보를 가져오는 데 사용할 수 있는 개체의 형식 정보를 검색합니다.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

개체에서 제공하는 형식 정보 인터페이스의 수를 검색합니다(0 또는 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

개체에서 노출하는 메서드와 속성에 대한 액세스를 제공합니다.Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

적용 대상

추가 정보