2010-04-18 14 views
5

में जावास्क्रिप्ट कोड मैं अपनी वेबसाइट sourcecode में इस कोड को मिला:दुर्भावनापूर्ण मेरी वेबसाइट

var _0xd28d=["\x5F\x30\x78\x33\x32\x6C\x73\x6A\x39","\x5F\x78\x6C\x74","\x5F\x78\x38\x66\x6B\x63\x33","\x66\x6C\x6F\x6F\x72","\x72\x61\x6E\x64\x6F\x6D","\x6C\x65\x6E\x67\x74\x68"]; 
var _0x9ae4=[_0xd28d[0],12,_0xd28d[1],_0xd28d[2],2,31,Math,_0xd28d[3]]; 
var _0xcd6e=[_0x9ae4[5],_0x9ae4[0],_0x9ae4[_0x9ae4[4]],_0x9ae4[3],4,_0xd28d[4]]; 
var _0xr6g0={}; 
_0xr6g0[_0xcd6e[2]]=0; 
_0xr6g0[_0x9ae4[4]]=function(){ 
var _0x4c68x4={}; 
_0x4c68x4[_0xd28d[0]]=_0x9ae4[0]; 
do{ 
_0x4c68x4[_0x9ae4[0]]+=_0x4c68x4[_0xd28d[0]][_0x9ae4[6][_0x9ae4[7]](_0x9ae4[6][_0xcd6e[5]]()*_0x4c68x4[_0xd28d[0]][_0xd28d[5]])]; 
}while(_0x4c68x4[_0xd28d[0]][_0xd28d[5]]<_0xcd6e[0]); 
_0x4c68x4[_0x4c68x4[_0x9ae4[0]]]=function(){ 
_0xr6g0[_0xcd6e[2]]++; 
_0xr6g0[_0xcd6e[2]]%=_0x9ae4[1]; 
return _0x4c68x4[_0x4c68x4[_0x9ae4[0]]]; 
}; 
return _0x4c68x4[_0x4c68x4[_0xcd6e[1]]]; 
}; 
_0xr6g0[_0x9ae4[_0xcd6e[4]]]()()()()()()()()()()()()()()()(); 

मैं सोच रहा था, यह क्या है? और यह क्या करता है?

+0

यह भी देखें: http://stackoverflow.com/questions/2613986/javascript-compiled-or-not-check-inside, http://stackoverflow.com/questions/2644131/what-is-this-javascript- कोड-कर-बंद कर दिया। अलग कोड, एक ही obfuscation तकनीकें। – outis

उत्तर

0

इस कोड में हेक्स पाठ "_0x32lsj9_xlt_x8fkc3floorrandomlength"

बाकी जावास्क्रिप्ट के कुछ प्रकार को चलाने के लिए पार्स करने की जाती है कि के साथ एक स्ट्रिंग पैदा कर रही है।

3

पहली 5 लाइनें चर शुरू करती हैं। अन्य सारणियों को \ एक्स पलायन और अनुक्रमण decrypting के बाद, हम पाते हैं:

_0xd28d = ['_0x32lsj9', '_xlt', '_x8fkc3', 'floor', 'random', 'length'] 
_0x9ae4 = ['_0x32lsj9', 12, '_xlt', '_x8fkc3', 2, 31, Math, 'floor'] 
_0xcd6e = [31, '_0x32lsj9', '_xlt', '_x8fkc3', 4, 'random'] 
_0xr6g0 = {'_xlt': 0} 

लाइन्स 6-18 (सरणी अनुक्रमण के विस्तार के बाद) एक समारोह बनाने के लिए:

_0xr6g0[2] = function() { 
    var _0x4c68x4={}; 
    _0x4c68x4['_0x32lsj9'] = '_0x32lsj9'; 

    do{ 
     _0x4c68x4['_0x32lsj9']+=_0x4c68x4['_0x32lsj9'][Math['floor'](Math['random']()*_0x4c68x4['_0x32lsj9']['length'])]; 
    } while(_0x4c68x4['_0x32lsj9']['length'] < 31); 

     _0x4c68x4[_0x4c68x4['_0x32lsj9']] = function(){ 
     _0xr6g0['_xlt']++; 
     _0xr6g0['_xlt'] %= 12; 
     return _0x4c68x4[_0x4c68x4['_0x32lsj9']]; 
    }; 

    return _0x4c68x4[_0x4c68x4['_0x32lsj9']]; 
}; 

जावास्क्रिप्ट एक [ 'ख की अनुमति देता है '] अब के लिए कोई वैकल्पिक वाक्य रचना के रूप में है, इसलिए इस के बराबर है:

_0xr6g0[2] = function() { 
    var _0x4c68x4 = {'_0x32lsj9': '_0x32lsj9'}; 

    do{ 
     _0x4c68x4._0x32lsj9 += _0x4c68x4._0x32lsj9[Math.floor(Math.random()*_0x4c68x4._0x32lsj9.length)]; 
    } while(_0x4c68x4._0x32lsj9.length < 31); 

    _0x4c68x4[_0x4c68x4._0x32lsj9] = function(){ 
     _0xr6g0._xlt++; 
     _0xr6g0._xlt %= 12; 
     return _0x4c68x4[_0x4c68x4._0x32lsj9]; 
    }; 

    return _0x4c68x4[_0x4c68x4._0x32lsj9]; 
}; 

भीतरी समारोह यादृच्छिक रूप से जेनरेट 31-चरित्र का नाम है कि कोई फर्क नहीं पड़ता, तो यह करने के लिए सरल किया जा सकता है:

_0xr6g0[2] = function() { 
    function f() 
    { 
     _0xr6g0._xlt++; 
     _0xr6g0._xlt %= 12; 
     return f; 
    }; 

    return f; 
}; 

अंतिम पंक्ति कॉल _0xr6g0[2] 16 बार, और इस लेखन

_0xr6g0._xlt = 4 
6

अपने आप से की एक अस्पष्ट तरीका है, कोड उपयोगी है और न ही खतरनाक कुछ नहीं करता है।

मैन्युअल deobfuscating के बाद:

count = 0; 
func_a = function() { 
    func_b = function() { 
     count++; 
     count %= 12; 
     return func_b; 
    }; 
    return func_b; 
}; 
func_a()()()()()()()()()()()()()()()(); 

ब्राउज़र व्यस्त रखने के लिए और अधिक गलत प्रयास की तरह लग रहा है। लेकिन लोगों को उत्सुक रखने के लिए बहुत मान्य है।

अद्यतन: deobfuscation तय किया।

+0

तकनीकी रूप से मुझे लगता है कि आपको 'var5 [100] = "_0x32lsj9" पंक्ति में अकेले मूल स्ट्रिंग को छोड़ने की आवश्यकता है, क्योंकि बाद में कोड उस स्ट्रिंग की लंबाई का परीक्षण करता है। –

+0

@ डेविड, आप सही हैं। मैंने इसे अनदेखा किया। – jweyrich

+0

"अपने आप से, कोड कुछ भी उपयोगी और न ही खतरनाक है।" - यह * संभव * है कि यह जावास्क्रिप्ट के कुछ कार्यान्वयन में एक (काल्पनिक) बग का उपयोग करके एक शोषण का प्रयास है ... –

संबंधित मुद्दे