Як приховати свій код JavaScript з джерела перегляду
Feb 18, 2026
Як
Якщо ви не вживаєте заходів за допомогою вашого коду JavaScript, ви робите життя легким для тих, хто хоче це клонувати. Але якщо ваші процеси програмування більше ніж один клік, а зловмисники воліють клонувати програмне забезпечення конкурента. Боти та інші зловмисники, що розчісують Інтернет для AWS або Azure Editions, як правило, не турбуються з Obfuscated Code - наступний веб-сайт для входу веб-сайту також може бути використаний для мого Bitcoin і може бути зібраний меншим зусиллям.
Заплутаний JavaScript використовується для того, щоб бути складним. Однак процес став значно простішим протягом останніх кількох років. Сьогодні навіть малі компанії можуть і повинні захищати свій код від чужих очей. У деяких випадках, отримуючи безпечний - це лише виклик пакету Node.js.
Наступні кроки вводять загальноприйнятий JavaScript Obfuscator, а також подивіться на кілька інших тем, пов'язаних з проблемою під рукою.
Найкраще антивірусне програмне забезпечення
15 основних засобів JavaScript
01. Перевірка версії
Наш JavaScript Obfuscator живе в середовищі Runtime вузла. Давайте почнемо, перевіряючи, що використовуються версії. Нижче наведено вихідний стан, який знаходиться у робочій станції, який використовується для робочої станції, використовується для наступних етапів:
JavaScript-Obfuscator повинен бути встановлений у кеш Global Consembly вашої робочої станції. Викликає npm з
-G
Параметр і не забудьте забезпечити права суперкористувача - фактичне процес розгортання слід зробити через кілька секунд.
Tamhan @ Tamhan-ThinkPad: ~ $ sudo npm install -g
javascript-obfuscator
[sudo] Пароль для tamhan:
. . .
+ [email protected]
Додано 103 пакети з 162 учасників
У 4.4S
03. Створіть зразок
Тестування Obfuscation працює найкраще, якщо у нас є якийсь "реальний" код. Отже, давайте почнемо з невеликою веб-сторінкою HTML. Він завантажує файл JavaScript під назвою worker.js, оголошує кнопку і містить невеликий біт вбудованого сценаріїв. Коли він завантажений у браузері, натисніть кнопку, щоб показати текстове поле.
Worker.js починається з рядка змінної. Вони є класичною метою атаки - якщо буде декодований ром, асемблер зазвичай починається, шукаючи таблиці, що містять рядкові послідовності. Крім того, шифрування виконується за допомогою набору змінних з дуже "кажучими" іменами.
var mystring = "Привіт з майбутнього plc"
Функція dothetrick () {
var chiffrat;
CHIFFRAT = ROT13 (MYSTRING);
Повернення шифрату;
}
05. Впровадити шифрування
Оскільки це не призначено як шифрування 101, ми повинні поселитися на порівняно простий заміщений шифр. ROT13 не складна, але вона може бути запрограмована досить утворена.
Реалізація DSOARES
Поставляється з набором "розмовних" змінних і забезпечує багато їжі для нашого обфускатора.
Функція ROT13 (Str) {
var re = новий regexp ("[a-z]", "i");
var min = 'a'.charcodeat (0);
var max = 'z'.charcodeat (0);
var factor = 13;
var результат = "";
str = str.touppercase ();
для (var i = 0; i & lt; str .length; i ++) {
Результат + = (Re.Test (STR [I])?
String.froomcharcode ((str.charcodeat
(i) - min + фактор)% (max-min + 1)
+ min): str [i]);
}
результат повернення;
}
06. Перша зафісія
Виконання запуску коду є простим. Закликати
javascript-obfuscator
, і пройдіть у точці, щоб розповісти програму працювати над усіма файлами, знайденими в поточному робочому каталозі. Це показує результат на робочій станції IBM автора:
Tamhan @ Tamhan-ThinkPad: ~ / futureobfuscate /
код $ javascript-obfuscator.
07. Перенаправлення вихід
Стріляючи файли безпосередньо в папку контейнера, є неефективним, оскільки імена повинні бути змінені, перш ніж вони можуть бути використані. Кращий спосіб передбачає використання
випуск
параметр. Якщо
javascript-obfuscator
Знаходить це, програма генерує підпапку в поточному робочому каталозі та скидає результати своїх праць там.
Зануртеся в папку "Обфуска" та відкрийте нову версію працівників. Форматування коду було погано. Імена методів, однак, залишалися нездатними, оскільки вони необхідні для зовнішніх закладів. Крім того, струни зараз сидять у масиві, де зтапач може збирати їх зручно.
var a0_0xb9e2 = ['hello \ x20from \ x20future
x20plc ',' [a-z] ',' test ',' charcodeat '];
09. Запобігання заготівлі струн
JavaScript-Obfuscator поставляється з вибором алгоритмів STRING-MANGLING, які можна налаштувати за допомогою
- кодування-масив-масив
. Майте на увазі, що вихідний каталог повинен бути вичерпаний перед кожним викликом, тому що забуваючи це зробити, призводить до "рекурсивної" обфускання вихідних файлів з попереднього запуску.
На цьому етапі наш випуск Obfuscator виглядає іншим - масив у верхній частині файлу тепер набагато менш читаний. Це, однак, не вирішує всі проблеми. Якщо ви виконуєте кілька циклів заборгованості, ви в кінцевому підсумку ви в кінцевому підсумку з позначкою схожим на один, що супроводжує цей крок:
Обфускатори працюють у полі тиску між високою продуктивністю та захистом коду. Один із способів вирішення проблеми передбачає "елементи рандомізації". Тривалість виконання до всіх вузлів, а лише до підмножини. Виявлення, якщо впливає вузли або не зазвичай виконуються через генератор випадкового числа, чутливість якої може бути налаштована.
12. Ідіть після рядків
Вищезгаданий генератор випадкових чисел випромінює кількість від нуля до одного. Якщо число більше, ніж поріг, модифікація не відбудеться. Установка
RINGRARRAYTHRESOLD
До значення одного означає, що всі цифри менше, ніж поріг, забезпечуючи, що кожен та кожен рядок стає м'ячим.
Tamhan @ Tamhan-ThinkPad: ~ / futureobfuscate / код $
JavaScript-Obfuscator. --output ./obfusca
- Base64
- Структурнітральний рух 1
13. Введення випадкового коду
Інструменти аналізу, такі як прибуток JSNice від наявності невеликої кодової бази. Враховуючи, що JavaScript-Obfuscator розбиває код у AST в будь-якому випадку, ніщо не говорить проти вставлення "сміттєвого коду" на льоту. Оскільки ця функція додає значний блат, розробники повинні активувати його вручну через два параметри, показані поруч із цим:
Запуск obfuscator з обома
- Діад-код-ін'єкцій
і
- Діад-код-ін'єкційний поріг 1
Набір призводить до файлу приблизно 2,5 Кб. Спроба відказувати код призводить до майже невикористаної стінки переважно тавтологічного JavaScript.
15. Агресивно змінюйте потоки програми
Розрив коду в AST дозволяє для глибоких перетворень. Встановлення
Керування Flowflattening
атрибут true розповідає програму, що вона може де-вбудована функціональна дзвінка. Це призводить до значного розширення генерованого коду - майте на увазі, що результати можуть зайняти 150 відсотків продуктивності.
16. дратуйте відладчик
Артефакти від налагодження - це найбільший у світі дар хакерів. Кілька дзвінків на консолі.LOG (), і його друзі можуть дати зловмисну цінну інформацію про те, що відбувається всередині програми - хорошим прикладом буде фрагмент, який показав:
Функція DothetRick ()
{
var chiffrat;
Console.Log ("Підготовка до шифрування
chiffrat ");
CHIFFRAT = ROT13 (MYSTRING);
console.log ("повернення chiffrat");
Повернення шифрату;
}
17. Оцінка технічних проблем
Ми можемо спробувати повторно заплутувати програму за допомогою команди нижче. Він вимикає функцію кешування струн та повинна вимкнути консольний журнал за допомогою перенаправлення.
Obfuscator і продавці браузера боротьба довга і гірка битва про функцію відладчика. Завдяки цьому, "агресивні" заходи, такі як консольний перенаправлення програми переривання потоку, показали, що цей крок, як правило, не працюють довго.
Встановлення всього пакету Node.js для заплутування одного або двох файлів безглуздо. Візит
obfuscator.io
Щоб отримати доступ до онлайн-версії програми, яка живе у вашому браузері. Перевірте та ComboBoxes нижче основного входу дозволяють змінювати поведінку програми, як зазначено вище.
Команда розробника підтримує відносно детальну документацію, яка пояснює спосіб взаємодії з різними командними рядами один з одним. Просто відвідувати
голова тут
Якщо вихідний висновок "коротка допомога" не допомагає вам досягти своєї мети.
Ефі Цюріх забезпечує обслуговування де-офускації
jsnice.org
. Він використовує нейронні мережі та базу даних знань, що складається з існуючого коду для визначення змінних імен. При викиданні форматування зазвичай працює досить добре, деякі з назв - такі, як
pixelsizetargetmax
У процедурі шифрування, що супроводжує цей крок - може бути досить забавним.
Функція ROT13 (PL $ 120) {
/ ** @type {! regexp} * /
var incelficeregexp = новий випускний вираз
(A0_0x395D ("0x1"), "I"); марка
pixelsizetargetmax = "a" ["charcodeat"] (0);
var zerosizemax = "z" ["CharcoDeat"] (0);
/ ** @type {number} * /
var minh = 13;
/ ** @type {string} * /
var out = "";