Если вы не принимаете меры предосторожности с вашим кодом JavaScript, вы проводите жизнь для всех, кто хочет его клонировать. Но если ваши процессы программирования являются более чем одним кликом, атакующие предпочли бы клонировать программное обеспечение конкурента. Боты и другие просвечители, расчесывающие Интернет для учетных данных AWS или Azure, обычно не беспокоится с запутанным кодом - информация о входе в следующем веб-сайте также можно использовать для моего биткойна и может быть собрана с меньшими усилиями.
Обизуемый JavaScript использовал комплекс. Однако процесс стал значительно проще в течение последних нескольких лет. Сегодня даже небольшие компании могут и должны защищать свой код от посторонних глаз. В некоторых случаях получение в безопасности - это просто вызов пакета Node.js.
Следующие шаги вводят обычно используемый JavaScript ObFuscator, а также посмотрите на несколько других тем, связанных с проблемой под рукой.
Наш JavaScript Obfuscator живет в среде выполнения узла. Давайте начнем, проверяя используемые версии. Ниже приведен выходные данные, предусматриваете состояние версии на вашей рабочей станции действительно используемой для следующих шагов:
Tamhan @ Tamhan-ThinkPad: ~ $ Node --version
v8.12.0
Тамхан @ Тамхан-ThinkPad: ~ $ npm --version
6.4.1
JavaScript-Obfuscator должен быть установлен в глобальный кэш сборки вашей рабочей станции. Вызывать NPM с -грамм Параметр и не забудьте предоставить права суперпользователя - фактический процесс развертывания должен быть выполнен за несколько секунд.
Tamhan @ Tamhan-ThinkPad: ~ $ sudo npm Установить -G
JavaScript-Obfuscator.
[sudo] Пароль для Тамхана:
Отказ Отказ Отказ
+ javascript-obfuscator @ 0.18.1
Добавлены 103 пакеты из 162 авторов
в 4.4S
Тестирование запутывания работает лучше всего, если у нас есть какой-то «реальный» код. Итак, давайте начнем с небольшой веб-страницы HTML. Он загружает файл JavaScript под названием Worker.js, объявляет кнопку и содержит небольшой бит встроенных скриптов. Когда он загружен в браузере, нажмите кнопку, чтобы показать текстовое поле.
& lt; html & gt;
& lt; body & gt;
& lt; script src = "worker.js" & gt; & lt; / script & gt;
& lt; скрипт & gt;
Функциональный работник () {
оповещение (Доктор ());
}
& lt; / script & gt;
& lt; Кнопка типа = "Кнопка" onclick = "работника (
) "& gt; нажмите Me! & lt; / button & gt;
& lt; / body & gt;
& lt; / html & gt;
Working.js начинается со строковой переменной. Они являются классической целью атаки - если ром должен быть декодирован, ассемблер обычно начинается, ища таблицы, содержащие строковые последовательности. Кроме того, шифрование выполняется с использованием набора переменных с очень «говорящими» именами.
VAR MyString = "Привет из будущего ПЛК"
Функция dottetrick () {
Вар Чифрат;
Chiffrat = Rot13 (MyString);
вернуть чифрат;
}
Поскольку это не предназначено в качестве шифрования 101, мы должны осесть на сравнительно простой заменении шифра. ROT13 не сложно, но он может быть запрограммирован довольно доброго. Реализация Dsoares Поставляется с множеством «говорящих» переменных и обеспечивает множество пищи для нашего обфускатора.
Функция ROT13 (STR) {
var re = new regexp ("[a-z]", "i");
var min = 'a'.charcodeat (0);
var max = 'z'.chararcodeat (0);
CANCE VAR = 13;
VAR результат = "";
str = str.touppercass ();
для (var i = 0; i lt; str.length; i ++) {
Результат + = (Re.test (str [I])?
String.fromCharCode ((str.charcodeat
(i) - Min + Factor)% (MAX-MIN + 1)
+ мин): ул [I]);
}
возвратный результат;
}
Выполнение запутанного прогона кода просто. Вызывать JavaScript-Obfuscator. И пройдите в точку, чтобы сказать программу работать над всеми файлами, найденными в текущем рабочем каталоге. Это показывает результат на рабочей станции автора IBM:
Tamhan @ Tamhan-ThinkPad: ~ / futurebfushat /
код $ Javascript-Obfuscator.
Выключение файлов непосредственно в папку контейнера неэффективно, поскольку имена должны быть изменены до того, как они могут быть использованы. Лучший способ включает использование выход параметр. Если JavaScript-Obfuscator. Находит его, программа генерирует подпапку в текущем рабочем каталоге и сбрасывает результаты его труда.
Tamhan @ Tamhan-ThinkPad: ~ / futurebfushat / код $
JavaScript-Obfuscator. --output ./obfusca
Погрузитесь в папку «ObfusCa» и откройте новую версию Worker.js, чтобы пировать свои глаза на мерзость, которая показана сопровождающим этот шаг. Форматирование кода было плохо настроено. Имена методов, однако, остались прежними, поскольку они необходимы для внешних вызовов. Кроме того, струны теперь сидят в массиве, где злоумышленник может их удобно собирать.
var a0_0xb9e2 = ['Hello \ x20from \ x20future
\ x20plc ',' [A-Z] ', «Тест», «Charcodeat»];
JavaScript-Obfuscator поставляется с выбором алгоритмов String-Manglith, которые можно настроить с помощью - Скодирование массива Отказ Имейте в виду, что выходной каталог должен быть опустошен перед каждым вызовом, потому что забывание для этого приводит к «рекурсивному» запущению выходных файлов из предыдущего запуска.
Tamhan @ Tamhan-ThinkPad: ~ / futurebfushat / код $
JavaScript-Obfuscator. --output ./obfusca
Arring-Array-кодировка Base64
На данный момент наш выход Obfuscator выглядит по-другому - массив в верхней части файла сейчас гораздо менее читабелен. Это, однако, не решает все проблемы. Если вы выполните несколько циклов обфускации, вы в конечном итоге в конечном итоге окажусь от Mark-Up, аналогично одним, сопровождении этого шага:
var a0_0x31e5 = ['bgvuz3Ro', 'dgvzda ==', '
Znjvbunoyxjdb2rl ',' y2hckknvzgvbda == ','
dg9vchblcknhc2u = '];
Отказ Отказ Отказ
Отказ Отказ Отказ
var mystring = 'hello \ x20from \ x20future \ x20plc'
Обитаторы работают в поле давления между высокой производительностью и защитой кода. Один из способов решения проблемы включает в себя «радужные» элементы. Время выполнения - дорогие запутывания не добавляются ко всем узлам, а только для подмножества. Обнаружение, если узлы воздействуют или нет, обычно выполняются через генератор случайных чисел, чувствительность которого можно настроить.
Вышеупомянутый генератор случайных чисел выделяет номера от нуля до одного. Если число больше порогового значения, модификация не будет иметь место. Параметр stringarraythreshold. Для значения одного означает, что все номера меньше порогового значения, гарантируя, что каждая и каждая строка будет разорваться.
Tamhan @ Tamhan-ThinkPad: ~ / futurebfushat / код $
JavaScript-Obfuscator. --output ./obfusca
ASTRING-ARRAY-INCODING BASE64
--stringArraythreshold 1
Инструменты анализа, такие как прибыль Jsnice от небольшого базы кода. Учитывая, что JavaScript-Obfuscator перерывает код в AST в любом случае, ничто не говорит против вставления «Кода мусора» на лету. Поскольку эта функция добавляет значительное bloat, разработчики должны активировать его вручную по двум параметрам, показанным рядом с этим:
--dead-код-инъекция & lt; boolean & gt;
--dead-код-инъекционный порог & lt; номер и gt;
Запуск обфускатора с обоими --dead-код-инъекция правда и --dead-код-впрыск-порог 1 Установить приводит к файлованию около 2,5 кБ. Попытка предаться кодексу приводит к почти неустойчивой стенке в основном тавтологии JavaScript.
Перерыв кода в AST обеспечивает глубокие преобразования. Установка ControlFlowFlateing. Атрибут true сообщает программу, что она может вызовывать вызовы функций. Это приводит к значительному расширению генерируемого кода - имейте в виду, что результаты могут взять на себя достижение на 150 процентов.
Артефакты от отладки являются величайшим подарком в мире хакерам. Несколько вызовов на Console.log () и его друзья могут дать атакующим ценную информацию о том, что происходит внутри программы - хороший пример будет показан фрагментом:
Функция Доктор ()
{
Вар Чифрат;
Console.log («Подготовка к шифрованию
chiffrat ");
Chiffrat = Rot13 (MyString);
Console.log («возвращение Chiffrat»);
вернуть чифрат;
}
Мы можем попытаться повторно запугивать программу с помощью команды ниже. Он отключает функцию кэширования строки и должен отключить консольную регистрацию через перенаправление.
Tamhan @ Tamhan-ThinkPad: ~ / Desktop /
Deadstuff / 2018nov / Futurebfuscate / Code $
JavaScript-Obfuscator. --output ./obfusca
- строгающий массив, кодирующий ложь
--disableConsoleOutput true
Поставщики ObFuscator и браузера борются с длинной и горькой битвой о функции отладчика. Благодаря этому, «агрессивные» меры, такие как перенаправление консоли прерывателей по потоку программы, показанные сопровождающим этот шаг, обычно не работают долго.
Отладка: ложь,
DebugProtectionInterval: false,
Установка всего пакета Node.js для запутывания одного или двух файлов бессмысленно. Посещение Obfuscator.io. Чтобы получить доступ к онлайн-версии программы, которая живет в вашем браузере. Проверьте и объединитесь под основным входом, позвольте вам модифицировать поведение программы, как указано на шагах выше.
Команда разработчика поддерживает относительно подробную документацию, объясняющую способ, которым различные параметры командной строки взаимодействуют друг с другом. Просто посетите голова здесь Если вывод «Краткая помощь», показанная выше, не поможет вам достичь своей цели.
ETH Zurich предоставляет услугу De-pushation, размещенной в jsnice.org. Отказ Он использует нейронные сети, а база данных знаний состоит из существующего кода для определения имени переменных. Хотя сплющая форматирование обычно работает довольно хорошо, некоторые имена - такие как pixelsizetargetmax. В процедуре шифрования сопровождая этот шаг - может быть скорее забавным.
Функция ROT13 (PL $ 120) {
/ ** @type {! Regexp} * /
var insuffedregexp = Новое Regexp
(A0_0x395d («0x1»), «I»); вар
pixelsizetargetmax = "A" [«Charcodeat»] (0);
var zerosizeMax = "z" [«Charcodeat»] (0);
/ ** @type {номер} * /
var minh = 13;
/ ** @type {string} * /
var out = "";
Эта статья была первоначально опубликована в выпуске 283 журнала Creative Web Design Веб-дизайнер Отказ Купить проблему 283 здесь или же Подписаться на веб-дизайнер здесь Отказ
Статьи по Теме:
(Кредит на изображение: будущее) Сохранение ботов всегда - это ци..
SVG составлял с начала 2000-х годов, и все же есть еще интересные способы, к..
Этот пошаговый руководство установлен, чтобы показать, как выполнить �..
Это изображение Великого Восточного парохода Брунеля с 1858 года находи..
В этом семинаре мы покажем вам, как покрасить рыцарь, используя Фо�..
Представные сцены, которые оставляют вас с чувством удивления, застав�..
При лечении реалистичного 3D человеческого глаза, чтобы добавить в сво�..
Лучший город - это оживленный город, но эта занятая атмосфера не легкая..