Як приховати свій код JavaScript з джерела перегляду

Feb 18, 2026
Як
How to hide your JavaScript code

Якщо ви не вживаєте заходів за допомогою вашого коду JavaScript, ви робите життя легким для тих, хто хоче це клонувати. Але якщо ваші процеси програмування більше ніж один клік, а зловмисники воліють клонувати програмне забезпечення конкурента. Боти та інші зловмисники, що розчісують Інтернет для AWS або Azure Editions, як правило, не турбуються з Obfuscated Code - наступний веб-сайт для входу веб-сайту також може бути використаний для мого Bitcoin і може бути зібраний меншим зусиллям.

Заплутаний JavaScript використовується для того, щоб бути складним. Однак процес став значно простішим протягом останніх кількох років. Сьогодні навіть малі компанії можуть і повинні захищати свій код від чужих очей. У деяких випадках, отримуючи безпечний - це лише виклик пакету Node.js.

Наступні кроки вводять загальноприйнятий JavaScript Obfuscator, а також подивіться на кілька інших тем, пов'язаних з проблемою під рукою.

  • Найкраще антивірусне програмне забезпечення
  • 15 основних засобів JavaScript

01. Перевірка версії

Наш JavaScript Obfuscator живе в середовищі Runtime вузла. Давайте почнемо, перевіряючи, що використовуються версії. Нижче наведено вихідний стан, який знаходиться у робочій станції, який використовується для робочої станції, використовується для наступних етапів:

 Tamhan @ Tamhan-ThinkPad: ~ $ вузол --version
v8.12.0
tamhan @ tamhan-thinkpad: ~ $ npm --version
6.4.1 

02. Встановіть програму

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, оголошує кнопку і містить невеликий біт вбудованого сценаріїв. Коли він завантажений у браузері, натисніть кнопку, щоб показати текстове поле.

 & lt; html & gt;
& lt; body & gt;
& lt; script src = "worker.js" & gt; & lt; / script & gt;
& lt; сценарій & gt;
Функціональний працівник () {
оповіщення (дотетрик ());
}
& lt; / script & gt;
& lt; кнопка type = "кнопка" onclick = "працівник (
) "& gt, натисніть мене! & lt; / button & gt;
& lt; / body & gt;
& lt; / html & gt; 

04. Додайте якийсь код

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 Знаходить це, програма генерує підпапку в поточному робочому каталозі та скидає результати своїх праць там.

 Tamhan @ Tamhan-ThinkPad: ~ / futureobfuscate / код $
JavaScript-Obfuscator. --output ./obfusca[ 45]
  

08. Проаналізуйте результати

How to hide your JavaScript code: Results

Це жахливо, але це може бути гірше

