Привязка данных и обфускация кода - PullRequest
7 голосов
/ 18 сентября 2010

Мой работодатель использует Dotfuscator для всех наших программных продуктов .Net.Из-за этого нам абсолютно запрещено использовать ЛЮБУЮ встроенную привязку данных или что-либо, что отражается на именах свойств / функций - потому что dotfuscator изменяет их, и, следовательно, все связанное мгновенно и непоправимо разрушается.

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

Итак, как можно сделать Reflection with Obfuscation?В чем подвох?Предположительно должны быть коммерческие обфускаторы, которые достаточно умны, чтобы обойти проблему.Какие есть варианты для нашей версии?

Ответы [ 2 ]

3 голосов
/ 22 сентября 2010

Мы внесли ряд улучшений в Dotfuscator, которые должны помочь решить проблемы, связанные с привязкой данных.Функция Smart Obfuscation была добавлена ​​в версию 4.3.100 в марте 2008 года для статического анализа сборок и автоматического исключения элементов из переименования / удаления, которые, как известно, вызывают ошибки во время выполнения.Мы последовательно расширяем и улучшаем эту функциональность, и сегодняшний Dotfuscator работает со стандартными сценариями привязки данных, обычно без минимальной дополнительной конфигурации.

Даже если Smart Obfuscation не улавливает каждый из ваших сценариев, очень легко определить пользовательскийправила для исключения свойств определенных типов или иерархий наследования с помощью пользовательских правил исключения (включая сопоставление типов по шаблонам RegEx).Вы также можете украшать элементы атрибутом System.Reflection.ObfuscationAttribute , чтобы исключить их переименование или удаление при запуске через Dotfuscator.

Если вы привязываете разметку XAML к типамв коде позади несколько последних выпусков поддерживали переименование XAML / BAML, чтобы соответствовать коду позади.Это улучшает общую защиту, а также устраняет целый ряд проблем, когда символы в разметке не соответствуют определениям кода.

Я бы порекомендовал составить несколько простых проверок концептуальных приложений с использованием привязки данных, аналогичной той, которую вы хотите использовать.используйте в своих приложениях и запустите их через Dotfuscator, чтобы увидеть, насколько хорошо он обрабатывает их.Если вы обнаружите какие-либо сценарии, в которых Smart Obfuscation автоматически не исключает цели привязки данных, отправьте их на support@preemptive.com.Мы всегда ищем четко определенные сценарии для улучшения продукта.

0 голосов
/ 18 сентября 2010

Задача обфускатора - разрушать отношения, видимые в исходном коде, чтобы они больше не были видны в результирующем исполняемом коде. Отражение опирается на такие отношения, как «свойство, запрошенное этим фрагментом кода, является свойством, определенным этим фрагментом кода». Поэтому неудивительно, что запутывание и отражение плохо сочетаются друг с другом.

Переименование свойств - это просто нулевая степень запутывания. Нетривиальный обфускатор также будет выполнять такие вещи, как разделение свойства на две части, так что, когда в исходном коде упоминается только свойство P, часть кода времени выполнения будет использовать P1, а часть кода времени выполнения будет использовать P2, и этого будет достаточно. присваивания между ними, чтобы при необходимости свойства имели правильное значение, а также паразитные присваивания, чтобы у них не было правильного значения, когда они не нужны. Дело не только в том, что P был переименован: больше не является свойством P.

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

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

...