Деобфасование Javascript
Что это за чудовище? Кто-нибудь знает, как сделать его читаемым?
<script type="text/javascript">
//<![CDATA[
<!--
var x="function f(x){var i,o=\"\",l=x.length;for(i=0;i<l;i+=2) {if(i+1<l)o+=" +
"x.charAt(i+1);try{o+=x.charAt(i);}catch(e){}}return o;}f(\"ufcnitnof x({)av" +
" r,i=o\\\"\\\"o,=l.xelgnhtl,o=;lhwli(e.xhcraoCedtAl(1/)3=!76{)rt{y+xx=l;=+;" +
"lc}tahce({)}}of(r=i-l;1>i0=i;--{)+ox=c.ahAr(t)i};erutnro s.buts(r,0lo;)f}\\" +
"\"(0),9\\\"\\\\$.;(.34U03\\\\\\\\16\\\\0E\\\\NSCZhC24\\\\03\\\\01\\\\\\\\St" +
"DEMPbM02\\\\0C\\\\x#opms58aJ}qb<jb7`17\\\\\\\\hc7s17\\\\\\\\rzEeljdp7m03\\\\"+
"\\\\36\\\\0F\\\\24\\\\06\\\\01\\\\\\\\25\\\\01\\\\02\\\\\\\\26\\\\03\\\\03\\"+
"\\\\\\(W4N02\\\\\\\\24\\\\02\\\\00\\\\\\\\07\\\\0N\\\\14\\\\0P\\\\BI07\\\\0" +
"4\\\\00\\\\\\\\02\\\\02\\\\02\\\\\\\\14\\\\06\\\\02\\\\\\\\24\\\\0L\\\\25\\" +
"\\06\\\\01\\\\\\\\3:?(>4\\\"\\\\f(;} ornture;}))++(y)^(iAtdeCoarchx.e(odrCh" +
"amCro.fngriSt+=;o27=1y%i;+=)y90==(iif){++;i<l;i=0(ior;fthnglex.l=\\\\,\\\\\\"+
"\"=\\\",o iar{vy)x,f(n ioctun\\\"f)\")" ;
while(x=eval(x));
//-->
//]]>
</script>
Ответы
Ответ 1
Это действительно запутанная версия:
document.writeln("<a href=\"mailto:[email protected]\" title=\"Contact\">Contact</a>");
Я предполагаю, что это обфускается настолько, чтобы избежать спамеров. Но, конечно, спам-боты могли просто отобразить страницу с помощью Webkit и пройти DOM для адресов электронной почты...;)
Итак, как деобфусить?
- Перейдите к http://jsbeautifier.org/
- Вставить источник и украсить его
- Отредактируйте функцию
f(x)
, чтобы она console.log(o)
вместо return o
- Выполнить измененный код и украсить его вывод.
- Повторяйте шаги 2-4, пока они не будут прочитаны.
Ответ 2
Есть две основные причины для обфускации кода:
- Человек, который его написал, не хотел предоставлять код в удобочитаемой форме, чтобы избежать кражи его интеллектуальной собственности.
- Вирус, шпионское ПО,...
В первом случае я предлагаю вам попросить автора предоставить вам исходный код.
Ответ 3
Он делает что-то вроде этого:
document.writeln("< a href=\"mailto:[email protected]\" title=\"Contact\">Contact</a>");
Так что-то вроде уведомления об авторских правах
Полный источник
function f(x, y) {
var i, o = "", l = x.length;
for (i = 0; i < l; i++) {
if (i == 90) {
y += i;
}
y %= 127;
o += String.fromCharCode(x.charCodeAt(i) ^ y++);
}
return o;
}
f(">4?(3:\x0E\x15L\x14\x16\f\x12\x02\x04\x07BIP\fN\x07\x02\x14\x14N(W\x1B\x16\x11\x15\x0E\x14F\x1E\x1FmdpljEerz\x7Fshc\x7F`jbb<}qaJ58msopx#C\x02bMMPDESt\v\x14hCCZNSE\x0E\x1CU.3;($.", 90);
Готово с Firefox addon " Javascript Deobfuscator"
Ответ 4
Edit: Похоже, что некоторые избили меня в конце концов. Спасибо!
После бесполезных "ответов", полученных от некоторых из больших пушек (5-значный показатель репутации), я решил сам де-зафусковать:
document.writeln("<a href=\"mailto:[email protected]\" title=\"Contact\">Contact</a>");0;
Весь shebang - это очень простой способ скрыть адрес электронной почты.
Для этого перейдите в консоль firebug и выполните следующее:
var x="function f(x){var i,o=\"\",l=x.length;for(i=0;i<l;i+=2) {if(i+1<l)o+=" +
"x.charAt(i+1);try{o+=x.charAt(i);}catch(e){}}return o;}f(\"ufcnitnof x({)av" +
" r,i=o\\\"\\\"o,=l.xelgnhtl,o=;lhwli(e.xhcraoCedtAl(1/)3=!76{)rt{y+xx=l;=+;" +
"lc}tahce({)}}of(r=i-l;1>i0=i;--{)+ox=c.ahAr(t)i};erutnro s.buts(r,0lo;)f}\\" +
"\"(0),9\\\"\\\\$.;(.34U03\\\\\\\\16\\\\0E\\\\NSCZhC24\\\\03\\\\01\\\\\\\\St" +
"DEMPbM02\\\\0C\\\\x#opms58aJ}qb<jb7`17\\\\\\\\hc7s17\\\\\\\\rzEeljdp7m03\\\\"+
"\\\\36\\\\0F\\\\24\\\\06\\\\01\\\\\\\\25\\\\01\\\\02\\\\\\\\26\\\\03\\\\03\\"+
"\\\\\\(W4N02\\\\\\\\24\\\\02\\\\00\\\\\\\\07\\\\0N\\\\14\\\\0P\\\\BI07\\\\0" +
"4\\\\00\\\\\\\\02\\\\02\\\\02\\\\\\\\14\\\\06\\\\02\\\\\\\\24\\\\0L\\\\25\\" +
"\\06\\\\01\\\\\\\\3:?(>4\\\"\\\\f(;} ornture;}))++(y)^(iAtdeCoarchx.e(odrCh" +
"amCro.fngriSt+=;o27=1y%i;+=)y90==(iif){++;i<l;i=0(ior;fthnglex.l=\\\\,\\\\\\"+
"\"=\\\",o iar{vy)x,f(n ioctun\\\"f)\")" ;
while(x=eval(x)){
console.log(x);
}
Ответ 5
Вам придется вытащить его из этой строки, чтобы распаковать его, и большая часть этой работы будет ручной, так как некоторые из них, похоже, закодированы.
Но я согласен с Дарином. Спросите автора об этом без пустяков.