В интернете много программ, которые помогают разобрать чужой код и посмотреть, как он работает. Поэтому важно прятать свой код, чтобы никто не смог его скопировать или изменить.
В статье разберем, как обфускация помогает защитить алгоритм и какие инструменты для этого используют.
Как работает обфускация кода
Обфускация кода — это способ, при котором исходный код программы изменяется так, что его трудно понять. Имена становятся бессмысленными, например, calculate Sum()
превращается в a()
.Убирают все отступы, пробелы, переносы строк — читать становится неудобно. А иногда код переписывают более запутанным способом — так его сложнее анализировать.
Пример:
Простой код на 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 в браузере, посмотрит формулу и скопирует ее. А с обфускацией видны только непонятные и запутанные алгоритмы.
Еще в коде часто бывает секретная информация: проверка лицензии, защита от пиратства или ограничения доступа. Если мошенник откроет исходник и быстро во всём разберется, он легко обойдет преграду. А если алгоритм запутан, сделать это будет намного сложнее.
Важно понимать, что обфускация не защитит полностью, а только затруднит доступ. Новичок не поймет вообще ничего, а опытному хакеру нужно будет время, чтобы разобраться.
Виды обфускации
В зависимости от цели и типа проекта разработчики используют разные методы обфускации.
- Лексическая обфускация
Лексическая обфускация меняет имена переменных, функции, классы, удаляет оформление и комментарии. Код становится визуально непонятным, его трудно читать и анализировать. Это как переписать правильный текст. Убрать пробелы, абзацы и заменить слова на случайные буквы.Пример:
function calculateTotal(price, tax) {
return price + tax;
}
После лексической обфускации:
function a(b, c) {
return b + c;
}
Программа всё еще работает, но понять, что происходит, сложно. - Обфускация структур данных
Обфускация структур данных меняет организацию и прячет важные данные, например строки, ключи, конфигурации. Так сложнее понять, что хранится в коде, и «вытащить» информацию.Пример:
Исходник:
let message = "Hello";
Обфускация:
let parts = ["He", "ll", "o"];
let message = parts.join("");
Сразу непонятно, что строка"Hello"
— это просто текст, а не что-то закодированное. - Обфускация потока управления
Обфускация потока управления меняет порядок выполнения команд, добавляет лишние переходы, условия и циклы. При таком способе, даже если код остается читаемым, трудно сразу понять, в каком порядке, что выполняется и зачем.Пример:До обфускации:if (user.isAdmin) {
allowAccess();
} else {
denyAccess();
}
После обфускации:
var x = 1;
switch (x) {
case 1:
if (user.isAdmin) {
x = 2;
} else {
x = 3;
}
break;
case 2:
allowAccess();
break;
case 3:
denyAccess();
break;
}
Логика та же, но код стал более запутанный и растянутый. - Превентивная обфускация
Превентивная обфускация защищает кода от несанкционированного анализа или взлома. При таком способе используют специальные проверки, ловушки и шифрование. Если кто-то попытается «взломать» систему, программа зависнет, выдаст ошибку или вообще ничего не покажет.Пример:
if (typeof debugger !== "undefined") {
while(true) {} // Зависание
}
После обфускацииlet key = decrypt("x3k4d2", secretKey);
if (key !== expectedKey) {
throw new Error("Access Denied");
}
Даже если кто-то получит этот код, всё равно не сможет понять или запустить его без «ключей».
Пройдите курс «Инженер по тестированию» в онлайн-университете Skypro. Еще больше разберетесь в том, как работает код и как его исправлять. За двенадцать месяцев научитесь проводить ручное и автоматическое тестирование, тестировать мобильные приложения, сайты и ПО, работать с разными языками программирования.
Ручная и машинная обфускация
При ручной обфускации программист сам вручную изменяет алгоритм и делает его непонятным. Меняет имена, перестраивает логику, добавляет запутанные конструкции. Ручную обфускацию используют, когда хотят запутать какую-то одну часть кода. Например, скрыть формулу или зашифровать значение. Это удобно, так как специалист полностью контролирует изменения. Но еще это очень долгий и трудоемкий процесс.
Машинная обфускация — специальная программа (обфускатор), которая автоматически запутывает код. Меняет имена, структуру, добавляет ловушки и лишний функционал. Часто используют в больших проектах, где нужно быстро защитить всё перед публикацией. Это быстрый и надежный способ, которым можно запутать большие объемы данных. Но иногда код становится практически нечитаемым даже для программиста.
Преимущества защитного кодирования
Есть несколько причин, почему лучше потрудиться и запутать логику.
- Трудно украсть. Когда создаете приложение, весь код можно просто скопировать и перенести в другую программу. А с обфускацией чужой человек не сможет этого сделать, так как не поймет, как система работает.
- Сложно взломать приложение. Если в коде есть защита, например проверка лицензии, ограничения в бесплатной версии или проверка «премиум-доступа». Без обфускации хакер просто откроет алгоритм, найдет нужное место и отключит проверку. А с обфускацией мошеннику будет намного труднее понять, как обойти защиту.
- Прячет важные данные. Часто в коде хранят логины, ключи доступа, названия функций, тексты сообщений. Если оставить «как есть», любой откроет код и увидит конфиденциальную информацию. Обфускация прячет или шифрует данные от посторонних.
- Мешает автоматическому анализу. Есть боты или программы, которые автоматически ищут уязвимости или важные данные: ключи, пароли, логины в коде. Обфускация прячет строку с API-ключом, и автоматические системы его просто не видят.
- Снижает риск обратного проектирования (декомпиляции). Есть программы, например Java или .NET, которые превращают готовые приложения обратно в читаемый код. Обфускация делает этот процесс бессмысленным — получаются только непонятные и запутанные переменные.
Недостатки обфускации
Хотя обфускация защищает, у нее есть и обратная сторона — неудобства, риски и ограничения.
- Код становится трудночитаемым. Обфускация сильно запутывает названия переменных, функций и структуру кода. Даже если логика ясна, связь между частями теряется, потому что названия другие. В итоге через несколько недель даже сам автор не сможет быстро разобраться в алгоритмах программы.
- Сложно отлаживать. Если обфусцированный код сломается, искать ошибки будет трудно. Вы не сможете понять, что конкретно пошло не так. Все имена и сообщения об ошибках нечитаемы. Например, вместо сообщения «Ошибка в функции
checkUser()»
получите «Ошибка в функцииa1b2()
». - Обфускация ломает код, если настроена неправильно. Некоторые обфускаторы путают систему слишком сильно, и она перестает работать. Особенно если в коде используют динамические вызовы, рефлексию или сторонние библиотеки. Например, если используете функцию
eval()
или загружаете модули по имени, обфускатор изменит имя и всё сломается. - Увеличивает размер. Некоторые виды обфускации добавляют в логику лишние символы и фрагменты. Из-за этого программа работает медленнее. Это особенно важно для мобильных устройств или веб-сайтов, где учитывается каждый килобайт. Например, программа весит 100 КБ, а после обфускации — 150 КБ. Это влияет на загрузку сайта или производительность приложения.
Инструменты для обфускации
Пять самых популярных инструментов для обфускации.
- ProGuard — для Java и Android
ProGuard — это инструмент, который используют для обфускации и оптимизации Java-кода. Очень популярен в разработке Android-приложений. Программа удаляет неиспользуемую часть, уменьшает размер приложения и меняет имена классов и методов на непонятные. Например, пишите обычный читаемый код, а ProGuard меняет функции и переменные на непонятные буквы и цифры. Код становится меньше, и понять, что он делает, трудно. - JavaScript Obfuscator — для JavaScript
JavaScript Obfuscator защищает коды, которые написаны на JavaScript. Этот инструмент часто используют для веб-сайтов. Obfuscator переделывает код в трудночитаемый: меняет названия переменных и функций, прячет строки, делает структуру максимально запутанной. Иногда из-за такой путаницы алгоритм становится больше и сайт загружается дольше. - ConfuserEx — для C# и .NET
ConfuserEx — бесплатный и мощный инструмент для защиты программ на C#, Windows-программ или игр, которые создали на .NET. Программа меняет имена всех частей кода на непонятные. Например, вместо обычных «проверить пароль» или «войти» — случайный набор букв и цифр. А еще шифрует строки и добавляет защиту от отладки. ConfuserEx хорошо подходит для настольных .NET-приложений и игр на Unity. - Dotfuscator — для .NET и C#
Dotfuscator — платная защита от компании Microsoft, которая встроена в Visual Studio. Этот инструмент тоже используют для кода на C# или других языках для платформы .NET. Dotfuscator делает код сложным и нечитаемым. Переименовывает все части алгоритма, чтобы их было трудно понять и перевести обратно в исходный алгоритм. А еще можно указать, какие части нужно обфусцировать, а какие — нет. Dotfuscator часто используют в корпоративных приложениях — там, где нужны надежность и качество.
Курс «Инженер по тестированию» построен на практике — сразу начнете тренироваться на реальных проектах. Занятия проходят онлайн — удобно совмещать с работой и личной жизнью. Опытные преподаватели объяснят всё простыми словами, поделятся профессиональными лайфхаками, а кураторы из отдела заботы помогут не бросить всё на полпути.
Главное: что такое обфускация кода и как это работает
- Обфускация — это способ запутать программный код, чтобы его было трудно читать, копировать и взламывать.
- Лексическая обфускация, обфускация структур данных, обфускация потока управления и превентивная обфускация. Пять видов, которые защищают приложения от несанкционированного доступа и копирования.
- Ручная обфускация лучше подходит, когда нужно защитить уникальные алгоритмы или важные данные. А машинная — для массовой обработки кода (быстро скрыть большое количество файлов).
- ProGuard, JavaScript Obfuscator, ConfuserEx, Dotfuscator — самые популярные инструменты для обфускации.
Добавить комментарий