Мой вопрос в том, как я могу декодировать этот JavaScript и как кодируется (с помощью какой программы или онлайн-инструмента).Как декодировать этот javascript?
Вот JavaScript, что я хочу, чтобы расшифровать: http://pastebin.com/hZvKySjj
Мой вопрос в том, как я могу декодировать этот JavaScript и как кодируется (с помощью какой программы или онлайн-инструмента).Как декодировать этот javascript?
Вот JavaScript, что я хочу, чтобы расшифровать: http://pastebin.com/hZvKySjj
Каждый запутанный скрипт нуждается в некотором виде 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 по выполнению фрагментов декодирования по очереди является более безопасным способом.
это freaking smart – VeXii
Большое спасибо, друг! :) –
Единственный способ я знаю, чтобы понять, что делает этот код, чтобы найти безопасную окружающую среду (в случае, если код имеет злого умысла) и выполнить его по очереди в отладчике и наблюдать за тем, что он делает, поскольку он деобфусцирует себя, чтобы превратить себя в обычный javascript. Имена переменных часто остаются скрытыми, но гигантская строка в _O будет расшифрована во что-то (вероятно, код javascript).
Посмотрите: 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 код следует тем же правилам, что и обычный, он просто испорчен.
Это запутанное .. –
Если у вас нет представления о том, что он должен делать, деобфас, это будет почти невозможно. – 11684
Это не то, что можно легко декодировать, это просто сложная запись кода. –