2013-04-23 3 views
1

Мой вопрос в том, как я могу декодировать этот JavaScript и как кодируется (с помощью какой программы или онлайн-инструмента).Как декодировать этот javascript?

Вот JavaScript, что я хочу, чтобы расшифровать: http://pastebin.com/hZvKySjj

+3

Это запутанное .. –

+1

Если у вас нет представления о том, что он должен делать, деобфас, это будет почти невозможно. – 11684

+0

Это не то, что можно легко декодировать, это просто сложная запись кода. –

ответ

9

Каждый запутанный скрипт нуждается в некотором виде eval. В данном случае линии

_L = 'constr\x75\x63\x74\x6F\x72'; 
[][_L][_L](_Z[_h._t4](_F))(); 

делают это. _L - это строка "constructor", а [].constructor.constructor - это конструктор Function. Он будет вызываться с декодированным скриптом, и будет вызвана результирующая функция. Мы можем заменить его на alert, вставить скрипт в консоль * и дождаться результата - нам даже не нужно понимать, как работает декодирование. В вашем случае, результат (да, включая все комментарии и переносы):

var alarm ="0"; 
var content = document; 

if ((content.getElementById("wrapper") != null)) 
{ 
    document.getElementById('wrapper').style.display = 'block'; 
} 

function a() 
{ 
    if ((content.getElementById("links") != null)) 
    { 
     var temp = content.getElementById("links").innerHTML; 
     if ((temp.indexOf('nofollow')+1) > 0) alarm = "1"; 
     else if ((temp.indexOf('noindex')+1) > 0) alarm = "1"; 
    } 
    else alarm = "1"; 
} 

function b() 
{ 
    if ((content.getElementById("aa") != null) && (content.getElementById("ab") != null)) 
    { 
     temp = document.getElementById("aa").href; 
     if ("http://uc-portaller.ru/" != temp) alarm = "1"; 

     temp = document.getElementById("ab").innerHTML; 
     if ("скрипты для ucoz" != temp) alarm = "1"; 
    } 
    else alarm = "1"; 
} 

function c() 
{ 
    if ((content.getElementById("ba") != null) && (content.getElementById("bb") != null)) 
    { 

     temp = content.getElementById("ba").href; 
     if ("http://austere.ru/" != temp) alarm = "1"; 

     temp = content.getElementById("bb").innerHTML; 
     if ("доска объявлений" != temp) alarm = "1"; 
    } 
    else alarm = "1"; 
} 

function d() 
{ 
    if ((content.getElementById("ca") != null) && (content.getElementById("cb") != null)) 
    { 

     temp = content.getElementById("ca").href; 
     if ("http://www.for-creative.com/" != temp) alarm = "1"; 

     temp = content.getElementById("cb").innerHTML; 
     if ("темы для ucoz" != temp) alarm = "1"; 
    } 
    else alarm = "1"; 
} 

a(); 

if (alarm == "0") b(); 
if (alarm == "0") c(); 
if (alarm == "0") d(); 

if (alarm == "1") prompt('Нарушены условия использования, по всем вопросам обращайтесь в ICQ:', '376880395'); 












$(document).ready(function(){ 

    //When you click on a link with class of poplight and the href starts with a # 
    $('a.poplight[href^=#]').click(function() { 
     var popID = $(this).attr('rel'); //Get Popup Name 
     var popURL = $(this).attr('href'); //Get Popup href to define size 

     //Pull Query & Variables from href URL 
     var query= popURL.split('?'); 
     var dim= query[1].split('&'); 
     var popWidth = dim[0].split('=')[1]; //Gets the first query string value 

     //Fade in the Popup and add close button 
     $('#' + popID).fadeIn().css({ 'width': Number(popWidth) }).prepend(''); 

     //Define margin for center alignment (vertical + horizontal) - we add 80 to the height/width to accomodate for the padding + border width defined in the css 
     var popMargTop = ($('#' + popID).height() + 80)/2; 
     var popMargLeft = ($('#' + popID).width() + 80)/2; 

     //Apply Margin to Popup 
     $('#' + popID).css({ 
      'margin-top' : -popMargTop, 
      'margin-left' : -popMargLeft 
     }); 

     //Fade in Background 
     $('body').append('<div id="fade"></div>'); //Add the fade layer to bottom of the body tag. 
     $('#fade').css({'filter' : 'alpha(opacity=0)'}).fadeIn(); //Fade in the fade layer 

     return false; 
    }); 


    //Close Popups and Fade Layer 
    $('a.close, #fade').live('click', function() { //When clicking on the close or fade layer... 
     $('#fade , .popup_block').fadeOut(function() { 
      $('#fade, a.close').remove(); 
    }); //fade them both out 

     return false; 
    }); 


}); 




     $.fn.tabs = function() { 
      return this.each(function() { 
       var $tabwrapper = $(this); 

       var $panels = $tabwrapper.find('> div'); 
       var $tabs = $tabwrapper.find('> ul a'); 

       $tabs.click(function() { 
        $tabs.removeClass('selected'); 
        $(this).addClass('selected'); 

        $panels 
        .hide() // hide ALL the panels 
        .filter(this.hash) // filter down to 'this.hash' 
         .show(); // show only this one 

        return false; 
       }).filter(window.location.hash ? '[hash=' + window.location.hash + ']' : ':first').click(); 
      }); 
     }; 

     $(document).ready(function() { 
      // console.log(window.location.hash); 

      $('div.tabs').tabs(); 
     }); 

*) Конечно, вы должны быть уверены, что вы делаете. Всегда есть небольшой риск, что это вредоносный скрипт, и вы, возможно, не нашли все eval s. Совет @ jfriend00 по выполнению фрагментов декодирования по очереди является более безопасным способом.

+0

это freaking smart – VeXii

+0

Большое спасибо, друг! :) –

2

Единственный способ я знаю, чтобы понять, что делает этот код, чтобы найти безопасную окружающую среду (в случае, если код имеет злого умысла) и выполнить его по очереди в отладчике и наблюдать за тем, что он делает, поскольку он деобфусцирует себя, чтобы превратить себя в обычный javascript. Имена переменных часто остаются скрытыми, но гигантская строка в _O будет расшифрована во что-то (вероятно, код javascript).

0

Посмотрите: http://www.labnol.org/software/deobfuscate-javascript/19815/

Они показывают, как вы можете сделать что-то подобное, это в основном вопрос использования хрома отладчика «украсить» код и сделать его более удобным для чтения.

Некоторые версии хрома не имеют команды на контекстное меню, просто посмотрите на команду «Довольно печать» (есть значок, как ->{})

После того, как сделали это, вы можете используйте javascript-консоль для оценки небольших фрагментов кода, чтобы перепроектировать его. Например. выражение (в начале вашего кода)

1) (s\u0065lf + ([] * 0) * 1) 
2) '\x5B' 
3) ((s\u0065lf + ([] * 0) * 1)[0^0] == '\x5B') 

возвращает эту строку в браузере

1) "[object Window]0" 
2) "[" 
3) true 

Просто найдите начальную точку и следовать оттуда. Obfuscated код следует тем же правилам, что и обычный, он просто испорчен.

+0

Вы действительно не смотрели на код пастеба, не так ли? Код * * уже был исправлен/довольно напечатан. – Bergi

+0

Думаю, я слишком обратил внимание на синюю среднюю часть, которая этого не заметила. – Xocoatzin

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