Обфускация кода — это процесс, в результате которого исходный код программы становится трудночитаемым. Имена переменных и функций становятся бессмысленными, а отступы, пробелы и переносы строк удаляются, что делает код неудобным для чтения. Иногда код переписывается более запутанным образом, чтобы его было сложнее анализировать.
Пример:
Простой код на JavaScript:
function greet(name) {
console.log(«Hello, » + name + «!»);
}
greet(«Alice»);
А так выглядит обфусцированный вариант:
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!».replace(/^/,String)){
while(c—)d=k||c.toString(a);k=[function(e){return d[e]}];e=function(){return’\\w+’};c=1};
while(c—)if(k)p=p.replace(new RegExp(‘\\b’+e(c)+’\\b’,’g’),k);return p}(‘2 0(1){3.4(«5, «+1+»!»);}0(«6»);’,7,7,’a|b|function|console|log|Hello|Alice’.split(‘|’),0,
Теперь понять, что делает этот код, становится сложнее. Однако, если его запустить, можно увидеть сообщение «Hello, Alice!».
Зачем это нужно?
Обфускация кода затрудняет копирование кода другими пользователями. Например, вы создали калькулятор на JavaScript с привлекательным дизайном. Без обфускации любой пользователь может нажать F12 в браузере, просмотреть формулу и скопировать её. Однако с обфускацией видны только запутанные алгоритмы, которые трудно понять.
В коде часто содержится конфиденциальная информация: проверка лицензий, защита от пиратства или ограничения доступа. Если злоумышленник получит доступ к исходному коду и быстро разберётся в нём, он легко сможет обойти защиту. Однако, если алгоритм сложен, это будет намного труднее.
Важно понимать, что обфускация не обеспечивает полную защиту, а лишь затрудняет доступ. Новичок не сможет ничего понять, а опытному хакеру потребуется время для анализа.
Методы обфускации
В зависимости от цели и типа проекта разработчики используют различные методы обфускации.
- Лексическая обфускация
Лексическая обфускация изменяет имена переменных, функций и классов, удаляет оформление и комментарии. Код становится визуально непонятным, его трудно читать и анализировать. Это похоже на переписывание текста: удаление пробелов, абзацев и замена слов на случайные символы.
Программа всё ещё работает, но понять, что происходит, сложно.
- Обфускация структур данных
Обфускация данных усложняет их понимание и делает их недоступными для посторонних. Это касается как структуры данных, так и порядка выполнения команд.
Например, обфускация структуры данных может включать в себя изменение порядка элементов, добавление дополнительных уровней вложенности и т.д. Это делает данные более запутанными и трудными для анализа.
Обфускация потока управления, в свою очередь, может включать в себя добавление дополнительных условий, циклов и переходов. Это усложняет понимание логики программы и делает её более запутанной.
-
Превентивная обфускация
Превентивная обфускация — это метод защиты кода от несанкционированного доступа. Она включает в себя использование специальных проверок, ловушек и шифрования. Если кто-то попытается получить доступ к коду, программа может выдать ошибку или даже полностью прекратить работу.
Превентивная обфускация делает код более устойчивым к взлому и анализу. Даже если кто-то получит доступ к коду, он не сможет его запустить без специальных «ключей».
Пройдите обучение по программе «Инженер по тестированию» в онлайн-университете Skypro. Это позволит вам глубже понять принципы работы с кодом и его отладки.
В течение двенадцати месяцев вы освоите навыки ручного и автоматического тестирования, а также научитесь тестировать мобильные приложения, веб-сайты и программное обеспечение. Вы также получите знания о работе с различными языками программирования.
Ручная и машинная обфускация
При ручной обфускации программист самостоятельно изменяет алгоритм, делая его непонятным для других. Он меняет имена, перестраивает логику и добавляет запутанные конструкции.
Ручная обфускация используется, когда необходимо скрыть определённую часть кода. Например, можно скрыть формулу или зашифровать значение. Это удобно, поскольку специалист полностью контролирует изменения. Однако этот процесс требует много времени и усилий.
Машинное обфускация — это процесс, в котором специальная программа (обфускатор) автоматически усложняет код. Она меняет имена, структуру, добавляет ловушки и дополнительные функции. Этот метод часто используется в крупных проектах, где необходимо быстро защитить данные перед публикацией.
Это быстрый и надёжный способ запутать большие объёмы информации. Однако иногда код становится настолько запутанным, что даже разработчик не может его понять.
Преимущества защитного кодирования
Существует несколько причин, по которым стоит потратить время на усложнение логики кода.
Без обфускации они могут легко найти и использовать эту информацию. С обфускацией данные будут скрыты и недоступны для автоматического анализа.. Обфускация скрывает строку с API-ключом, делая её невидимой для автоматических систем. Это снижает вероятность обратного проектирования (декомпиляции).
Существуют программы, такие как Java или .NET, которые позволяют преобразовывать готовые приложения обратно в читаемый код. Однако обфускация делает этот процесс бесполезным, поскольку в результате получаются только непонятные и запутанные переменные.
Несмотря на то, что обфускация обеспечивает защиту, у неё есть и недостатки.
К ним относятся неудобства, риски и ограничения, что увеличивает размер кода. Это может привести к проблемам при передаче кода через интернет или при хранении на диске.. В результате программа начинает работать медленнее. Это особенно заметно на мобильных устройствах или веб-сайтах, где каждый килобайт имеет значение. Например, программа весит 100 килобайт, а после обфускации — 150 килобайт. Это может сказаться на скорости загрузки сайта или производительности приложения.