Zend Guard под хакерским прицелом Paxan [tPORt] (paxan@tport.be) Хакер, номер #091, стр. 091-090-2 Это лишний пример для разработчиков как самая неправильная защита. Впрочем, очень часто в платных скриптах есть «стучалка» на сайт разработчика, и скрипт может содержать бэкдор, поэтому надо быть осторожным. Далее мы рассмотрим, что представляет собой лицензирование и за что Zend просит такие дикие деньги. Лицензирование в Zend Закодируем простейший скрипт: <?php set_time_limit(0); printf("Script start\n"); $a = 5; $b = $a + 6; echo $b; ?> Распакуем и получим: Для начала поясню два принципа десериализации: 1. Для строк: сначала идет длина, которая является числом. Полученное число является длиной идущей далее строки (это хорошо видно в самом начале скрипта, так как первым параметром является строка). 2. Для чисел: вначале идет длина строки. Потом само число, которое записано как строка. Для примера: 02 31 00. Длина - 2, Строка - 31 00. Само число - единица. Первым параметром является имя владельца кодировщика, который кодировал скрипт. В нашем случае кодировщик зарегистрирован на «Zend Encoder trial». Второй параметр — всегда единица. Если он отличен от единицы, то загрузчик прекращает выполнение. Далее следует параметр, обозначающий, какую версию кодировщика мы использовали: зарегистрированную или нет. В нашем случае - единица, то есть незарегистрированная. Четвертый - всегда единица (назначение его я так и не понял). Пятый параметр отвечает за тип лицензии: 0 - Не требует лицензии (No License Support) 1 - Требует лицензию (Require Valid License) 2 - Поддерживает лицензию (Support License). Процитирую документацию: «This allows you to generate encoded files that can operate within a limited scope, such as a limited trial version that requires a valid license in order to be fully functional». А именно функция zend_loader_file_licensed(), с помощью которой мы можем ограничить полную функциональность скрипта при отсутствии лицензии. Шестой параметр отвечает за ограничение по времени на запуск скрипта. Если текущая дата выше указанной, то получим ошибку «Fatal error: This file has expired». Дата отображена в unix timestamp (количество секунд, прошедших с 1970-го года). Если параметр равен нулю, то ограничения по времени нет. Рассмотрим пример: Здесь мы видим число 1159714573, что соответствует 01.10.2006. Значит, данный скрипт перестанет работать после этой даты. Но ничего страшного. Меняем число на 0 (то есть записываем 30 00), правим длину 0B на 02 — и данное ограничение больше нас не беспокоит. Следующий параметр очень важен. Это — контрольная сумма. По ней проверяются лицензионные данные и регистрационное имя (первый параметр). По ней также генерируется таблица, по которой мы получаем реальный номер опкодов PHP, поэтому с этим параметром надо вести себя осторожно. |