Добрый день/вечер/ночь/утро (нужное подчернуть или обвести карандашиком) уважаемые. Не так давно мной была написаны мини статьи-обзоры о вскрытии пдф сплойта, снятии сплойтов с лакисплойта. После чего я получил как и письма с предложениями продолжить писанину, так и угрозы. Типа какого черта я палю линки со связками и тем более учу "нубососов" (авт. орф. сохранена) это делать.
Хочу сказать спасибо первым, и послать в далекое эротическое путешествие вторых. На рынке выживает сильнейший, а так-как мне достало видеть горы говно крипторов которые снимаются в течении 1 мин, я решил начать цикл статей о написании отдельных внутренностей связок. Ибо я хочу воплотить в жизнь свой наиковарнейший план по обучению армии молодых одептов связко-писателей, что-бы "уважаемые" связко-писатели наконец подняли свою жопу от стула, и занялись более полезным делом ежели пересчитывание зеленых банкнот полученых за их творения.
Сегодня мы напишем простенький, но тем не менее вполне рабочий мини "криптор". Точнее сказать обфускатор. Ибо ничего кроме запутывания он не делает, но людям уже будет куда стремится и что править.
Скажу сразу, наше чудо-юдо палится, по крайней мере моим каспером, но если есть голова и коэфицент кривизны рук не особо сильный, всё получится.
Начнем.
Немного поясню принцип работы это существа. Берется строка, режется на рандомной длинны кусочки, эти кусочки перемешиваются и загоняются в перемменные. В итоге получаем много-много перемешанных переменных. Потом все они соединяются в единое целое и запускаются на выполнение. Всё предельно просто и красиво (чесно признаюсь позаимствованно у лаки, но там лучше, хотя вы можете всё поправить
).
Итак начала самым-самым первым делом займемся обфускацией переменных, то бышь генерированием их имен на лету. Для этого опишем функцию генерящую строку заданной длинны по всем правилам программирование, то есть отсутствие спец символов и первый символ не может быть цифрой.
логичный вопрос, что эта хрень делает? поясню. Для начала иницилизируем переменную. Потом гоним цикл с кол-вом повторов равными заданной длинне. После чего, проверяем какой символ мы собираемся генерить, если первый, то рандомизируем будет ли это заглавная буква или строчная, если-же нет, то рандомом вычисляем будет ли это цифра, строчная буква или заглавная. Ну и собсно возвращаем саму сгенеренную строчку.
Что дальше? А дальше мы объявляем саму перемменную в которой будет хранится текст требующий обфусцирования
После чего удаляем из текста все переносы строк и возврат каретки
Следом требуется объявить еще две переменные, первая будет отвечать за хранение непосредственно перемешанного текста, вторая хранить изначальное положение текста.
Вот приготовления и закончены, приступим непосредственно к написанию кусочка кода, отвечающего за порезку исходного текста.
И думаю опять коронный вопрос, что это за индийский кодес и что он делает? О_о В общем, пока строка есть, она не может не есть. Шутко). Пока строка не кончилась, берем рандомный её кусочек, создаем переменную и присваиваем этой переменной этот кусочек. Паралельно во второй массив пишем только имена перемменных, то бишь делаем такой порядок, который требуется для сборки строки. Вырезае из исходной строки её кусочек и повторяем заново. После всего это остается перемешать первый массив, где хранятся данные вида var имя_переменной='значение_переменной'; с чем успешное справляется пхп-шная функция shuffle.
Ну и собственно завершающая часть кодеса.
Тут вы выводим всякие штуки типа <html><body><script>, склеиваем содержимое перемешанного массива в одну строчку. Инициализируем переменную в которой будем собирать исходную строчку (в принципе оно не нужно даже, можно прямо сразу сделать сборку при выводе). Собираем в строчку исходный порядок склеивания текста вида var имя_переменной_отвечающей_за_сборку_текста=переменная1+переменна2+...+переменнаяN;. Ну и финал, кидаем собранную строчку на eval. Плюс снова вывод всяких странных штук </script></body></html>. В принципе всё. Есть готовый алгоритм. В переммешанном виде код выглядит примерно так
После выполнения всё встает на свои места.
Заключение.
Что я хотел показать написал этот бред? А то, что стоит хоть порой включать мозги и вносить чтото новое в алгоритмы, а не просто менять местами переменные и их имена. Всем спасибо за время, потраченное на прочтение сего креатива, надеюсь вам понравилось.
Файл с исходником, оформленным в виде процедуры можно скачать тут http://xss.pro/style_emoticons/default/software.gif.
Пароль: DiFor(17.03.09)
Хочу сказать спасибо первым, и послать в далекое эротическое путешествие вторых. На рынке выживает сильнейший, а так-как мне достало видеть горы говно крипторов которые снимаются в течении 1 мин, я решил начать цикл статей о написании отдельных внутренностей связок. Ибо я хочу воплотить в жизнь свой наиковарнейший план по обучению армии молодых одептов связко-писателей, что-бы "уважаемые" связко-писатели наконец подняли свою жопу от стула, и занялись более полезным делом ежели пересчитывание зеленых банкнот полученых за их творения.
Сегодня мы напишем простенький, но тем не менее вполне рабочий мини "криптор". Точнее сказать обфускатор. Ибо ничего кроме запутывания он не делает, но людям уже будет куда стремится и что править.
Скажу сразу, наше чудо-юдо палится, по крайней мере моим каспером, но если есть голова и коэфицент кривизны рук не особо сильный, всё получится.
Начнем.
Немного поясню принцип работы это существа. Берется строка, режется на рандомной длинны кусочки, эти кусочки перемешиваются и загоняются в перемменные. В итоге получаем много-много перемешанных переменных. Потом все они соединяются в единое целое и запускаются на выполнение. Всё предельно просто и красиво (чесно признаюсь позаимствованно у лаки, но там лучше, хотя вы можете всё поправить
Итак начала самым-самым первым делом займемся обфускацией переменных, то бышь генерированием их имен на лету. Для этого опишем функцию генерящую строку заданной длинны по всем правилам программирование, то есть отсутствие спец символов и первый символ не может быть цифрой.
Код:
function gen_rnd($len) {
$rnd_text=null;
for ($i=0;$i<$len;$i++){
$temp=rand(1,3);
if ($i==0){
$temp2=rand(1,2);
if ($temp2==1) {
$rnd_text.=chr(rand(65,90));
} else {
$rnd_text.=chr(rand(97,122));
}
} else {
if ($temp==1) {
$rnd_text.=chr(rand(65,90));
} elseif ($temp==2) {
$rnd_text.=chr(rand(97,122));
} else {
$rnd_text.=chr(rand(48,57));
}
}
}
return $rnd_text;
}
Что дальше? А дальше мы объявляем саму перемменную в которой будет хранится текст требующий обфусцирования
Код:
$content="alert(\"123\");document.write(\"Цены на рекламу на портале Exploit.IN
Тематика сайта ясна. Можно сказать, что сайт - один из немногих, выживших на сцене, 10ти крупнейших по теме в Русснете, существует с самого начала 2005 года.\");";
Код:
$repls=array("\n","\r");
$content=str_replace($repls,"",$content);
Код:
$str_s=array();
$dec_str_s=array();
Код:
while ($content!=''){
mt_srand((float)microtime()*1000000);
$n=mt_rand(5,20);
$val_name=gen_rnd(mt_rand(3,7));
if (strlen($content)<$n){
$str_s[]='var '.$val_name.'=\''.substr($content,0).'\';';
$content='';
}else{
$str_s[]='var '.$val_name.'=\''.substr($content,0,$n).'\';';
$content=substr($content,$n);
}
$dec_str_s[]= $val_name;
}
srand ((float)microtime()*1000000);
shuffle ($str_s);
Ну и собственно завершающая часть кодеса.
Код:
echo "<html><body><script>";
$str='';
foreach ($str_s as $val) $str.=$val;
$dec_val=gen_rnd(mt_rand(3,7));
$dec_str='';
for ($i=0;$i<count($dec_str_s)-1;$i++) $dec_str.=$dec_str_s[$i].'+';
$dec_str.=$dec_str_s[count($dec_str_s)-1];
echo $str.'var '.$dec_val.'='.$dec_str.';';
echo 'eval('.$dec_val.');';
echo "</script></body></html>";
Код:
...var UZ1rp='а сайта';var h9O0='");';var KTBWpKx='"123");document.wr';var Xi9c8='ite("Цены на ';...
Заключение.
Что я хотел показать написал этот бред? А то, что стоит хоть порой включать мозги и вносить чтото новое в алгоритмы, а не просто менять местами переменные и их имена. Всем спасибо за время, потраченное на прочтение сего креатива, надеюсь вам понравилось.
Файл с исходником, оформленным в виде процедуры можно скачать тут http://xss.pro/style_emoticons/default/software.gif.
Пароль: DiFor(17.03.09)