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))
---------------------------------------------------------------------------
Последняя версия PHP UnReader(ver 1.2.38):
- возможность "замусоревания" кода
- поддержка heredoc-синтаксиса
- переопределения SPL-классов, некоторых других возможностей PHP5
- улучшен механизм обработки файла с большим количеством отдельных PHP-вставок
- повышена скорость работы
- улучшен механизм пресетов
PHP UnReader, как серверный продукт позволяет автоматизировать процесс продажи скрипта с индивидуальной обфускацией для каждого пользователя. Индивидуальная обфускация позволяет совершенно точно "подписать" копию за определённым клиентом, т.к. набор имён переменных, функций и классов всегда уникален.
Описание: http://altseotools.com/php_unreader.htm
Демонстрационная версия: http://altseotools.com/php_unreader
Спустя 8 часов, 59 минут, 46 секунд (18.01.2008 - 11:05) vasa_c написал(а):
Вы в десятки раз замедлили работу сценария своими chr() при том, что деобсфукатится это на раз.
Невозможно обсфуцировать распространяемую библиотеку.
п.1. Учитывается возможность пересечения комментариев и строк?
п.2. Вобще не понял.
И последний вопрос — что нового по сравнению с десятками подобными программами?
Невозможно обсфуцировать распространяемую библиотеку.
п.1. Учитывается возможность пересечения комментариев и строк?
п.2. Вобще не понял.
И последний вопрос — что нового по сравнению с десятками подобными программами?
Спустя 2 часа, 39 минут, 26 секунд (18.01.2008 - 13:44) V.Terentev написал(а):
Цитата
Вы в десятки раз замедлили работу сценария своими chr()
Откуда эти сведения? С теорией оптимизации кода я тоже знаком, но что выходит на практике? Проведём тест:
1. Обфускация своего же кода, системой с неизменённым исходником: 2.36 сек.
2. Обфускация своего же кода, системой с обфусцированным исходником: 2.51 сек.
Видно, что заметного уменьшения быстродействия просто нет, хотя в коде обфускатор символы и строки встречаются довольно часто и в самых критичных местах.
Цитата
деобсфукатится это на раз
Предложите более сктойкий метод скрытия содержимого кавычек.
Цитата
Невозможно обсфуцировать распространяемую библиотеку
В топике было написано, что можно отключить кодирование имён конкретных переменных, функций, классов. Также можно отключить кодирование отдельных файлов проекта. Это значит, что все вызываемые из вне объекты можно не кодировать для сохранения возможности использования.
Цитата
Учитывается возможность пересечения комментариев и строк?
Да, а также пересечения всех остальных лексем: кавычек двух типов, комментариев двух типов, блоков пхп, ...
Цитата
п.2. Вобще не понял.
Замена символов русского шрифта на сужности типа " ".
Цитата
что нового по сравнению с десятками подобными программами
Назовите несколько, я напишу что нового по сравнению с каждым.
Спустя 26 минут, 4 секунды (18.01.2008 - 14:10) vasa_c написал(а):
Цитата
Откуда эти сведения? С теорией оптимизации кода я тоже знаком, но что выходит на практике? Проведём тест:
1. Обфускация своего же кода, системой с неизменённым исходником: 2.36 сек.
2. Обфускация своего же кода, системой с обфусцированным исходником: 2.51 сек.
1. Обфускация своего же кода, системой с неизменённым исходником: 2.36 сек.
2. Обфускация своего же кода, системой с обфусцированным исходником: 2.51 сек.
Да не вашего сценария, а того, который вы кодируете.
Я конечно несколько переборщил с фразой "в десятки раз замедлили работу сценария", на деле — "в десятки раз замедлили формирование строк". Насколько замедлился сценарий зависит, от того, сколько раз в нём эти строки генерируются.
п.2. Этим вы полностью изменяете работу сценария. Обсфукатор ничего подобного не должен делать.
Цитата
Назовите несколько, я напишу что нового по сравнению с каждым.
Сходите в поиск по запросу "обсфукатор PHP".
Спустя 6 часов, 10 минут, 11 секунд (18.01.2008 - 20:21) V.Terentev написал(а):
Цитата
Да не вашего сценария, а того, который вы кодируете.
Смотрим описание функции get_defined_vars():
Эта функция возвращает многомерный массив, содержащий список всех определённых переменных: окружения, серверных и пользовательских.
Обрабатываемый скрипт у нас в виде строки. Вызвав функцию get_defined_vars() мы получим список переменных, объявленных в самом обфускаторе, но никак не в обрабатываемой строке. Для этого нам нужно её как минимум запустить на выполнение.
Или я чего-то не понимаю??
Цитата
Насколько замедлился сценарий зависит, от того, сколько раз в нём эти строки генерируются.
Практика показывает, что эта задержка незначительна. В приведённом примере для каждого символа всего обрабатываемого скрипта выполняется код, содержащий несколько сетен chr() - дополнительная задержка составила лишь 10% от время выполнения "чистого" скрипта.
Цитата
п.2. Этим вы полностью изменяете работу сценария. Обсфукатор ничего подобного не должен делать.
Кирилические символы могут встречаться в PHP только в выдаче браузеру или в коментариях. Браузер понимает HTML-сущности, комментарии нас волнуют не сильно. Единственная возможная проблема - это функции JavaScript, код которых генерируется PHP и в процессе выполнения которых используются строковые константы с кирилицей. Браузер не обработает HTML-сущность выданную JavaScript. Именно поэтому ВСЕ методы можно использовать НЕЗАВИСИМО. Кроме того, замена кирилических символов по умолчанию не включена.
Цитата
Сходите в поиск по запросу "обсфукатор PHP".
Я не имел в виду, что я ни одного не знаю, а предлагал обсудить более конкретно те, который Вас интересуют. Например PHPDefender не предлагает защиты строковых констант вообще, что недопустимо. Zend Encoder стоит не мало и имеет свои недостатки. Некоторые проекты с открытым кодом откровенно сбоят.
Спустя 38 минут, 43 секунды (18.01.2008 - 20:59) vasa_c написал(а):
Цитата
Кирилические символы могут встречаться в PHP только в выдаче браузеру или в коментариях.
Кириллические символы могут встречаться в сотнях возможных случаях, а не только в выдаче браузеру.
И даже если учесть все эти случае, всегда останутся сотни, о которых вы даже не предполагали.
Кроме браузера еще есть запись в файлы, запись в БД, отправка мыла, отправка запроса серверу.
Кроме вывода в html, есть вывод plain/text, xml и еще очень много чего.
Кроме JS так же есть много чего в html, где кодирование недопустимо.
Более того, каждый более-менее квалифицированный программист, сам должен изначально писать html-код в сущностях или же использовать кодирование через htmlSpecialChars(). При использовании вашей "фичи" будет двойное преобразование.
Спустя 11 минут, 10 секунд (18.01.2008 - 21:11) V.Terentev написал(а):
Цитата
Кириллические символы могут встречаться в сотнях возможных случаях, а не только в выдаче браузеру.
Я писал о "обычном" случае. Также я писал, что эта возможность является ОПЦИЕЙ. Её можно использовать, а можно и нет. Например, её можно использовать для обработки файла шаблона выдачи.
Вы считаете что мало её выключить по умолчанию - надо вообще убрать из интерфейса?
Спустя 20 минут, 40 секунд (18.01.2008 - 21:31) vasa_c написал(а):
Я считаю, что вы привели несколько пунктов и все они при ближайшем рассмотрении оказываются опциями или еще чем-то.
Из всего что вы написали, единственным, что как-то может запутать, это изменение идентификаторов, которое вы для увеличения объема текста разбили на 3 пункта. Но эта вещь реализована и во всех других подобных вещах. Более того, реализуется от руки за непродолжительное время. А вы денег за это хотите.
Из всего что вы написали, единственным, что как-то может запутать, это изменение идентификаторов, которое вы для увеличения объема текста разбили на 3 пункта. Но эта вещь реализована и во всех других подобных вещах. Более того, реализуется от руки за непродолжительное время. А вы денег за это хотите.
Спустя 1 час, 20 минут, 25 секунд (18.01.2008 - 22:52) V.Terentev написал(а):
Цитата
Я считаю, что вы привели несколько пунктов и все они при ближайшем рассмотрении оказываются опциями или еще чем-то
Я так понял, что притензии у Вас только к одному пункту "Заменять все кириллические символы HTML-сущностями", который тем не менее в ряде случаев может быть очень полезен. Что в других пунктах кажется Вам неприменимым?
Цитата
Из всего что вы написали, единственным, что как-то может запутать, это изменение идентификаторов, которое вы для увеличения объема текста разбили на 3 пункта
Это именно 3 пункта, потомучто их можно выполнять независимо - например для обфускации библиотеки, функции которой вызываются извне ненужно кодировать функции и т.д. Кроме того, выполнив один, можно проверить всё ли правильно, и делать дальше.
Цитата
Более того, реализуется от руки за непродолжительное время. А вы денег за это хотите.
Это будет очень нелегко хотябы для 5000 строк в 10 файлах. Думаю такая работа займёт не один час, а её оплата точно превысит денег на обфускатор. А если Вы делаете 3 релиза в сутки?
Спустя 59 минут, 42 секунды (18.01.2008 - 23:51) vasa_c написал(а):
Претензий у меня никаких нет.
Вы привели 6 пунктов.
Из них 3 одно и тоже, даже если их и можно выполнять по этапам.
п.2. - совершенно сомнительная "опция".
п.3. - создание кучи кода и существенное замедление сценария, при том, что расшифровщик можно написать за пару минут.
п.1. - даёт какой-то эффект, но минимальный.
"От руки" я имел ввиду написать собственный подобный сценарий.
Вы привели 6 пунктов.
Из них 3 одно и тоже, даже если их и можно выполнять по этапам.
п.2. - совершенно сомнительная "опция".
п.3. - создание кучи кода и существенное замедление сценария, при том, что расшифровщик можно написать за пару минут.
п.1. - даёт какой-то эффект, но минимальный.
Цитата
Это будет очень нелегко
"От руки" я имел ввиду написать собственный подобный сценарий.
Спустя 1 час, 2 минуты, 6 секунд (19.01.2008 - 00:53) V.Terentev написал(а):
Цитата
"От руки" я имел ввиду написать собственный подобный сценарий.
Значит этот продукт просто не для Вас, если Вы легко напишете его сами. Однако, как Вы знаете у PHP очень "гибкий" синтаксис. Скажу Вам честно, было не так легко учесть все его особенности.
Всвязи с этим у меня вопрос:
Стояла ли перед Вами задача защиты кода на интерпретируемом языке и какой продукт или методы Вы использовали?
Спустя 12 часов, 17 минут, 26 секунд (19.01.2008 - 13:11) vasa_c написал(а):
Цитата
Скажу Вам честно, было не так легко учесть все его особенности.
Ну Вы хередок и еще какие-то вещи не учли

