Security

Обфускация и деобфускация кода: всё про этот метод защиты ПО

Lorem ipsum dolor

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

  • выяснить структуру и алгоритмы скриптов;
  • выяснить, как  программный код взаимодействует с защитным ПО.

Подобное «исследование» программ именуется «реверсивной инженерией».

Обфускация(от английского «obfuscation» - «запутывание») — это способ защиты программ, который усложняет процедуру реверсивной инженерии над исходным  программным кодом.

 

Обфускация кода

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

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

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

  • шифрование программного кода;
  • установка подлинности скриптов;
  • «водяной знак» в коде;
  • выполнение программы на стороне сервера и др.

В качестве единственного инструмента защиты кода, обфускация не способна дать 100%-ую защиту.

 

Обфускация: алгоритмы и оценка процесса

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

  • общего характера — это алгоритмы, рассчитанные для различных языков программирования, применяющие общие методы и подходы к «запутыванию»;
  • специализированного характера — это алгоритмы, рассчитанные на языки программирования, которые  обладают определенными свойствами.

Примеры алгоритмов обфускации:

  1. Алгоритм Колбера — это алгоритм общего характера, который наиболее распространен при обфускации кода.
  2. Chenxi Wangs — это специализированный алгоритм для высокоуровневых языков программирования.

Обфускация и ее алгоритмы измеряются несколькими параметрами, которые характеризуют эффективность ее применения, например:

  • устойчивость — характеризует уровень сложности для реализации реверсивной инженерии над  программным кодом после обфускации;
  • эластичность — характеризует уровень защищенности  программного кода после обфускации от использования специальных программ для деобфускации (обратный процесс обфускации);
  • цена «запутывания» характеризует объем ресурсов компьютера, который будет необходим для запуска обфусцированного  программного кода и  его отношение к объему ресурсов, необходимых для запуска необфусцированного программного кода;
  • время «распутывания» это условный показатель, обозначающий минимальное количество затраченного времени, которое необходимо небольшой команде специалистов для изучения «запутанного» кода, прошедшего обфускацию.

 

Обфускация кода: виды

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

  1. Лексическая обфускация — это наиболее распространенный вид «запутывания», который основывается на изменении кода таким образом, чтобы он стал нечитабельным, неинформативным и трудноизучаемым. При таком подходе удаляются все комментарии, пробелы и отступы; заменяются идентификаторы: имена переменных, массивов, функций, процедур и т. д.; добавляются «мусорные» операции; изменяется расположение блоков кода и др.
  2. Обфускация данных — это довольно сложная реализация обфускации, которая трансформирует структуру данных. Например, она изменяет существующие типы данных в программе или вообще использует и внедряет собственные типы данных, усложняет структуру данных путем изменения соединений между зависимыми и независимыми данными программы, изменяет последовательность объявления переменных, переупорядочивает методы и массивы и др.
  3. Обфускация управления — данная обфускация  запутывает последовательность выполнения программных скриптов.
  4. Превентивная обфускация — это способ предотвратить применение киберпреступниками деобфускаторов и декомпиляторов, нацеленных на исследование кода программы.

 

Деобфускация

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

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

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

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

Получается, что деобфускация кода — это и есть оптимизация кода. Но и это еще не все. К процессу деобфускации кода можно отнести еще процедуру декомпиляции программного кода. При декомпиляции программ из двоичного кода на выходе получается более-менее понятное представление исходного кода программы на каком-либо языке программирования высокого уровня. А это значит, что процедуру реверсивной инженерии после декомпиляции осуществить легче.

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

В конечном итоге  получаем, что деобфускация — это не какая-то конкретная программа, а это комплекс мер, связанных с оптимизацией, декомпиляцией и анализом обфусцированного кода.

 

Заключение

Обфускация кода — это всего лишь дополнительный инструмент для защиты кода от постороннего несанкционированного вмешательства. В качестве единственного инструмента защиты данный процесс практически не имеет ценности. Но в совокупности с другими инструментами защиты он существенно снижает вероятность изучения исходного кода программы.

Схожие статьи

Сканер уязвимостей. Spectre-Meltdown
Security

Сканер уязвимостей. Spectre-Meltdown

Как защитить личные данные в интернете и остаться анонимным?
Security

Как защитить личные данные в интернете и остаться анонимным?

Сквозное шифрование данных на компьютере для защиты своих данных
Security

Сквозное шифрование данных на компьютере для защиты своих данных

SOAP: система безопасности и персонализации, службы каталогов
Security

SOAP: система безопасности и персонализации, службы каталогов