2016-10-03 8 views
2

ionCube хранит php-файлы в зашифрованном виде и устанавливается как расширение php, но я хочу знать, когда я запрашиваю зашифрованный php-файл из незашифрованного php-файла, как его выполняет php-компилятор.Как работает ionCube внутри?

Он отправляет зашифрованный файл на сервер ionCube и получает исходный файл и компилирует его или что-то еще.

Означает, как происходит связь между нашим сервером и ionCube. Я думаю, это через завиток, но я хочу знать, как это работает.

+0

Вы имеете в виду, что хотите получить представление высокого уровня о его работе, не так ли? Объяснение низкого уровня будет слишком широким. для любого сайта Exchange. На это уже нет официальной документации? –

+0

После прочтения [general description] (http://www.ioncube.com/php_encoder.php) ionCube, я могу сказать, что это может быть и то, и другое. «Простое» выполнение компилирует php-файлы в байт-код (обфускация, а не шифрование), но есть и следующее: * «Версия 9.0 включает новые функции динамических и внешних ключей, которые идут дальше в защите скомпилированного байт-кода». *, Который он похоже, это то, о чем вы просите. –

ответ

6

Как вы, возможно, уже подняли, исходный код так и не был получен, а обработка основана на байт-коде.

Вот информация высокого уровня, которая может помочь.

PHP Расширение

РНР имеет два типа расширений, модуля расширение, такие как закручивание, которые, как правило, обернуть внешние интерфейсы API и подвергать их функциональные возможности с помощью новых функций PHP и PHP двигателей расширений. Хотя различие не установлено в камне, расширения двигателя, как правило, взаимодействуют с компилятором PHP и механизмом выполнения, хотя они могут также добавлять новые функции PHP. ionCube - это расширение ядра, которое также добавляет функции PHP для его API, а также поддерживает ionCube24, хотя используется также для установки в качестве расширения модуля с помощью dl(). Оба типа модулей являются общими библиотеками, а одна строка в файле php.ini используется для добавления расширения на PHP, при этом PHP использует функции ОС для динамической привязки библиотеки к текущему процессу.

Крючки

PHP имеет внутренние крючки, которые позволяют расширение, чтобы перехватить компилировать и выполнять этапы обработки исходного файла. Расширение может использовать их просто для выполнения дополнительных шагов до или после обычной обработки или полностью заменить обычную обработку. ИонКуб-загрузчик использует компилятор для проверки файла до того, как его скомпилирует PHP-модуль, и берет на себя задачу обработки файла, если он является файлом ionCube. Результатом чтения файла ionCube или обычной компиляции является, в конечном счете, байт-код, однако байт-код ionCube является нестандартным, а с версией 9 он по-прежнему может быть зашифрован или недоступен по другим причинам после первоначальной обработки файла. Поскольку стандартный механизм выполнения не может обрабатывать байт-код ionCube, Loader также использует крючок выполнения для выполнения выполнения скомпилированного кода, если он был прочитан из файла, закодированного с помощью ionCube. Еще одна задача загрузчика - разрешить запуск файлов, созданных для определенной более старой версии PHP, на более новые версии, и, при необходимости, Loader выполняет преобразования на лету скомпилированного кода, чтобы сделать его пригодным для использования в любой версии PHP. Внутренние переменные PHP время от времени значительно меняются, наиболее недавно и наиболее существенно между PHP 5 и 7, что делает эту сложную, но важную задачу для конечных пользователей.

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

закодированных файлов

С точки зрения самих файлов, в начале PHP кодирования инструментов этого типа в сущности скомпилирован в байткод и сериализовать эту форму непосредственно к файлам.В целом разработчики не знали и не интересовались внутренними функциями PHP, и этот подход обеспечил хорошую защиту и отличную производительность. Когда интерес появился впервые при создании декомпиляторов байт-кода из группы хакеров в Китае под названием «Синий ветер» около 2006 года, просто компиляция в байт-код явно не приемлема. В разной степени инструменты, такие как ionCube, затем добавляли дополнительную защиту вокруг байт-кода, чтобы препятствовать выполнению задачи успешной обратной инженерии. Хотя можно предпринять шаги для ограничения эффективности декомпиляции, даже если байт-код восстановлен, успех в защите кода по-прежнему в основном зависит от способности скрыть необходимый ключ (ы) декодирования, хотя все инструменты кодирования этого типа хранят такие ключ в самом кодированном файле.

Разрабатывая защиту коды для Ioncube версии 9, задача заключалась в рассмотрение ограничения хранимых ключей, а также возможность шифровании коды без хранения необходимого ключа дешифрования статический в любом было очевидным и необходимый следующим шагом. Это было добавлено как функция под названием «Динамические клавиши».

Надеюсь, это даст некоторое представление о том, как работают ionCube и в некоторых отношениях аналогичные инструменты. Для более подробного ознакомления с реализацией расширения ядра я бы рекомендовал посмотреть исходный код PHP OpCache, а также Derick Rethans Xdebug.

Раскрытие информации: Я связан с ionCube.

 Смежные вопросы

  • Нет связанных вопросов^_^