Как запутать имя метода только с помощью Dotfuscator?

Из-за некоторых действий по отражению мне необходимо исключить некоторые методы из обфускации Dotfuscator ce:

[Obfuscation(Exclude = true)]
internal MyMethod (String input1)
{
   string member1 = "hello"
   string member2 = "world"
   [...]
}

Атрибут Obfuscation выполняет эту работу, но теперь и полное содержимое метода больше не запутывается. Как я могу добиться того, чтобы имя MyMethod не было обфусцировано, но члены member1, member2 и т. д. все еще были запутаны?


person dontspeak    schedule 14.07.2019    source источник


Ответы (1)


(Примечание: я работаю в команде Dotfuscator и отвечаю в этом качестве.)

Имена локальных переменных (которые вы называете «членами») хранятся вместе с другой отладочной информацией в файле базы данных программы (.pdb), а не в сборке (файл .dll или .exe). Dotfuscator переименовывает элементы кода в сборке, но не переименовывает локальные переменные в файле .pdb.

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

Однако Dotfuscator по-прежнему может создавать файлы .pdb для внутреннего тестирования и отладки. Если вы хотите, чтобы сообщество Dotfuscator (ранее известное как Dotfuscator CE) перестало это делать, откройте файл конфигурации в пользовательском интерфейсе Dotfuscator, перейдите в раздел Настройки -> Общие и снимите флажок Испускать символы отладки.

person Joe Sewell    schedule 15.07.2019
comment
Спасибо за указание на это! Я не знал, что локальные имена var присутствуют только в pdb. Конечно, я не буду отправлять pdb в производственную среду, но мне было интересно узнать об именах локальных переменных, пока я отлаживал точечный код (с активированными символами отладки). Так что все хорошо, еще раз спасибо. - person dontspeak; 16.07.2019