2014-09-15 5 views
4

Моя проблема заключается в конфигурации Dotfuscator для переименования. Представьте себе класс, который будет выглядеть следующим образом:Dotfuscator accessors renaming get и set

Class MyClass 
{ 
    private int _propertyA; 
    private int _propertyB; 

    public int PropertyA 
    { 
     get{return _propertyA;} 
     set{_propertyA = value;} 
    } 

    [Obfuscation(Feature = "renaming", Exclude = true)] 
    public int DestinationReference 
    { 
     get{return _propertyB;} 
    } 
} 

запутанный класс будет записан в этом, как коснуться

Class a 
{ 

    int s() 
    void z(int a) 

    public int DestinationReference 
    { 
     get{return _propertyB;} 
    } 
} 

Это мое предположение, от того, что я могу видеть, используя .Net Reflector

Моя проблема заключается в следующем: - В нашем коде мы реализовали метод, который ищет все атрибуты класса с использованием отражения, чтобы найти определенные параметры - Этот метод не работает в обфускационном коде a s мой Accessor PropertyA, был заменен двумя различными методами для get accessor и установить accessor. - Я знаю, что если я исключаю аксессор от переименования он остается аксессором в коде MSIL и будет найден моим метод, который ищет аксессор

Мой вопрос: - Не переименовывать единственный вариант? - Есть ли параметр в Dotfuscator, который позволит переименовать аксессуар, не разделяя его на два разных метода и не теряя доступа?

Я довольно новичок в обфускации, поэтому прошу прощения за мои недостатки, это то, что я вижу для класса, подобного описанному выше в отражателе.

Screenshot

Как вы можете видеть, что свойство исключается из переименования остается в собственности с ПОЛУЧИТЬ аксессор. Но для другого, который был запутан, я вижу два разных метода s и z

Я пытаюсь выяснить, есть ли способ получить один аксессуар, переименованный «s», например, с базовым получателем и сеттер

ответ

1

Я нашел некоторые ответы на мой вопрос, первый посмотрев на эту статью: http://vicky4147.wordpress.com/2007/10/23/exploring-msil-properties/

Я вижу, что MSIL генерирует метод get_XXX() и set_XXX (INT) методы, а также добавления свойства. Dotfuscator отвечает за переименование методов get и set (что мы и хотим), а также для удаления самого свойства (чего я не хочу)

Решение состоит в том, чтобы разрешить «режим библиотеки» для запутанной DLL, если режим библиотеки включен, документация гласит:

  • Название общественных классов и вложенных общественных классов не переименованы. Члены (поля и методы) этих классов также не переименовываются, если у них есть доступ к общедоступным, семейным или famorassem.
  • Кроме того, никакие виртуальные методы не переименовываются, независимо от спецификатора доступа. Это позволяет клиентам вашей библиотеки переопределять частные виртуальные методы, если это необходимо (это допустимо поведение в архитектуре .NET).
  • В дополнение к исключениям, предусмотренным вышеприведенными правилами, применяются любые пользовательские исключения переименования.
  • Метаданные недвижимости и событий всегда сохраняются.

И это можно увидеть после запутывания в рефлекторе, в режиме верхней библиотеки не отключена, в режиме нижней библиотеки включен

Screenshot

Как видно, ни один из публичные классы/методы/поля были переименованы, и более важно для меня метаданные Property были сохранены.

Теперь моим следующим вопросом было бы, как сохранить метаданные свойств, но разрешить переименование самого свойства. Я хотел бы найти решение, которое удовлетворительно, без необходимости вручную определять свойства каждого свойства с помощью пользовательских атрибутов обфускации.

Я продолжу поиск другого дня, и если я не смогу найти что-либо, этот ответ будет отмечен как решение проблемы.