Популярные ответы
Похожие ответы
Обфускация (от лат. obfuscare — затенять, затемнять; и англ. obfuscate — делать неочевидным, запутанным, сбивать с толку) или запутывание кода — приведение исходного текста или исполняемого кода программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции.
«Запутывание» кода может осуществляться на уровне алгоритма, исходного текста или ассемблерного текста. Для создания запутанного ассемблерного текста могут использоваться специализированные компиляторы, использующие неочевидные или недокументированные возможности среды исполнения программы. Существуют также специальные программы, производящие обфускацию, называемые обфускаторами.
Цели обфускации:
- Затруднение декомпиляции (отладки) и изучения программ с целью обнаружения функциональности.
- Затруднение декомпиляции проприетарных программ с целью предотвращения обратной разработки или обхода DRM и систем проверки лицензий.
- Нарушение авторских прав программистов и скрытие авторства. Парадокс в том, что используется это преимущественно в проприетарных программах.
- Оптимизация программы с целью уменьшения размера работающего кода и (если используется некомпилируемый язык) ускорения работы.
- Демонстрация неочевидных возможностей языка и квалификации программиста (если производится вручную, а не инструментальными средствами).
Плюсы обфускации:
- Обфускаторы делают дизассемблированный код тяжелым для изучения, превращая IsLicensed () в x().
- Некоторые обфускаторы используют баги ILDASM для защиты от дизассемблинга в нем (Salamander).
- Некоторые обфускаторы даже конвертируют код в native код, делая бесполезным дизассемблинг (Salamander).
- Некоторые обфускаторы шифруют и пакуют ваш exe и иже с ним referenced сборки в один exe-файл, так что размер проги может уменьшиться 2-4 раза и не поддается дизассемблингу (Thinstall).
Минусы обфускации:
- Продукт остается дизассемблируемым.
- Собрать сборку после дизассемблинга не составит труда.
- IL код – доступный для чтения и понимания по сравнению c ассемблерным.
- «Защита» обфускаторов, которые используют баги ILDASM будут бессильны перед дизассемблерами других разработчиков.
- Защита обфускаторов, которые используют шифрование символьной части метаданных, строковых и бинарных ресурсов мешает пользователям продукта, отлаживать и тестировать свои продукты. Кроме этого – это риск, так как некоторые символьные данные используются в Reflection – для получения типа (GetType (MyType) ), или загрузки ресурса (GetManifestResourceStream (MyResource) ).
- Зачастую обфускаторы имеют много настроек, непонятных или сложных для понимания обычному пользователю. Неинформированность пользователя может привести к тому что его обфусцированная прога будет работать не так как хотелось, да еще и не отлавливаемому отладчиком.
- Цена – порядок цен – от 40 до 1500 долларов за программу. И цена может ничего не говорить о качестве обфускации.
- Защищенная таким образом прога «жестко привязана» к используемому .Net Framework, и сервис-пак установленный, нарушит корректность работы защищенной программы. Да и такая защита возможна только для Intel-процессоров.
- Продукт загружает из ресурса нужные сборки в память и managed exe файл и передает ему управление, занимаясь только разруливанием проблем со сборками, типами, ресурсами (через AssemblyResolve, TypeResolve, ResourceResolve). Но – не все сборки нужны сразу, загрузка их требует дешифровки и распаковки – дополнительного времени и нагрузки на процессор. Не все производят exe-файлы. А Thinstall будет работать только с exe, так как dll-сборки уже не имеют как раньше процессорного DllMain, из которой это было возможно производить. Есть такая программа ProcDump – она может продампить запущенный процесс и соответственно легко получить расшифрованными и распакованными защищенный exe и referenced сборки. Thinstall будет иметь проблемы с загрузкой в память managed C++ сборки.
- Некоторые обфускаторы создают замкнутую систему обфусцированных сборок, где необфусцированными остаются сборки сторонних производителей и MS-вские. Обфускатор не знает как используются ресурсы сборки, поэтому может привести прогу к нерабочему состоянию. Хотя в данном случае качество обфускации становится идеальным – ни к чему не подкопаться. Опять же – это возможно только для exe-прог. Если есть необходимость защищать библиотеку классов, то необходимо будет оставлять необфусцированными публичные члены классов и публичные классы.
Источники информации: