Мартынюк В.М., Павлов В.Г.
Национальный авиационный университет, Украина
Обфускация программного кода, как эффективный способ защиты программ от исследования
Возрастающая
информатизация общества формирует острую необходимость в защите различного
программного обеспечения (ПО).
Разработчики
ПО всё чаще приходят к выводу, что для успешного продвижения их продукта и
получения от этого прибыли необходимо искать и внедрять наиболее эффективные
методы защиты программного продукта. Качественная защита от нелицензионного
использования программного обеспечения не позволит кому-либо использовать его,
не заплатив соответствующее вознаграждение разработчику.
Хотя
эффективная защита ПО также стоит недешево, но при ее внедрении, следует
учитывать, что понесенные затраты с лихвой окупаются за счет продажи лицензий.
В
настоящее время существуют несколько методов защиты ПО, а именно: защита
основанная на выполнении определенных программ на сервере, на установке
подлинности кода, на шифровании кода и т.п. Среди них, несомненно,
перспективным и сравнительно новым методом является обфускация.
Как
правило, для обхода защитных механизмов ПО взломщику необходимо сначала изучить
принцип их работы, то есть разобраться в программном коде модулей защиты и
понять то, как они взаимодействуют с защищаемой программой. Если усложнить
решение этой задачи, то это позволит уменьшить вероятность взлома.
Обфускация
- это метод защиты ПО от взлома, путем применения приемов, усложняющих изучение
структуры самой программы.
Смысл
процесса, называемого обфускацией в том, что бы усложнить программный код и тем
самым скрыть логические связи, которые могли бы показать взломщику принцип
работы защитных механизмов ПО, и, следовательно, способствовать взлому.
[1]
Зачастую
обфускацию используют в сочетании с другими методами защиты, что дает
возможность значительно повысить
уровень зашиты ПО.
Лишним
аргументом в пользу применения в защите ПО обфускации является то, что
стоимость ее использования сравнительно ниже других методов защиты. Может этим
можно объяснить стремительное развитие этого метода в последнее время.
Поэтому
есть смысл поподробнее рассмотреть данный метод защиты ПО.
Процесс
обфускации должен удовлетворят следующим требованиям:
●
код программы должен после обфускации
существенно отличаться от исходного, но при функционально обязан быть
тождественным;
●
изучение программного кода программы
после обфускации должно быть более сложным и трудоемким, чем до нее;
●
создание программы, которая смогла бы восстановить
исходный вид ПО до обфускации, должно
быть невозможным. [2]
Так
как программный код может быть представлен как в виде команд на исходном языке
программирования, так и в виде двоичного кода, полученного в результате
компиляции, то также существует два
соответствующих уровня обфускации:
●
низший - на уровне двоичного кода;
●
высший - на уровне исходного языка
программирования.
На
высшем уровне проводить обфускацию существенно легче, так как отсутствует
зависимость от архитектуры процессоров. Обфускация на низком уровне изучена пока
еще достаточно мало, так как значительно сложнее.
В
зависимости от способа модификации кода, различают следующие виды обфускации:
●
лексическая обфускация - самый простой
вид обфускации, заключается в форматировании кода программы, изменении его
структуры, что ведет к невозможности его прочтения;
●
обфускация данных - основана на
трансформации структур данных и в свою очередь делиться на три группы:
○
обфускация хранения,
○
обфускация соединения,
○
обфускация переупорядочивания;
●
обфускация управления - основана на
запутывании потока выполнения программы;
●
превентивная обфускация - основана на
недостатках программных комплексов по деобфускации.
Деобфускация - процесс обратный
обфускации. Он направлен на восстановление первоначального кода, который был
подвержен обфускации. Главные методы деобфускации:
●
нахождение сложных конструкций и их
анализ;
●
сопоставление полученных образцов;
●
обнаружение неиспользуемых фрагментов
кода;
●
анализ потока данных;
●
статический анализ;
●
динамический анализ.
Статический
анализ представляет собой технологии проведения анализа программ без
необходимости их запуска. При этом используются специальные программные средства, которые позволяют
узнать требуемую информацию об исследуемой программе. Данные, полученные на
основании статического анализа, считаются неточными, так как основаны на
прогнозе возможного поведения программы.
Динамический
анализ проводится путем запуска программы и исследования работы, как полностью,
так и определенной ее части. Данные, полученные с помощью динамического
анализа, считаются более точными, но обладают низкой повторяемостью. [3]
Таким
образом, проведение обфускации должно учитывать методы и средства, которые
могут быть использованы взломщиком для ее нейтрализации. Этого можно достичь
путем увеличения объема вычислений и усложнением алгоритма выполняемых
функциональных преобразований.
Литература:
1.
Касперски
К. Техника и философия хакерских атак – записки мыща / Касперски К. – М.:
СОЛОН-Пресс, 2004. – 272с.
2.
Панов
А.С. Реверсинг и защита программ от взлома / Панов А.С. – СП.: БХВ – Петербург, 2006. – 256 с.
3.
Касперски
К. Искусство дизассемблирования / Касперски К., Рокко Е. – СПб.: БХВ-Перербург,
2008. – 896 с.