Что такое JavaScript Obfuscation и почему это угроза?

Ответы:

38

Обфускация - это средство «скрыть» реальное значение и намерение вашего JavaScript-кода. Некоторые сайты используют его как препятствие для людей, которые хотят скопировать / заимствовать свой код. Другие сайты используют его как средство, чтобы скрыть реальное намерение кода.

Некоторые формы затемнения:

  1. Автоматическое переименование переменных в короткие бессмысленные имена, чтобы сделать код менее читаемым и трудным для понимания.
  2. Удаление лишних пробелов и разрывов строк, чтобы код представлял собой одну гигантскую длинную строку.
  3. Создание частей кода для самостоятельной генерации, чтобы первый проход кода выполнялся для создания фактического кода, который затем выполняется для выполнения намеченной операции.
  4. Использует коды символов и манипуляции со строками в сочетании с eval, а не с обычным кодом javascript для создания реального кода, который будет выполняться.

Затенение само по себе не является злом, но его можно использовать, чтобы скрыть злой умысел, и, вероятно, именно против этого возражал AVG. Он обнаружил настолько много неясного, что не мог определить, пытается ли JavaScript сделать что-то, что он пытается предотвратить. Таким образом, он объявил код небезопасным по умолчанию, поскольку он не может проверить, что код выглядит нормально.

jfriend00
источник
Это то, что я думал, но хотел проверить. Благодарю за разъяснение.
L84
Если AVG блокирует доступ к хорошо известному, уважаемому веб-сайту, вы, вероятно, можете отменить его. Я бы не советовал, если вы не знаете, респ сайтов.
uSlackr
4
На некоторых сайтах используется сжатие js, поэтому оно загружается быстрее (почти для всех), код будет выглядеть запутанным.
Jcubic
9
1и 2также сделаны компрессорами JavaScript. Компрессоры запутывают код как побочный эффект, но это не является их главной целью; их основная цель - уменьшить размер JavaScript, уменьшить пропускную способность.
BlueRaja - Дэнни Пфлюгофт
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 помечает это как действительно хорошую причину, чтобы избежать сайта.
Fiasco Labs
2
AVG - это машина, а не человек. Очевидно, что машина может понимать код, как этот код делает то же самое. Более того, люди обычно не смотрят на Javascript, когда занимаются серфингом. Это просто случай "вины по ассоциации". Некоторый опасный Javascript использует определенные шаблоны запутывания. Поэтому другой Javascript с похожими шаблонами вызывает подозрение.
Каз
@Kaz: Это был просто пример, но есть более сложные методы запутывания, которые требуют понимания движка JavaScript. Сканеры вредоносных программ обычно ищут определенные шаблоны вместо выполнения сценариев по соображениям производительности.
Деннис
быть теоретически бесполезным и практически бесполезным - это разные вещи - теоретически запутанный код бесполезен, согласен. Но, если стоимость деобфускации подобна стоимости создания нового кода (или даже, стоимость становится достаточно высокой, чтобы сдерживать ленивых воров), тогда может быть полезно запутывание, чтобы предотвратить бессмысленное воровство.
Рональд
Собственно, речь идет не об обфускации как таковой , а о схожести кода с известным вредоносным кодом.
Каз