Почему [ObfuscationAttribute] не разрешен для конструкторов
Вы не можете поместить [Obfuscation(Exclude = true)]
в конструктор, потому что обфускация переименовывает символы, а не содержимое методов (обычно более продвинутые обфускаторы могут изменять поток кода, модифицировать константы и т. д., чтобы усложнить обратный инжиниринг) эм>.
Например, рассмотрим следующее:
// obfuscated class
public class MyClass
{
public MyClass()
{
}
public void MyMethod()
{
}
}
// unobfuscated class
public class CallingClass
{
public static void TestMyClass()
{
MyClass class = new MyClass();
class.MyMethod();
}
}
Обфускатор переименует MyClass
во что-то другое (например, qfghjigffvvb
) и MyMethod()
во что-то другое (например, ghjbvxdghh()
) и изменит все ссылки, чтобы код по-прежнему работал одинаково, т.е.
public class qfghjigffvvb
{
public qfghjigffvvb()
{
}
public void ghjbvxdghh()
{
}
}
// unobfuscated class
public class CallingClass
{
public static void TestMyClass()
{
qfghjigffvvb class = new qfghjigffvvb();
class.ghjbvxdghh();
}
}
Если вы поместите атрибут [Obfuscation(Exclude = true)]
в конструктор для MyClass
, то CallingClass.TestMyClass()
будет выглядеть так:
public class CallingClass
{
public static void TestMyClass()
{
qfghjigffvvb class = new MyClass(); // ?
class.ghjbvxdghh();
}
}
Если вам нужно, чтобы содержимое конструктора MyClass
не было запутанным, вам нужно поместить атрибут [Obfuscation(Exclude = true)]
во все, что он вызывает, чтобы символы не переименовывались.
Мысленный эксперимент: исключение содержимого конструктора
Допустим, у вас есть атрибут [ContentObfuscation]
, который вы можете использовать, чтобы предотвратить запутывание содержимого метода (или конструктора, или свойства). Что бы вы хотели, чтобы он здесь делал?
public class MyClass
{
[ContentObfuscation(Exclude = true)]
public MyClass()
{
// SecurityCriticalClass is obfuscated
var securityCriticalClass = new SecurityCriticalClass();
securityCriticalClass.DoSomeTopSecretStuff();
}
}
Если содержимое конструктора не обфусцировано, то SecurityCriticalClass
также не должно быть обфусцировано, что может создать проблему безопасности.
person
Wai Ha Lee
schedule
26.02.2015
ObfuscationAttribute
не включаетAttributeTargets.Constructor
в качестве допустимого использования атрибута... так что это невозможно. - person Simon Whitehead   schedule 26.02.2015.ctor
(нестатический) или.cctor
(статический конструктор, он же инициализатор типа). Чего вы пытаетесь достичь? Вы хотите, чтобы конструктор выглядел как обычный метод? - person Jeppe Stig Nielsen   schedule 26.02.2015