Обсфукаторов не делал, но делал подсветку синтаксиса. Относительно простым токинезатором можно достаточно легко вытащить все идентификаторы. Им же можно разобрать код, слитый в одну строку и вывести красиво с отступами.
Цитата
Стояла ли перед Вами задача защиты кода на интерпретируемом языке и какой продукт или методы Вы использовали?
Не часто. Там где надо — Zend. Он хоть еще и начальную загрузку ускоряет.
Спустя 1 час, 31 минута, 48 секунд (19.01.2008 - 14:43) V.Terentev написал(а):
Цитата
Ну Вы хередок и еще какие-то вещи не учли 

Хередок и динамическую генерацию имён переменных. Хередок будет скоро сделан, а генерация имён типа ${$a.func($b)} возможна только при трансляции кода - просто надо отменить кодирование этих переменных.
Цитата
Относительно простым токинезатором можно достаточно легко вытащить все идентификаторы
Незнаю, как Ваша подсветка кода, но даже подсветка кода в Опере ошибается при обработке кода JavaScript с некоторыми лексемами, хотя сама Опера выполняет всё правильно.
Но речь вообще не об этом, а о том, что часть данных, которые нужны для нормального понимания/редактирования/менеджмента кода уже безвозвратно утеряна.
Цитата
Им же можно разобрать код, слитый в одну строку и вывести красиво с отступами.
И даже это не суть. Вы когда-нибудь разбирали с большим чужим кодом? Это нелегко. Вот разобраться с обфусцированным несравнимо более сложно, хотя и гипотетически возможно. Суть втом, чтобы этот процесс осложнить максимвльно.
Цитата
Там где надо — Zend. Он хоть еще и начальную загрузку ускоряет.
Насколько я понимаю, скрипт закодированый с помощью ZendEncoder работает только вместе с ZendOptimizer. Поэтому, ZendEncoder нельзя рассматривать как прямой конкурент классическому обфускатору.
Например Вы решили продавать какой-нибудь модуль, например SEO-статистику. Совершенно недопустимо, чтобы этот модуль работал только на платформе с ZendOptimizer.
Спустя 4 минуты, 53 секунды (19.01.2008 - 14:48) vasa_c написал(а):
ZendOptimizer бесплатен и ставится очень просто.
Даже на виртуальных хостингах уже у большинства солидных хостеров он есть.
Даже на виртуальных хостингах уже у большинства солидных хостеров он есть.
Спустя 11 минут, 24 секунды (19.01.2008 - 14:59) V.Terentev написал(а):
Цитата
Даже на виртуальных хостингах уже у большинства солидных хостеров он есть.
На нескольких десятках сайтов, которые я так или иначе веду ZendOptimizer есть только на нашем выделенном сервере. Хостинги выбирал не я, а клиент/предыдущий администратор. Поэтому, на данном этапе например я не могу использовать Zend-технологии для кодирования собственных скриптов.
Вообще при разработке PHP UnReader одной из основных задачь была задача отказа от любого дополнительного серверного ПО. Это классическая обфускация, а не кодирование.
Спустя 2 дня, 9 часов, 39 минут, 52 секунды (22.01.2008 - 00:39) V.Terentev написал(а):
Для тех кто хотел проверить свои способности в деобфускации: ТЕСТ. Вот скрипт, обфусцированный [PHP UnReader]: http://www.pilotstudio.ru/download/index.zip - это основная часть многофайлового проекта. Задача: более или менее ПОДРОБНО изложить алгоритм. Кроме того, заметить сколько на это потребовалось времени.
Спустя 8 дней, 17 часов, 42 минуты, 40 секунд (1.02.2008 - 18:21) valet написал(а):
Ещё один проект подобного рода http://noxis.ru/obf.html. Выручил меня пару раз. Пробуйте
Спустя 1 месяц, 21 день, 18 часов, 54 минуты, 11 секунд (23.03.2008 - 13:16) V.Terentev написал(а):
Цитата(valet @ 1.2.2008, 18:21) [snapback]32998[/snapback]
Ещё один проект подобного рода http://noxis.ru/obf.html. Выручил меня пару раз. Пробуйте
Ну это совсем не то - один файл, самому необходимо вписать иена, нет ни замусоривания, ни обработки содержимого кавычек. Совершенно не пригодно для сколько-нибудь крупного проекта.