потестируйте, плиз, мой PHP obfuscator

valyala

Новичок
потестируйте, плиз, мой PHP obfuscator

На выходных решил написать скрипт, преобразующий исходный PHP-код в одну строку, в которой без поллитра не разберешься :) Скрипт можно потестировать по адресу http://evd.4enet.by/chat/htdocs/php_encoder.enc.php.

Приветствуются любые вопросы, комментарии (в т.ч. "а нахер оно нужно?"), пожелания и сообщения о найденных багах.

В инете уже есть подобные вещи. Например, вот что находит гугль по запросу php obfuscator: http://www.google.com/search?q=php+obfuscator Так что можете сравнить качество работы моего скрипта с уже существующими obfuscator'ами (надеюсь, сравнение будет в мою пользу :))
 

fixxxer

К.О.
Партнер клуба
А при error_reporting=E_ALL ты пробовал получившийся скрипт запускать?
 

SelenIT

IT-лунатик :)
Кстати, да. Во вчерашнем примере из оффтопика была неопределенная константа. Я так понял, что это фича для лучшей маскировки :) - при стандарнтных настройках не проявится, а логику разгадки усложнит.

ИМХО, защита кода из этого близкая к нулю. Простой скрипт вполне реально расшифровать за приемлемое время, а сложный из-за дополнительных расходов на маскировку вряд ли сможет нормально работать.

А вот в учебных целях, как тест на знание синтаксиса языка (включая отлов преднамеренных нефатальных ошибок!), да и просто как интеллектуальное развлечение, или, если угодно, спорт - просто прелесть как чудесно!
 

SelenIT

IT-лунатик :)
fixxxer, большое спасибо за уточнение.
Виноват, отстал от прогресса - буду спешно наверстывать.
 

valyala

Новичок
А при error_reporting=E_ALL ты пробовал получившийся скрипт запускать?
Да, все отлично работает. Я тестировал скрипт под php 4.3.8. Может, под пятой версией какие глюки?
Кстати, да. Во вчерашнем примере из оффтопика была неопределенная константа
Вроде не было там никакой константы... Или я ее не заметил. Хотя вряд ли - пхп бы ругнулся notice'ом на undefined constant. Или пхп ее тоже не заметил? :)
ИМХО, защита кода из этого близкая к нулю. Простой скрипт вполне реально расшифровать за приемлемое время, а сложный из-за дополнительных расходов на маскировку вряд ли сможет нормально работать.
Не спорю, что защита близка к нулю. Но, как известно, любую защиту можно взломать. Вопрос только в ресурсах (в основном это время и деньги), необходимых на взлом. Так вот, защита считается надежной, если ресурсы, затраченные на ее взлом, превышают ресурсы, затраченные на создание защищаемого продукта. К тому же, исходный код обычно нужен для того, чтобы что-нибудь в нем подправить или передрать оттуда какой-нибудь алгоритм (а еще лучше - готовую часть кода, в которой необходимы лишь незначительные изменения). Т.к. obfuscator удаляет все комментарии и форматирование, безвозвратно переименовывает названия переменных, функций и констант, а также заменяет все строки на константы, которые инициализируются в начале скрипта, то мало кто осмелится разбираться в таком коде.

Пару слов о найденных "конкурентах".
Судя по рейтингу google, самый известный obfuscator - это POBS. Протестировать его в онлайне можно тут: http://www.jimworld.com/tools/php-encrypt/

Obfuscator по этому адресу http://www.semdesigns.com/Products/Obfuscators/PHPObfuscationExample.html продают за $150.

А вот этот http://sourceguardian.com/ продают уже за $250. Там же можно загрузить демо-версию.

p.s. интересно, а почему этот топик перекинули из "пхп для продвинутых" в "оффтопик"?

p.p.s. Сегодня я исправил кое-какие глюки, которые могли проявляться вчера. Так что тестируйте мой obfuscator снова. Адрес остался прежним: http://evd.4enet.by/chat/htdocs/php_encoder.enc.php

-~{}~ 06.10.04 23:39:

Сегодня добавил поддержку классов, которую так все просили

-~{}~ 08.10.04 22:31:

Мой obfuscator кардинально обновился. Теперь в нем доступны следующие настройки:
- удаление лишних пробелов
- удаление комментариев
- необратимое переименование пользовательских функций, классов, констант и переменных
- возможность создание списка зарезервированных имен функций, классов, констант и переменных, которые не должны подвергаться изменениям
- замена строк в одинарных и двойных кавычках на константы (в обработанном коде не будут встречаться эти строки в открытом виде)
- замена HEREDOC-строк на константы
- замена зарезервированных имен переменных на ${const}. Хотя имена этих переменных остаются прежними, но в обработанном коде они будут заменены на константы со случайными именами
- замена HTML-кода на echo const , где в const хранится замененный HTML-код
- замена вызовов внешних, системных и зарезервированных имен функций на $GLOBALS[const](). Тем самым скрывается истинное название функции
- замена имен внешних и системных констант на случайные имена
- замена целых и вещественных чисел на константы
- возможность использования расширенного набора символов для генерации имен функций, констант, переменных и классов
- сжатие таблицы символов
 
Сверху