Що таке JavaScript Obfuscation і чому це загроза?


Відповіді:


38

Затухання - це засіб "затемнення" реального значення та наміру коду Javascript. Деякі сайти використовують це як перешкоду для людей, які хочуть скопіювати / запозичити свій код. Інші сайти використовують його як засіб приховування фактичного наміру коду.

Деякі форми затемнення:

  1. Автоматичне перейменування змінних на короткі безглузді імена, щоб зробити код менш читабельним і важче зрозуміти.
  2. Видалення всіх зайвих пробілів та розривів рядків, таким чином код є одним гігантським довгим рядком.
  3. Створення частин коду самогенеруючим шляхом, щоб перший пропуск коду запускався для створення фактичного коду, який потім виконується для виконання наміченої операції.
  4. Для побудови фактичного коду, який би запускався, використовуються символьні коди та маніпуляції з рядками в поєднанні з eval, а не звичайним кодом JavaScript.

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


Це те, що я думав, але хотів перевірити. Дякуємо за роз’яснення.
L84,

Якщо AVG блокує доступ до відомого, авторитетного веб-сайту, ви, ймовірно, можете його замінити. Я б не пропонував, щоб, якщо ви не знаєте, реп. Сайти.
uSlackr

4
Деякі сайти використовують компресію js, тому вона завантажується швидше (добре всіх), код буде виглядати заплутаним.
jcubic

9
1а 2також виконуються компресорами javascript. Компресори заперечують код як побічний ефект, але це не їх головне призначення; їх головне призначення - зменшити javascript, зменшити пропускну здатність.
BlueRaja - Danny Pflughoeft

5. Він також використовується для стиснення файлів JS для швидшого завантаження. Yahoo це робив з тих пір, як вони в Інтернеті, і інструменти Google для створення веб-додатків також роблять це (наприклад, GMail та Calendar).
Хлоя

13

Під замутненням розуміється приховування наміченого значення чогось.

У цьому випадку чітко читається фрагмент JavaScript, такий як

window.onload = function() { alert("Hello " + username) };

може бути заміщений на

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

або навіть

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

Усі три фрагменти коду роблять точно те саме, але лише читання першого дозволить вам легко зрозуміти його наміри.

Мабуть, AVG намагається зрозуміти призначення коду JavaScript, перш ніж дозволити його виконання. Коли код затуманено, AVG, ймовірно, вийде з ладу. Звідси попередження.

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


3
Хоча, як я часто знаходив, код знезараження часто показував мені, що він приховує злі кодований Javascript, який не варто красти. Це знак, що програміст витрачає більше часу на занепокоєння з приводу крадіжок, ніж на належну техніку програмування, і навіть не може отримати правильне обмацування, щоб його легко зламати. Єдиним людям, які вкладають час у створення коду по-справжньому важко знеструмити, - це програмісти зловмисних програм, саме тому AVG позначає це як дійсно вагомий привід уникати сайту.
Лабораторії Фіаско

2
AVG - це машина, а не людина. Очевидно, машина може зрозуміти код, і саме так цей код робить те саме. Більше того, люди зазвичай не дивляться на Javascript під час серфінгу. Це просто випадок "вини асоціацією". Якийсь JavaScript, який небезпечний, використовує певні шаблони придушення. Тому інші Javascript з подібними зразками є підозрілими.
Каз

@Kaz: Це був лише приклад, але є більш досконалі методи обфускування, які потребують розуміння двигуна JavaScript. Сканери шкідливих програм зазвичай шукають певні шаблони замість виконання сценаріїв з міркувань продуктивності.
Денніс

будучи теоретично нікчемними і практично нікчемними, різні - теоретично, обманюючий код марний, погоджений. Але, якщо вартість зневоднення аналогічна вартості створення нового коду (або навіть, вартість стає достатньо високою, щоб стримувати лінивих злодіїв), то затуманення для запобігання безладної крадіжки може бути корисним.
Рональд

Точно так, що йдеться про проблему, це не затуплення як таке , а подібність коду до відомого шкідливого коду.
Каз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.