Зануртеся в папку "Обфуска" та відкрийте нову версію працівників. Форматування коду було погано. Імена методів, однак, залишалися нездатними, оскільки вони необхідні для зовнішніх закладів. Крім того, струни зараз сидять у масиві, де зтапач може збирати їх зручно.

 var a0_0xb9e2 = ['hello \ x20from \ x20future
x20plc ',' [a-z] ',' test ',' charcodeat ']; 

09. Запобігання заготівлі струн

JavaScript-Obfuscator поставляється з вибором алгоритмів STRING-MANGLING, які можна налаштувати за допомогою - кодування-масив-масив . Майте на увазі, що вихідний каталог повинен бути вичерпаний перед кожним викликом, тому що забуваючи це зробити, призводить до "рекурсивної" обфускання вихідних файлів з попереднього запуску.

 Tamhan @ Tamhan-ThinkPad: ~ / futureobfuscate / код $
JavaScript-Obfuscator. --output ./obfusca
- Base64 

10. Подивіться на результати знову

На цьому етапі наш випуск Obfuscator виглядає іншим - масив у верхній частині файлу тепер набагато менш читаний. Це, однак, не вирішує всі проблеми. Якщо ви виконуєте кілька циклів заборгованості, ви в кінцевому підсумку ви в кінцевому підсумку з позначкою схожим на один, що супроводжує цей крок:

 var a0_0x31E5 = ['bgvuz3ro', 'dgvzda ==', '
Znjvbunoyxjdb2rl ',' y2hhcknvzgvbda == ','
dg9vchblcknhc2u = '];
. . .
. . .
var mystring = 'hello \ x20from \ x20future \ x20plc' 

11. Розуміння рандомізації

Обфускатори працюють у полі тиску між високою продуктивністю та захистом коду. Один із способів вирішення проблеми передбачає "елементи рандомізації". Тривалість виконання до всіх вузлів, а лише до підмножини. Виявлення, якщо впливає вузли або не зазвичай виконуються через генератор випадкового числа, чутливість якої може бути налаштована.

12. Ідіть після рядків

Вищезгаданий генератор випадкових чисел випромінює кількість від нуля до одного. Якщо число більше, ніж поріг, модифікація не відбудеться. Установка RINGRARRAYTHRESOLD До значення одного означає, що всі цифри менше, ніж поріг, забезпечуючи, що кожен та кожен рядок стає м'ячим.

 Tamhan @ Tamhan-ThinkPad: ~ / futureobfuscate / код $
JavaScript-Obfuscator. --output ./obfusca
- Base64
- Структурнітральний рух 1 

13. Введення випадкового коду

Інструменти аналізу, такі як прибуток JSNice від наявності невеликої кодової бази. Враховуючи, що JavaScript-Obfuscator розбиває код у AST в будь-якому випадку, ніщо не говорить проти вставлення "сміттєвого коду" на льоту. Оскільки ця функція додає значний блат, розробники повинні активувати його вручну через два параметри, показані поруч із цим:

 - -Dead-Code-injection & lt; boolean & gt;
-dead-code-injection-threehold & lt; номер & gt; 

14. Насолоджуйтесь хаосом

Запуск 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. Оцінка технічних проблем

Ми можемо спробувати повторно заплутувати програму за допомогою команди нижче. Він вимикає функцію кешування струн та повинна вимкнути консольний журнал за допомогою перенаправлення.

 Tamhan @ Tamhan-ThinkPad: ~ / desktop /
Deadstuff / 2018nov / futureobfuscate / код $
JavaScript-Obfuscator. --output ./obfusca
- кодування - кодування
--disableconsoleoutput true 

18. Грати в ігри кішки та миші

Obfuscator і продавці браузера боротьба довга і гірка битва про функцію відладчика. Завдяки цьому, "агресивні" заходи, такі як консольний перенаправлення програми переривання потоку, показали, що цей крок, як правило, не працюють довго.

 DebugProtection: False,
DebugProtectionInterval: False, 

19. Швидке онлайн-заповідь

Встановлення всього пакету Node.js для заплутування одного або двох файлів безглуздо. Візит obfuscator.io Щоб отримати доступ до онлайн-версії програми, яка живе у вашому браузері. Перевірте та ComboBoxes нижче основного входу дозволяють змінювати поведінку програми, як зазначено вище.

20. Дізнайтеся більше

How to hide your JavaScript code: Learn more

Натисніть, щоб переглянути всі параметри, які вам потрібно

Команда розробника підтримує відносно детальну документацію, яка пояснює спосіб взаємодії з різними командними рядами один з одним. Просто відвідувати голова тут Якщо вихідний висновок "коротка допомога" не допомагає вам досягти своєї мети.

21. Метальний ворог Obfuscator

How to hide your JavaScript code: JS Nice

JS Nice - це простий спосіб надати свій код нечитабельним

Ефі Цюріх забезпечує обслуговування де-офускації 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 = ""; 

Generate, the award winning conference for web designers, returns to NYC on April 24-25! To book tickets visit www.generateconf.com 

Генерація, нагорода конференції для веб-дизайнерів, повертається до NYC 24-25 квітня! Щоб забронювати відвідування квитків www.generateconf.com

Ця стаття була опублікована у випуску 283 журналу Creative Web Design Веб-дизайнер . Купити проблему 283 тут або Підписатися на веб-дизайнер тут .

Пов'язані статті:

  • 9 кращих рамок JavaScript
  • Виявлено: останні тенденції JavaScript
  • 5 awesome javascript apis

Як - Найпопулярніші статті

Як змінити розмір зображення в Photoshop

Як Feb 18, 2026

Знаючи, як змінити розмір зображення в Photoshop - це фундаментальна майсте..


Покращити свої концептуальні навички мистецтва в Photoshop

Як Feb 18, 2026

Для цього семінару, я хотів би показати вам дуже веселий спосіб, щоб ес�..


Вирівняйте своє мистецтво ВР

Як Feb 18, 2026

Я почав використовувати кіно 4d через кілька місяців після того, як моя ..


Майстер-процесуальне моделювання

Як Feb 18, 2026

Наступного разу ви перебуваєте в місті, вивчайте спосіб побудови суча�..


Як створити персонажів мультфільмів у кіно 4D

Як Feb 18, 2026

З появою мобільних ігор і інді відео ігри , там був великий при�..


Створіть ідеально геометричний дизайн логотипу в Illustrator

Як Feb 18, 2026

У цьому короткий Підручник Illustrator , дизайнер Буде Патерсон..


Анатомія карикатури: 15 кращих порад

Як Feb 18, 2026

Як повний робочий день, я звик працювати через низку стилів і Мето�..


Намалюйте точні кістки та м'язи

Як Feb 18, 2026

Анатомія - це величезна предмет і вимагає поєднання наукової інформац�..


Категорії