PHP UnReader - Обфускатор PHP-кода

V.Terentev

Новичок
PHP UnReader - Обфускатор PHP-кода

[http://altseotools.com/index.php?page=php_unreader]

PHP UnReader позволяет использовать 6 независимых методов обфускаци:
1. Удаление комментариев, переводов строк и лишних пробелов.
2. Замена всех кириллических символов HTML-сущностями в кодировке windows-1251. Этот метод не следует использовать, если PHP код генерирует код JavaScript, который оперирует кириллическими символами.
3. Замена содержимого всех кавычек последовательностями кодов символов (...chr(224).chr(225)...). Этот метод рекомендуется использовать всегда - один он заметно снижает мнемонические характеристики кода.
4. Кодирование имён переменных.
5. Кодирование названий функций.
6. Кодирование названий классов.

PHP UnReader позволяет провести обфускацию, используя один или несколько алгоритмов одновременно.

Можно отключить кодирование имён конкретных переменных, функций, классов. Также можно отключить кодирование отдельных файлов проекта.

Система реализован в виде PHP-скрипта. Его легко установить на локальном или удалённом сервере.

Вот пример обработанного кода:
if(strlen($lll111111l1) <= $lll11l11ll1) { if($lll111111l1 != "") $lll1ll1l1l1 = $lll111111l1; else $llllllll1l1 = chr(202).chr(238).chr(228).chr(32).chr(238).chr(242).chr(241).chr(243).chr(242).chr(241).chr(242).chr(226).chr(243).chr(229).chr(242); } else $llllllll1l1 = chr(202).chr(238).chr(228).chr(32).chr(239).chr(240).chr(229).chr(226).chr(251).chr(248).chr(224).chr(229).chr(242).chr(32).$lll11l11ll1.chr(32).chr(241).chr(232).chr(236).chr(226).chr(238).chr(235).chr(238).chr(226); } if($llllllll1l1 == "") { if($lllll1l11ll) { $lll1ll1l1l1 = chr(32).chr(32).chr(32).chr(32).$lll1ll1l1l1.chr(32); $lll1111l111 = strlen($lll1ll1l1l1); $llll1l111ll = false; $lll1l1ll111 = false; $llll1lll11l = false; $lll1llllll1 = false; $lllll11llll = false; $llll1l11ll1 = ""; for($lll11ll11ll = 4; $lll11ll11ll < $lll1111l111 - 1; $lll11ll11ll ++) { if(!$llll1l111ll) { if($lll1ll1l1l1[$lll11ll11ll] == chr(112) && $lll1ll1l1l1[$lll11ll11ll - 1] == chr(104) && $lll1ll1l1l1[$lll11ll11ll - 2] == chr(112) && $lll1ll1l1l1[$lll11ll11ll - 3] == chr(63) && $lll1ll1l1l1[$lll11ll11ll - 4] == chr(60))
 

WP

^_^
Было бы совсем хорошо - менять блоки кода местами посредством "функций".
 

V.Terentev

Новичок
Было бы совсем хорошо - менять блоки кода местами посредством "функций".
Возможно это будет реализовано позже, но для этого нужен более глубокий анализ кода - в особо критичных местах вызов функции может сильно замедлить работу, к тому же нужно анализировать какие параметры передавать в эти функции.
V.Terentev, абсолютно безполезная вещь!
Аргументы будут?
 

Андрейка

Senior pomidor developer
V.Terentev
выложи плиз любой законченный скрипт (не запчасть от чего то большого, замученный по полной твоим обфускатором, а мы подумаем над аргументами
 

AP

Новичок
Аргументы будут?
1. Если мне надо будет закодировать что либо, то я буду использовать Zend Encoder
2. как быть с динамически создаваемы классами в п.6
 

StUV

Rotaredom
AP
ты б по ссылке сходил, прежде чем "аргументировать"
 

BRat

o_0
<?php
class ABC extends AB {
public function __construct($var) {
$this->$var = 111;
}
}

<?php class ABC extends AB { public function ll11l1l111($llll1llll1) { $this->$var = 111; } }

не корректно малость. Это кстати при том, что я задал опцию "Кодировать названия классов"

-~{}~ 18.01.08 15:00:

<?php
class ABC extends AB {
public function __construct($var) {
$this->$var = 111;
}
}

$a = new ABC('1111');

Преобразовано

<?php class ABC extends AB { public function ll1111111l($lll1111l11) { $this->$var = 111; } } $lll11lll1l = new l1llll1ll1(

Я конечно всё понимаю, но настолько сырой продукт называть релизом, это слишком
 

V.Terentev

Новичок
Если мне надо будет закодировать что либо, то я буду использовать Zend Encoder
1. Напомню, что комплект Zend стоит совсем не мало, а когда речь идёт о коммерческой разработаке всё используемое ПО должно быть лицензионным.
2. Есть такая концепция ПО, когда в довесок к обфускатору дают много ненужного, за которое приходится также и платить - у пользователя не всегда есть желание покупать и разбирать с фрэймворками и т.д. когда ему нужно только получить защищённый код.
3. Защита Zend Encoder, как и любого метода "скрытия кода" - не панацея, а способ усложнить процесс взлома. Об этом много пишут, например здась: http://hax.himki.net/articles/html_pages3.html.

2. как быть с динамически создаваемы классами в п.6
Думаю всё решиться если проверить здась: http://altseotools.com/php_unreader/index.php.

не корректно малость. Это кстати при том, что я задал опцию "Кодировать названия классов"
Проверяем. Видим:
<?php class l1l1111l1l extends AB { public function ll111lllll($lllll1l111) { $this->$var = 111; } }
Класс ABC заменился, AB - нет, потомучто внешний. Видимо Вы не поставили галочки на кодирование класса ABC.

Я конечно всё понимаю, но настолько сырой продукт называть релизом, это слишком
Видимо я не совсем чётко выделил в ДЕМОНСТРАЦОННОЙ версии, что код обрезается, если он длиннее 500 символов. Сейчас я это исправлю.
 

V.Terentev

Новичок
гы.. за него еще и 30у.е. просят оказываеццо.. мдя, ужас)
А сколько бы Вы за него дали?? Любой из продуктов схожей функциональности стоит дороже. Назовите несколько, которые на Ваш взгляд более достойны.

Да, Андрейка, для ответа на Ваш вопрос
выложи плиз любой законченный скрипт
сделана демонстрационная версия: http://altseotools.com/php_unreader/index.php.
 

BRat

o_0
V.Terentev
косяк с классом исправили после моего поста. Косяк с $this->$var нет

"если он длиннее 500 символов."
у меня со зрением может и есть проблемы, но не настолько. В моем коде и 100 символов хорошо если наберется


Андрейка
меньше просить несолидно просто :)
 

Андрейка

Senior pomidor developer
V.Terentev
для меня на том сайте точно ничего нет, даже демонстрационной версии.. а скрипт просил лишь за тем, чтобы показать(или не показать), что ваша навороченная обработка не мешает чтению, изучению и модификации скрипта...на заранее известном мне скрипте проверять не интересно.. было бы, просьба уже не актуальна

А сколько бы Вы за него дали??
3 посещения вашего сайта вполне адекватная цена за этот скрипт.
 

tf

крылья рулят
V.Terentev, я могу использовать ваш офбускатор вызывая через функцию с параметрами из php файла?
 

V.Terentev

Новичок
косяк с классом исправили после моего поста
Косяки я не исправлял - только перезалил систему, добавив JavaScript-подтверждение при превышении длинны.

Сейчас замусь косяками.

Косяк с $this->$var нет
Да, действительно - поддерживаются 2 типа написания ->$var и ->var, как и ->func(). В кавычках поддерживаются {}. Один доконца не успели оттестировать. Сейчас всё исправлено.
Пример:
<?php
$a = $this->var;
$a = $this->$var;
$a = "$this->var";
$a = "$this->$var";
$a = "00{$this->$var}00";
?>
<?php
$lll11111l1 = $this->lll1ll1lll;
$lll11111l1 = $this->$lll1ll1lll;
$lll11111l1 = "".$this->lll1ll1lll."";
$lll11111l1 = "".$this->$lll1ll1lll."";
$lll11111l1 = "00".$this->$lll1ll1lll."00";
?>

у меня со зрением может и есть проблемы, но не настолько. В моем коде и 100 символов хорошо если наберется
Это был действительно косяк дэмки - преобразования кода при передачи POST-ом.

Отдельная брагодарность BRat за тестирование. Сейчас всё исправлено. Всётаки первый релиз ;) За такие дельные тесты будут предоставляться скидки, если автор пожелает купить продукт.

-~{}~ 18.01.08 22:25:

было бы, просьба уже не актуальна
Я может просто не понял просьбу. Что Вы собственно просили? Вроде я отвечал довольно коректно и Вас ничем не обидел.

я могу использовать ваш офбускатор вызывая через функцию с параметрами из php файла
Да. Параметры можно передавать по POST. При необходимости, можно сделать и через GET, чтобы использовать что-то вроде file_get_contents("http:\\script?from_dir=...&to_dir=...&...");
 

AP

Новичок
<?php
class TestController
{
function foo()
{
echo 'foo';
}
}
$params['controller'] = 'Test';
$controller_name = $params['controller'].'Controller';
$controller = new $controller_name();
$controller->foo();

не работает!
Call to undefined method TestController::ll111ll1l1()
 

V.Terentev

Новичок
Вы закодировали имя "TestController", а потом к нему обращаетесь. Обфускатор не может знать что содержимое строки используется в дальнейшем только для генерации иени переменной, и он должен влезть в эту строку и её значение поменять на новое имя класса. Если бы он так делал, то это породило бы множество менее очевидных проблемм.

Рекомендация одна - отключить кодирование класса "TestController". О таких случая, кстати, написано в хэлпе, в пункте "Ограничения использования".
 

cDLEON

Онанист РНРСlub
Мде. 2-5 регулярок и всё это приводится в человеческий -удобочитаемый вид. Единственный момент - имена переменных не будут столь информативными.
 

V.Terentev

Новичок
2-5 регулярок и всё это приводится в человеческий -удобочитаемый вид
Удобочитаемость - спорное понятие: можно посмотреть на HTML-код и представить как выглядит страница, но оцените Вы так дизайн?

Как легко Вы разберётесь с проектом в несколько тысяч строк?
 

jonjonson

Охренеть
Сейчас вношу изменения в один сайт. Код до меня писали несколько программистов. Лапшевидный без разделения бизнес логики от отображения. Условное форматирование. Редкие, не всегда понятные комментарии (типа die('Ошибка MySQL')). register_globals On Следовательно часть GET и POST переменных тупо как обычные переменные. magic_quotes_gpc On и тоже понятные последствия. Никакого следования стандартам, так что куча <font> <b> <p> и javascript прямо в строковых присваиваниях. Ключевые слова в SQL запросах и названия таблиц в нижнем регистре, имена полей БД в верхнем регистре и минимально сокращённой длины.

В общем, самая крутая обфускация :)
 
Сверху