2010-04-10 2 views
1

Мне нужна помощь, чтобы понять, как этот код был запутан. Код:Справка об обфускации Javascript

<a id="suggest" href="#" ajaxify="/ajax/social_graph/invite_dialog.php?class=FanManager&amp;node_id=108463912505356" class=" profile_action actionspro_a" rel="dialog-post">Suggest to Friends</a> 

И запутывания:

\x3c\x61\x20\x69\x64\x3d\x22\x73\x75\x67\x67\x65\x73\x74\x22\x20\x68\x72\x65\x66\x3d\x22\x23\x22\x20\x61\x6a\x61\x78\x69\x66\x79\x3d\x22\x2f\x61\x6a\x61\x78\x2f\x73\x6f\x63\x69\x61\x6c\x5f\x67\x72\x61\x70\x68\x2f\x69\x6e\x76\x69\x74\x65\x5f\x64\x69\x61\x6c\x6f\x67\x2e\x70\x68\x70\x3f\x63\x6c\x61\x73\x73\x3d\x46\x61\x6e\x4d\x61\x6e\x61\x67\x65\x72\x26\x61\x6d\x70\x3b\x6e\x6f\x64\x65\x5f\x69\x64\x3d\x31\x30\x38\x34\x36\x33\x39\x31\x32\x35\x30\x35\x33\x35\x36\x22\x20\x63\x6c\x61\x73\x73\x3d\x22\x20\x70\x72\x6f\x66\x69\x6c\x65\x5f\x61\x63\x74\x69\x6f\x6e\x20\x61\x63\x74\x69\x6f\x6e\x73\x70\x72\x6f\x5f\x61\x22\x20\x72\x65\x6c\x3d\x22\x64\x69\x61\x6c\x6f\x67\x2d\x70\x6f\x73\x74\x22\x3e\x53\x75\x67\x67\x65\x73\x74\x20\x74\x6f\x20\x46\x72\x69\x65\x6e\x64\x73\x3c\x2f\x61\x3e","\x73\x75\x67\x67\x65\x73\x74 

Теперь я использовал на экранирования в выше запутанный код, чтобы прочитать его. Что я хочу знать, так это то, что именно было использовано для обфускации кода? В принципе, мне нужно настроить читаемый код на ту же обфускацию.

Любая помощь была бы принята с благодарностью.

+0

Вам не нужно использовать 'экранирования в 'to" декодировать "такую ​​строку. Простое оповещение/печать строки покажет вам свое несмываемое состояние. 'unescape' используется для декодирования строк с кодировкой HTML, и для этой цели он даже не рекомендуется. –

ответ

0

Введите следующий код в адресной строке:

javascript:alert("\x3c\x61\x20\x69\x64\x3d\x22\x73\x75\x67\x67\x65\x73\x74\x22\x20\x68\x72\x65\x66\x3d\x22\x23\x22\x20\x61\x6a\x61\x78\x69\x66\x79\x3d\x22\x2f\x61\x6a\x61\x78\x2f\x73\x6f\x63\x69\x61\x6c\x5f\x67\x72\x61\x70\x68\x2f\x69\x6e\x76\x69\x74\x65\x5f\x64\x69\x61\x6c\x6f\x67\x2e\x70\x68\x70\x3f\x63\x6c\x61\x73\x73\x3d\x46\x61\x6e\x4d\x61\x6e\x61\x67\x65\x72\x26\x61\x6d\x70\x3b\x6e\x6f\x64\x65\x5f\x69\x64\x3d\x31\x30\x38\x34\x36\x33\x39\x31\x32\x35\x30\x35\x33\x35\x36\x22\x20\x63\x6c\x61\x73\x73\x3d\x22\x20\x70\x72\x6f\x66\x69\x6c\x65\x5f\x61\x63\x74\x69\x6f\x6e\x20\x61\x63\x74\x69\x6f\x6e\x73\x70\x72\x6f\x5f\x61\x22\x20\x72\x65\x6c\x3d\x22\x64\x69\x61\x6c\x6f\x67\x2d\x70\x6f\x73\x74\x22\x3e\x53\x75\x67\x67\x65\x73\x74\x20\x74\x6f\x20\x46\x72\x69\x65\x6e\x64\x73\x3c\x2f\x61\x3e","\x73\x75\x67\x67\x65\x73\x74") 

и он получит декодирование.

+0

Да, я знаю это, я хочу узнать, как сделать это наоборот, настроить читаемый код, а затем обезвредить его таким же образом. – Victor

1

Вы не должны использовать запутывания для ничего серьезного, но это может быть интересно играть с:

var readable = '<a id="suggest" href="#" ajaxify="/ajax/social_graph/invite_dialog.php?class=FanManager&amp;node_id=108463912505356" class=" profile_action actionspro_a" rel="dialog-post">Suggest to Friends</a>'; 

Array.prototype.map.call(readable, 
function(c){ 
    return "\\x" + c.charCodeAt().toString(16); 
}).join(""); 
+0

Обратите внимание, что метод 'map' доступен в версиях ECMAScript 5th edition (и большинство Firefox релизов). Например, в IE8 его нет. –

+0

Все в порядке. Этот код не предназначен для использования в реальной жизни. –

2

Если вы используете юникод выше 255, вам потребуется некоторая специальная обработка. Вы также должны убедиться, что шестнадцатеричные коды дополняются 0s правильно, или функция будет перерыв символов до 16 лет (например, \ п и \ т):

function obfuscate(str) { 
    var escaped = []; 
    for (var i = 0; i < str.length; i++) { 
    var c = str.charCodeAt(i); 
    var cs = "0000" + c.toString(16); 
    if (c < 256) { 
     cs = "\\x" + cs.substr(-2); 
    } else { 
     cs = "\\u" + cs.substr(-4); 
    } 
    escaped.push(cs); 
    } 
    return escaped.join(''); 
} 

var ob = obfuscate("Hello world!"); 
alert(ob); 
Смежные вопросы