it-swarm.com.ru

Сократить / Обфусцировать PHP Код

Я использую Haxe для генерации PHP кода. (Это означает, что вы пишете свой код на языке Haxe и получаете компиляцию php-файлов после компиляции.) Сегодня клиент сказал мне, что ему нужна новая функция для старого проекта, созданного с помощью Haxe. Он также сказал мне, что он изменил некоторые мелочи в коде для своих собственных нужд. Теперь я сначала перенесу его изменения в мой код Haxe, а затем добавлю новую функцию, потому что в противном случае его изменения будут перезаписаны при следующей компиляции проекта.

Чтобы этого не случилось, я ищу какую-то программу, которая минимизирует/запутывает код PHP. Цель состоит в том, чтобы сделать код нечитаемым/недоступным для редактирования, насколько это возможно.
Идеальный инструмент работал бы под Linux и мог обрабатывать целые папки и все содержащиеся в них файлы.

Есть какие-нибудь предложения?

16
TheHippo

Я согласен с комментарием, что вы делаете очень скрытно, но после 10 лет в этом бизнесе я могу засвидетельствовать одну вещь: половина получаемого вами кода настолько запутана, что с таким же успехом могла быть минимизирована, и действительно имена функций/переменных так часто совершенно произвольны, я редактировал минимизированные js, и это было не намного сложнее, чем какой-то не унифицированный код.

Я не смог найти ни одного такого скрипта/программы, скорее всего, потому что это отчасти противоречит духу PHP и ​​немного закулисно, тем не менее.

Во-первых: Php не чувствителен к пробелам, поэтому первый шаг - удалить все строки и пробелы вне строки.

Это усложнит работу среднего тинкера, программист среднего уровня просто найдет и заменит все; {} на $ 1\n или что-то в этом роде.

Следующим шагом будет get_defined_functions и сохранить этот массив (ключ 'user' в возвращаемом массиве), вам нужно будет включить все файлы для этого.

Если это oo-код, вам также понадобятся get_defined_classes. Сохраните этот массив.

По сути, вам нужно получить переменные, методы и экземпляры классов, вам нужно создать экземпляр класса и get_object_vars для него, и вы можете поэкспериментировать и увидеть, что вы можете получить много другой информации, например, Константы и классы vars и т.д. ,.

Затем вы берете эти списки, просматриваете их, создаете уникальное имя для каждой вещи, а затем preg_replace или str_replace, которое во всех файлах.

Убедитесь, что вы делаете это на тестовой копии, и посмотрите, какие ошибки вы получите.

Хотя, чтобы было ясно, в аду есть особое место, отведенное для людей, которые запутывают себя ради запутывания.

Проверьте: get_defined_functionsget_declared_classes и просто перейдите по ссылкам, чтобы узнать, что вы можете сделать.

17
J. Martin

Почему бы не использовать php buid в функции php_strip_whitespace ()

string php_strip_whitespace ( string $filename )

Возвращает исходный код PHP в имени файла с удаленными комментариями PHP и ​​пробелами. Это может быть полезно для определения количества фактического кода в ваших сценариях по сравнению с количеством комментариев. Это похоже на использование php -w из командной строки.

24
RoboTamer

Мы используем Zend Guard для кодирования нашего PHP кода с определенными клиентами, но, как сказал Parrots, вы должны быть уверены в вас владеть кодом. Мы кодируем только в определенных ситуациях, и только когда ясно, что мы сохраняем право собственности на код, в противном случае Parrots прав, клиент имеет право изменять его.

4
catsby

Я знаю о Zendguard , Expressionengine использовал его для шифрования основного кода своей пробной версии. Вы всегда можете попробовать, хотя вам нужно заплатить за это.

Однако, хотя я понимаю разочарование от необходимости переноса его изменений, я предполагаю, что они приобрели код у вас? Они имеют право изменять его. Вы просто имеете право взимать с них дополнительную плату за перенос их изменений;) Представьте, что вы перестали работать на них, как они могут нанять кого-то другого для обновления кода?

4
Parrots

Наш PHP Obfuscator точно выполняет работу по удалению комментариев, пробелов и идентификаторов шифрования.

Он работает с полным набором PHP файлов, чтобы гарантировать, что скремблированные символы последовательно скремблируются в этих файлах, обеспечивая правильную работу даже после скремблирования.

EDIT 2013: теперь шифрует строковые литералы, чтобы сделать их нечитаемыми. Работает под Windows, а под Linux под Wine.

2
Ira Baxter

Вы можете попробовать PHP Obfuscator или расширение bcompiler PHP .

1
Alix Axel

Я только что нашел minify-сервис для PHP. Это действительно выглядит полезным. Говорят, что запутывание скоро будет доступно. Я надеюсь, что это правда :) http://customhost.com.ua/php-minify/

0
andrew