Обфускация [кода] — преднамеренное сокрытие программного кода путём его запутывания с сохранением работоспособности [продукта].
Процедура выполняется вручную (долго, сложно привести в исходный вид — то есть «деобфусцировать») или автоматически (быстро, выполняется специальными программами «обфускаторами» с функцией «деобфускации»). Задачу выполняет программист с той целью, чтобы никакой другой программист не смог прочитать программный код и расшифровать алгоритмы обфускатора.
![Что такое обфускация — простыми словами о теме обфускации кода Что такое обфускация — простыми словами о теме обфускации кода](upload/news/terms20201211-1.png)
Для чего нужен обфусцированный код
Прежде всего, обфускация кода делается для безопасности программного продукта. Разработчик может преследовать и коммерческие цели (конкурентная защита от подделки или сокрытие значений/логики). В результате получается сжатый (удалены неиспользуемые классы, атрибуты, методы) или оптимизированный (проверены и переписаны операторы) софт. Обфусцированный код применяется, например, на Android и Java (пример оптимизатора: R8 для Android; ProGuard для Java и Android).
Что такое обфускация кода с точки зрения эффективного управления разработкой
При управлении разработкой оценивается целесообразность и эффективность обфускации. Другими словами, на что вам, как руководителю, следует обращать внимание при выборе исполнителя или постановке такой задачи в принципе?
-
Скрытность
Оцените степень сокрытия алгоритмов управления программой. Целесообразно ли проведение control-flow обфускации (применяется, например в Apple FairPlay для библиотек iTunes или iOS), когда отслеживается обновление управляющей переменной и заменяется переход к узлу диспетчера переходами к следующему блоку, что соответствует новому значению управляющей переменной.
-
Стоимость
Рентабельность метода обфускации. Необходимо оценить, насколько оправданы затраты, чтобы выбранный метод можно было широко применять в нескольких аналогичных приложениях.
-
Защита
В какой степени преобразованный код нечитаем в сравнении с исходным. Метрики сложности программного обеспечения определяют различные меры защиты. Например, количество содержащихся в нем предикатов, глубина иерархии, уровни вложенности и так далее. Цель хорошего проектирования программного обеспечения — минимизировать сложность на основе этих параметров, когда как цель обфускации — максимально усложнить.
-
Стабильность
Определяет, насколько хорошо преобразованный код может противостоять автоматическим атакам деобфускации. Наивысшая степень устойчивости — одностороннее преобразование, которое не может быть отменено деобфускатором. Например, обфускация удаляет такую информацию, как форматирование исходного кода.
![Что такое обфускация — простыми словами о теме обфускации кода Что такое обфускация — простыми словами о теме обфускации кода](upload/news/terms20201211-2.gif)
Если программист или компания разработчиков выпускают ценное программное обеспечение (например, приложение для iOS или Android) с закрытым исходным кодом, то обфускация должна быть частью процесса разработки. Это усложняет взлом, анализ и отладку кода извне.
Добыть полезную информацию, коммерческую тайну или пользовательские учётные данные будет значительно сложнее, чем если бы разработчик не проводил процедуру обфускации.
С другой стороны, злоумышленники используют обфускацию в целях сокрытия или интеграции вредоносного кода в безопасных на первый взгляд программных продуктах. Задача антивирусов заблаговременно обнаруживать такие методы в запускаемых программах.
![Логотип компании «ZEL-Услуги» Логотип компании «ZEL-Услуги»](upload/news/logo-zel.png)
Обратитесь в компанию ИТ-аутсорсинга для дальнейшей экспертной поддержки и консультации по этой теме и любым другим техническим вопросам.