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