Нужно ли обфусцировать JavaScript
JavaScript код работает в веб браузерах пользователей и доступен им для изучения и других действий. Если вы задались вопросом «Зачем мне обфусцировать мой код JavaScript?», то существует множество причин, по которым рекомендуется защищать код, например:
В статье, ссылка на которую приведена выше, объясняется различие между минимизацией и обфускацией исходного кода. Кроме способа их выполнения и простоты восстановления в исходный вид, полученный результат также различается производительностью.
Минимизированный код: скачивается с сервера быстрее, так как имеет меньший размер, время выполнения (производительность) такая же, как и у кода в исходном варианте.
Обфусцированный код: обычно имеет больший размер и практически всегда является более медленным (на десятки процентов), поскольку кроме основной функции, выполняются сопутствующие действия, необходимые для запуска кода.
Итак, минимизированный код: легко восстановить в исходную форму, производительность не падает.
Обфусцированный код: (очень) трудно восстановить в исходную форму, производительность кода падает. В обфусцированный код можно добавить самозащиту и защиту от отладки, а также бессмысленные фрагменты кода, которые сильно усложнят его анализ.
Вывод: обфусцируйте только тот код, который вы хотите защитить. То есть имеет смысл обфусцировать свой код, но нет смысла обфусцировать код популярных JavaScript библиотек, которые и так общедоступны в исходном виде.
Программы для минимизации и обфускации JavaScript
В этой статье будут рассмотрены различные инструменты и способы защиты и оптимизации JavaScript скода.
Функции btoa и atob
В простых случаев для защиты от парсеров не нужны громоздкие инструменты обфускации и достаточно просто «спрятать» некоторые строки.
Функции btoa и atob являются встроенными функциями JavaScript и всегда доступны.
Функция btoa переводит указанную строку в набор символов (работает наподобие Base64), а функция atob выполняет обратную операцию.
Принцип действия в двух строках:
btoa('Some text'); // U29tZSB0ZXh0
atob('U29tZSB0ZXh0'); // Some text
Итак, посмотрим, во что превратиться строка «Для просмотра ссылки Войдиили Зарегистрируйся»:
<script>
document.write(btoa('https://google.com'));
</script>
Результат:
aHR0cHM6Ly9nb29nbGUuY29t
Теперь в моём простом коде делаем с помощью функции atob обратное преобразование этой строки, получаем:
if (/(www\.)?google\.com/.test(window.location.hostname)) {
}
else {
window.location = atob('aHR0cHM6Ly9rYWxpLnRvb2xz');
}
Данные код делает именно то, что нужно — проверяет на каком домене сайт был открыт и в случае если это не kali.tools, то делает редирект на kali.tools. При этом при проксировании сайта, парсеры не видят строку kali.tools и не делают никаких изменений в этом фрагменте кода.
JavaScript Obfuscator
JavaScript Obfuscator — это мощнейший обфускатор с множеством опций. С помощью JavaScript Obfuscator будет получен код, в котором действительно трудно разобраться. Дополнительно JavaScript Obfuscator может встроить защиту от отладки (при открытии панели «Отладка» в Инструментах веб-мастера в браузере, браузер будет зависать), самозащиту кода (вставка бессмысленных фрагментов и пр.). У JavaScript Obfuscator множество тонкий опций подстройки процесса обфускации.
Данный инструмент имеет как графический интерфейс, так и интерфейс командной строки.
JavaScript Obfuscator онлайн
Вместо установки на компьютер, вы можете использовать онлайн сервис от авторов, он расположен по адресу: Для просмотра ссылки Войдиили Зарегистрируйся
Установка JavaScript Obfuscator
Установка в Kali Linux
sudo apt install npm
sudo npm install --save-dev javascript-obfuscator
sudo ln -s ~/node_modules/javascript-obfuscator/bin/javascript-obfuscator /usr/local/bin
javascript-obfuscator -h
Установка в BlackArch
sudo pacman -S npm
sudo npm install --save-dev javascript-obfuscator
sudo ln -s ~/node_modules/javascript-obfuscator/bin/javascript-obfuscator /usr/local/bin
javascript-obfuscator -h
Как установить графический интерфейс JavaScript Obfuscator
Установка веб интерфейса JavaScript Obfuscator в Kali Linux
sudo apt remove cmdtest
sudo apt install npm
sudo npm install -g yarn
sudo npm cache clean -f
sudo npm install -g n
sudo n stable
git clone Для просмотра ссылки Войдиили Зарегистрируйся
cd javascript-obfuscator-ui/
yarn
npm run updatesemantic
npm run webpack:dev
node server.js
После этого веб-интерфейс будет доступен по адресу Для просмотра ссылки Войдиили Зарегистрируйся
Установка веб интерфейса JavaScript Obfuscator в BlackArch
sudo pacman -S npm yarn
git clone Для просмотра ссылки Войдиили Зарегистрируйся
cd javascript-obfuscator-ui/
yarn
npm run updatesemantic
npm run webpack:dev
node server.js
После этого веб-интерфейс будет доступен по адресу Для просмотра ссылки Войдиили Зарегистрируйся
Чтобы в командной строке обфусцировать JavaScript код в файле script.js:
javascript-obfuscator script.js
Например, с опциями по умолчанию код:
if (/(www\.)?kali\.tools/.test(window.location.hostname)) {
}
else {
window.location = atob('aHR0cHM6Ly9rYWxpLnRvb2xz');
}
Превращается в:
var _0x2001=['test','aHR0cHM6Ly9rYWxpLnRvb2xz','location','hostname'];(function(_0x20ce42,_0x200145){var _0x20e03c=function(_0x46b9e3){while(--_0x46b9e3){_0x20ce42['push'](_0x20ce42['shift']());}};_0x20e03c(++_0x200145);}(_0x2001,0xed));var _0x20e0=function(_0x20ce42,_0x200145){_0x20ce42=_0x20ce42-0x0;var _0x20e03c=_0x2001[_0x20ce42];return _0x20e03c;};if(/(www\.)?kali\.tools/[_0x20e0('0x3')](window['location'][_0x20e0('0x2')])){}else{window[_0x20e0('0x1')]=atob(_0x20e0('0x0'));}
JavaScript код работает в веб браузерах пользователей и доступен им для изучения и других действий. Если вы задались вопросом «Зачем мне обфусцировать мой код JavaScript?», то существует множество причин, по которым рекомендуется защищать код, например:
- Не позволяйте никому просто копировать/вставлять вашу работу. Это особенно важно для 100% клиентских проектов, таких как игры HTML5;
- Удаление комментариев и пробелов, которые не нужны. Ускорение загрузки и повышение сложности для понимания;
- Защита работ, которые ещё не оплачены. Вы можете показать свою работу клиенту, зная, что у него не будет исходного кода, пока счёт не будет оплачен;
- Защита от проксирования сайта, программы для проксирования могут менять все внутренние ссылки, благодаря обфускации JavaScript можно защититься от автоматических парсеров.
В статье, ссылка на которую приведена выше, объясняется различие между минимизацией и обфускацией исходного кода. Кроме способа их выполнения и простоты восстановления в исходный вид, полученный результат также различается производительностью.
Минимизированный код: скачивается с сервера быстрее, так как имеет меньший размер, время выполнения (производительность) такая же, как и у кода в исходном варианте.
Обфусцированный код: обычно имеет больший размер и практически всегда является более медленным (на десятки процентов), поскольку кроме основной функции, выполняются сопутствующие действия, необходимые для запуска кода.
Итак, минимизированный код: легко восстановить в исходную форму, производительность не падает.
Обфусцированный код: (очень) трудно восстановить в исходную форму, производительность кода падает. В обфусцированный код можно добавить самозащиту и защиту от отладки, а также бессмысленные фрагменты кода, которые сильно усложнят его анализ.
Вывод: обфусцируйте только тот код, который вы хотите защитить. То есть имеет смысл обфусцировать свой код, но нет смысла обфусцировать код популярных JavaScript библиотек, которые и так общедоступны в исходном виде.
Программы для минимизации и обфускации JavaScript
В этой статье будут рассмотрены различные инструменты и способы защиты и оптимизации JavaScript скода.
Функции btoa и atob
В простых случаев для защиты от парсеров не нужны громоздкие инструменты обфускации и достаточно просто «спрятать» некоторые строки.
Функции btoa и atob являются встроенными функциями JavaScript и всегда доступны.
Функция btoa переводит указанную строку в набор символов (работает наподобие Base64), а функция atob выполняет обратную операцию.
Принцип действия в двух строках:
btoa('Some text'); // U29tZSB0ZXh0
atob('U29tZSB0ZXh0'); // Some text
Итак, посмотрим, во что превратиться строка «Для просмотра ссылки Войди
<script>
document.write(btoa('https://google.com'));
</script>
Результат:
aHR0cHM6Ly9nb29nbGUuY29t
Теперь в моём простом коде делаем с помощью функции atob обратное преобразование этой строки, получаем:
if (/(www\.)?google\.com/.test(window.location.hostname)) {
}
else {
window.location = atob('aHR0cHM6Ly9rYWxpLnRvb2xz');
}
Данные код делает именно то, что нужно — проверяет на каком домене сайт был открыт и в случае если это не kali.tools, то делает редирект на kali.tools. При этом при проксировании сайта, парсеры не видят строку kali.tools и не делают никаких изменений в этом фрагменте кода.
JavaScript Obfuscator
JavaScript Obfuscator — это мощнейший обфускатор с множеством опций. С помощью JavaScript Obfuscator будет получен код, в котором действительно трудно разобраться. Дополнительно JavaScript Obfuscator может встроить защиту от отладки (при открытии панели «Отладка» в Инструментах веб-мастера в браузере, браузер будет зависать), самозащиту кода (вставка бессмысленных фрагментов и пр.). У JavaScript Obfuscator множество тонкий опций подстройки процесса обфускации.
Данный инструмент имеет как графический интерфейс, так и интерфейс командной строки.
JavaScript Obfuscator онлайн
Вместо установки на компьютер, вы можете использовать онлайн сервис от авторов, он расположен по адресу: Для просмотра ссылки Войди
Установка JavaScript Obfuscator
Установка в Kali Linux
sudo apt install npm
sudo npm install --save-dev javascript-obfuscator
sudo ln -s ~/node_modules/javascript-obfuscator/bin/javascript-obfuscator /usr/local/bin
javascript-obfuscator -h
Установка в BlackArch
sudo pacman -S npm
sudo npm install --save-dev javascript-obfuscator
sudo ln -s ~/node_modules/javascript-obfuscator/bin/javascript-obfuscator /usr/local/bin
javascript-obfuscator -h
Как установить графический интерфейс JavaScript Obfuscator
Установка веб интерфейса JavaScript Obfuscator в Kali Linux
sudo apt remove cmdtest
sudo apt install npm
sudo npm install -g yarn
sudo npm cache clean -f
sudo npm install -g n
sudo n stable
git clone Для просмотра ссылки Войди
cd javascript-obfuscator-ui/
yarn
npm run updatesemantic
npm run webpack:dev
node server.js
После этого веб-интерфейс будет доступен по адресу Для просмотра ссылки Войди
Установка веб интерфейса JavaScript Obfuscator в BlackArch
sudo pacman -S npm yarn
git clone Для просмотра ссылки Войди
cd javascript-obfuscator-ui/
yarn
npm run updatesemantic
npm run webpack:dev
node server.js
После этого веб-интерфейс будет доступен по адресу Для просмотра ссылки Войди
Чтобы в командной строке обфусцировать JavaScript код в файле script.js:
javascript-obfuscator script.js
Например, с опциями по умолчанию код:
if (/(www\.)?kali\.tools/.test(window.location.hostname)) {
}
else {
window.location = atob('aHR0cHM6Ly9rYWxpLnRvb2xz');
}
Превращается в:
var _0x2001=['test','aHR0cHM6Ly9rYWxpLnRvb2xz','location','hostname'];(function(_0x20ce42,_0x200145){var _0x20e03c=function(_0x46b9e3){while(--_0x46b9e3){_0x20ce42['push'](_0x20ce42['shift']());}};_0x20e03c(++_0x200145);}(_0x2001,0xed));var _0x20e0=function(_0x20ce42,_0x200145){_0x20ce42=_0x20ce42-0x0;var _0x20e03c=_0x2001[_0x20ce42];return _0x20e03c;};if(/(www\.)?kali\.tools/[_0x20e0('0x3')](window['location'][_0x20e0('0x2')])){}else{window[_0x20e0('0x1')]=atob(_0x20e0('0x0'));}