Описание проблемы
На прошлой неделе клиент использовал компилятор swool для шифрования Drupal, из-за чего проект Drupal не смог запуститься. После пошагового устранения неполадок был сделан вывод о том, что часть кода Drupal была получена непосредственно из исходного кода PHP через файл get contents, поскольку код проекта был зашифрован, поэтому невозможно было получить желаемое содержимое путем прямого анализа исходного кода PHP.
Платформа шифрования drupal
Drupal-это платформа управления контентом с открытым исходным кодом, написанная на PHP. После загрузки вам необходимо настроить и установить его, чтобы использовать его.
Основные проблемы, влияющие на работу кода Drupal после шифрования, заключаются в следующем:
Путь к коду: Drupal/поставщик/доктрина/общая/библиотека/доктрина/общая/отражение/staticreflectionparser.php: 126
Некоторые коды такие, как указано выше. Получите путь к файлу через имя класса, а затем используйте file_get_contents() Получите содержимое файла PHP. Конструкторы в классе tokenparser следующие
Передайте и получите исходный код через token_get_all() Проанализируйте его, а затем проанализируйте код, чтобы получить класс, свойство и метод PHP-файла Примечания Родительский класс Пространство имен и Имя класса Эта категория Используйте информацию Подождите, поскольку файл был зашифрован, содержимое, полученное с помощью file get contents, является зашифрованным содержимым, и token get all не может проанализировать правильную информацию.
Решение:
Примечание: Для кода, зашифрованного версией 2.1.1 шифратора, используемого на этот раз, параметр конфигурации сохранить документ в файле конфигурации должен быть установлен на 1. Если значение равно 0, комментарии не будут сохранены. Если он установлен в 0, функция naoinwenrasww добавлена в версию 2.1.3 swool loader.so расширение не может получить информацию, связанную с использованием, в классе. Конкретные функции, используемые в Нем, будут подробно объяснены позже.
1. Получите класс отражения по имени класса Класс отражения Класс. 2. Поскольку этот класс отражения содержит все свойства и методы родительского класса, но до тех пор, пока свойства и методы этого класса получены в исходном коде, также необходимо получить класс отражения родительского класса, а затем исключить свойства и методы родительского класса путем сравнения. Вы можете использовать Класс отражения Предоставленный класс getParentClass() Метод получает класс отражения родительского класса, который возвращает объект Класс отражения . 3. передайте Класс отражения предоставленный класс GetProperties() Метод для получения свойств этого класса и родительского класса соответственно, а затем сравните и удалите свойства родительского класса и сохраните свойства этого класса. Этот метод возвращает объекты класса ReflectionProperty . 4. передайте Свойство отражения Предоставленный класс getDocComment() Метод для получения комментария ps: Поскольку отражение не может получить информацию о классе использования, функция naloinwenrasww() добавляется в swool ﹐ loader.so расширение в версии 2.1.3. Эта функция передает абсолютный путь к файлу PHP и возвращает сериализованный массив соответствующей информации переданного файла. После десериализации массив выглядит следующим образом Среди них имя класса swool-это пространство имен файла, имя класса swool-это пространство имен плюс имя класса файла, другое-информация об использовании, а ключ-это строчная буква имени класса use. Если псевдоним существует, то это строчная буква псевдонима, а значение – пространство имен плюс имя класса класса use. Благодаря этой функции и функции отражения он может быть совместим с теми, которые находятся в анализаторе статического отражения после шифрования, который не может получить правильный результат Из-за проблемы с информацией
Потенциальные проблемы, которые не влияют на работу кода Drupal после шифрования:
Путь к коду: Drupal/поставщик/доктрина/аннотации/библиотека/доктрина/общие/аннотации/phpparser.php: 39
Платформа Symfony представлена в Drupal. Некоторые коды в этой структуре также получают имя класса PHP-файла с помощью file get contents и token get all. Однако в настоящее время это никак не влияет на работу drupal, и метод не может быть использован
Путь к коду: Drupal/поставщик/symfony/загрузчик классов/classmapgenerator.php: 91
Путь к коду: Drupal/поставщик/symfony/маршрутизация/загрузчик/annotationfileloader.php: 90
Решение: так же, как и решение класса staticreflectionparser, функция naoinwenrasww() добавляется в swool? Loader.so расширение в версии 2.1.3 для получения пространства имен и имени класса зашифрованного файла
Нет лучших вариантов:
Путь к коду: Drupal/ядро/включает/установка.inc: 220
Во время установки Drupal существует файл конфигурации, default.setting.php, в котором хранится массив конфигурации по умолчанию. Во время установки пользователь введет некоторую информацию о конфигурации, такую как MySQL, в интерфейс установки. После ввода этот метод получает информацию в настройках через содержимое файла и маркер get all, а затем объединяет информацию, введенную пользователем на странице, и сохраняет файл обратно.Весь процесс включает чтение файлов, изменение информации о файлах и сохранение файлов. Поэтому в настоящее время для компилятора swool нет лучшего решения. Вам нужно выбрать, не шифровать файл настроек при шифровании.
Путь к коду: Drupal/поставщик/symfony/загрузчик классов/classcollectionloader.php: 126
В этом классе symfony считывает PHP-файл и кэширует его в файл после соответствующей обработки. Существуют те же проблемы, что и в приведенном выше коде, и лучшего решения пока не найдено