Расшифровать ioncube php loader
Ликбез по IonCube
IonCube — это набор утилит для командной строки, которые позволяют производить кодирование, обфускацию и лицензирование исходного кода, написанного на языке php.
Функционал IonCube очень обширен что бы о нем можно было написать в одной статье. Под катом я опишу основной функционал IonCube, который необходим для защиты кода от не лицензионного использования.
Список понятий
1. Кодирование исходного кода — процесс при котором исходный код, написанный на языке php, превращается в набор машинных команд, чтение и декодирование которых максимально затруднено.
2. Обфускация — приведение исходного кода программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию.
3. Лицензия — это специальный, закодированный приватным ключом файл, который необходим для запуска закодированного исходного кода.
Необходимое ПО
1. IonCube Encoder — набор бинарных файлов для разных ОС, при помощи которых можно кодировать исходный код, производить его обфускацию и генерировать лицензии. Платное ПО, но можно скачать триал версию.
Кодирование и обфускация исходного кода
В зависимости от версии PHP под которую написан код, IonCube Encoder предоставляет следующие бинарные файлы для выполнения кодирования и обфускации: ioncube_encoder, ioncube_encoder5 или ioncube_encoder53
Формат команды следующий:
./ioncube_encoder –o [options]
Ниже я перечислю основные опции необходимые для кодирования и обфускации кода:
—replace-target — опция говорит енкодеру что надо полностью заменить целевой каталог или файл, если он уже существует, новым каталогом или файлом. Например:
—copy @ — опция говорит енкодеру что надо копировать указанный файл или каталог (и все его подкаталоги) без кодирования его содержимого. Знак @ говорит о том, что путь к копируемому файлу или директории надо искать от корня кодируемой директории. Т.е. если было указано копировать каталог configs, то будет копироватся только каталог configs котороый лежит в корне кодируемой директории, а не например в подкатегории example/configs. В качестве примера можно привести каталог где лежат конфигурационные файлы и которые кодировать не нужно:
—ignore @ — опция говорит енкодеру что надо игнорировать указанный файл или директорию (и все ее поддриректории), при этом в результирующий каталог они не копируются.
—obfuscate — запускает процесс обфускации кода, в качестве объектов, к которым применяется обфускация могут быть: functions, linenos, locals или all. Например:
—obfuscation-key «some_unique_key» — обязательный параметр для обфускации, который задает уникальный ключ, что делает практически невозможным процесс декодирования кода.
— опция говорит энкодеру, что файл при запуске должен запрашивать файл лицензии. Путь к файлу лицензии будет относителен запросившему его файлу, так что лучше здесь указывать просто название файла лицензии, который IonCube Loader будет искать сперва в том же каталоге, в котором находится скрипт, запросивший файл лицензии, а не найдя будет идти рекурсивно в верх вплоть до корневой директории. Таким образом файл лицензии можно сохранять просто в корневом каталоге, куда установлено ваше приложение. Например:
Создание лицензии
Лицензии создаются при помощи бинарного файла make_license. Формат команды для создания лицензии:
./make_license –-passphrase –o
—passphrase — эта опция задает секретный ключ, который используется для формирования подписи для лицензии. Внимание: ключ должен совпадать с ключем, который использовался при кодировании исходного кода.
Ограничение лицензии по серверам
—allowed-server [ ][@[ ]][< >] — эта опция используется для ограничения валидности лицензии по домену, IP или MAC адресу сервера, для которого она предназначена.
Примеры.
1. Ограничение по домену:
—allowed-server www.foo.com
—allowed-server www.foo.com,www.bar.com
—allowed-server 1.2.3.4@
2. Ограничение по IP адресу:
—allowed-server 192.168.1.4
—allowed-server 192.168.1.4,192.168.1.20
Примечания:
1. Когда закодированный файл запрашивается через web-сервер, то IP сверяется с тем IP, который присылает web-сервер.
2. Когда закодированный файл запрашивается на прямую, например когда имеем дело с php shell скриптами, то IP сравнивается только с первичным IP адресом сетевого интерфейса.
3. Нельзя указать в ограничении IP адрес 127.0.0.1
3. Ограничения по MAC адресу. MAC адрес должен состоять из 6-ти байт и должен быть представлен в шестнадцатеричном виде, например:
4. Комбинирование ограничений. IonCube позволяет комбинировать ограничения, например:
Ограничение лицензии по времени
— позволяет задать период, на протяжении которого с момента генерации лицензия является валидной. Периоды можно задавать в следующих величинах: секунды (s), минуты (m). часы (h) или дни (d). Например:
—expire-in 360s
—expire-in 20m
—expire-in 24h
—expire-in 365d
—expire-on — позволяет задать точную дату, до которой лицензия является валидной. Например:
Установка IonCube Loader
1. Скачайте IonCube Loader для вашей ОС, он распространяется бесплатно.
3. В вашем php.ini пропишите путь к скачаной библиотеке. Например:
zend_extension = /usr/local/ioncube/ioncube_loader_lin_5.3.so
zend_extension = /usr/local/ioncube/ioncube_loader_lin_5.3_ts.so
zend_extension_ts = /usr/local/ioncube/ioncube_loader_lin_5.2.so
Обратите внимание что для PHP версией меньше 5.3 нужно указывать директиву zend_extension_ts если в хотите использовать библиотеку с функционалом «thread safety».
4. Перезагрузите web-сервер.
Вот в принципе и все, что нужно знать для защиты своего кода от не лицензионного использования. Больше информации Вы сможете найти на официальном сайте IonCube.
Пасхалка в ionCube — попытка разработчиков замести мусор под ковер?
Веб-разработчик знает, что скрипты, созданные в коммерческих целях, могут пойти гулять по сети с затёртыми копирайтами; не исключено, что скрипт начнут перепродавать от чужого имени. Чтобы скрыть исходный код скрипта и препятствовать его изменению, применяются обфускаторы, минификаторы и т.д. Один из самых давних и известных инструментов для шифрования скриптов на PHP — это ionCube. Появившийся в 2002, он продолжает следить за развитием PHP и заявляет о поддержке последних версий платформы. Как я покажу в этой статье, с поддержкой PHP 7 у ionCube далеко не всё в порядке.
Модель использования PHP-шифровщиков такая, что программист продаёт зашифрованный скрипт, а покупатель скрипта на своём сервере должен установить модуль расширения, который позволит выполнять зашифрованные скрипты. Скрипт, зашифрованный ionCube, выглядит примерно так:
Видно, что выводимая строка не зависит от вызванной функции, и выбирается случайно.
Напрашивается вопрос: зачем эти функции нужны, и что они делают?
Простые эксперименты
Для начала посмотрим, какие параметры _dyuweyrj4 принимает:
Похоже, что принимает два числа, но какие бы числа ни были, печатает те же самые афоризмы.
Поиск использования
На каком-то мутном индонезийском форуме удаётся найти запощенный в 2013 пример — скорее всего, полученный каким-то дизассемблером байткода PHP:
Что интересного в парах чисел (21711392, 920173696) и (21720496, 920165136)? Внимательный исследователь заметит, что XOR чисел в каждой паре даёт 932443808. Попробуем сами вызвать _dyuweyrj4 с парой чисел, дающих в результате XOR 932443808:
Не напечаталось ничего!
Погружаемся в отладчик
— через их Online PHP Encoder. (Результат шифрования приведён в самом начале поста.) К сожалению, это не помогает: _zend_op_array.reserved[3] остаётся нулевым. Зато убеждаемся, что у выполняющейся (безымянной) функции _zend_op_array.reserved[3] теперь заполняется:
Баг багом вышибают
Что получится, если пофиксить баг в ioncube_loader_win_7.3.dll, поставив проверку указателя перед его использованием? Для этого удобнее всего использовать x64dbg:
Значит, от (некорректной) проверки на нулевой указатель толку всё равно не было: в следующей вызываемой функции этот же указатель используется уже без проверки. Делаем вывод, что потенциальная уязвимость, позволявшая бы нам изменять память процесса PHP по произвольному адресу, и посредством этого сбежать из сэндбокса — например, вызывать функции, запрещённые администратором сервера — в ionCube Loader «закрыта» последовательностью багов, приводящих к непреднамеренному крэшу php.exe.
Что имел в виду автор?
IonCube для начинающих. Ликбез. С чего начинается успешная защита php кода.
sitecreator
Administrator
Автор: sitecreator.ru Просьба при перепечатке данного текста ссылаться на данную страницу форума с указанием автора.
Друзья, постараюсь рассказать максимально подробно о различных способах защиты вашего авторского кода на php от банального воровства и его распространения без вашего согласия. Также немаловажным мотивом для приведения в нечитаемый вид вашего программного кода может быть желание защитить вашу уникальную идею, реализованную в программе на языке php, от заимствования вашими конкурентами-программистами.
Одним из успешных инструментов для защиты вашего кода являются инструменты шифрования (кодирования) вашего кода от компании ionCube Ltd.
Файл с программным кодом после обработки ioncube-кодировщиком (encoder-ом) принимает непригодный для анализа человеком вид, т.е. бессмысленный для анализа набор символов, который ничего общего с программным кодом не имеет.
Чтобы такой зашифрованный (закодированный) код мог исполняться на сервере нужно чтобы для движка php было подключено расширение ioncube loader. У любого хостинг-провайдера на общем хостинге (виртуальный хостинг) всегда есть данное расширение для php и оно практически всегда включено по умолчанию. Обычно у пользователя хостинга есть возможность самостоятельно включать/отключать и выбирать версию ioncube loader-а для конкретной версии php. Всегда рекомендуется чтобы версия ioncube loader-а (ионкуб лоадера) была максимально актуальной (свежей) у вашего хостера. На сегодняшний день это версия 10+ (10.3.2 по состоянию на 2 января 2019-го).
Вы всегда можете проверить наличие ioncube в php если напишите простой код с функцией phpinfo(). Код выводит всю необходимую информацию. Включая версию лоадера.
Вас должна интересовать эта строка в выводе phpinfo():
Покажу фрагмент вывода:
Зашифрованный ионкубом (ионкуб энкодером) код выглядит так:
Просто мне так удобнее работать с консольными приложениями, т.к. после обновления программы мне не нужно думать о новых путях, по которым установилась программа, т.к. каждая новая версия обычно ставится по новому пути.
И вы можете просто запустить в консоли команду
Разумеется, если скопировали в эту папку файлы установленного ионкуба. Получите вывод информации о версии энкодера и поддержке php.
Есть много вкладок со всевозможными настройками.
Вы всегда можете увидеть какая же командная строка была сформирована. И можете запустить ее при желании через Windows cmd или Windows PowerShell (который есть аналог cmd ). Для этого выбираете в меню пункт «View Encoder Command Line» (Показать командную строку для энкодера).
Пример командной строки показан ниже.
Как вы можете видеть, то запускается консольная программа с параметрами. В данном случае это энкодер для php 7.1.
Т.е. вот эта программа: ioncube_encoder71.exe
Если в вашем Open Server для конкретного php не подключено расширение ioncube loader, то сделайте это самостоятельно. правка производится в конфиге php.ini для конкретной версии php. Только не надо пытаться править файлы напрямую, делайте через меню Open Server.
Это делается так (откроется блокнот, после правок нажать «сохранить» и перезапустить Open Server):
Если вы выбираете в настройках проекта (Project Settings) версию php 5.6, то закодированные (ioncube encoder-ом) файлы будут работать как под версией php 5.6, так и под версией 7.0. Не пытайтесь искать отдельно версию под 7.0, такой не существует.
Соответственно кодировку для указанных версий будет выполнять программа ioncube_encoder56.exe.
Также если файл закодирован программой ioncube_encoder71.exe, то этот файл будет запускаться как под php 7.1, так и под php 7.2. Если вы работаете в графическом интерфейсе (GUI), то выбираете в этом случае PHP 7.1.
Не могу рекомендовать выбирать режим «PHP 5.6 & 7.1«, т. к. наблюдал проблемы на ранних версиях ioncube loader-а 10. На более поздних проблем не замечал, но даже если вы укажите в требованиях использовать ioncube loader 10+, то не можете исключить ситуацию, что на сервере окажется одна из первых «10-к», которая не лишена некоторых багов.
Выдержка из официальной документации:
Блог Exploits
Почему ioncube это зло
Запись опубликовал Exploits · 6 ноября, 2020
ioncube зло?
104 пользователя проголосовало
К сожалению в наших широтах нет понятия авторского права и его никто не соблюдает.
Да, ведь это решение проблемы, но не все так просто и ванильно.
Дело в том что когда мы кубим модуль исходный код превращается в набор символов и что-либо поменять там невозможно.
Вот оно счастье! Функционал проверки лицензии никто теперь не хакнет. Но, как всегда есть но, и не одно.
Почему не стоит использовать ioncube
1) Это не защита от пиратства, разве что только от мамкиных хацкеров.
2) При любом шорохе у покупателя автоматически будут проблемы!
Буквально вчера мне нужно было подружить мой модуль с другим, который меняет цены. Ок, зашел в код того модуля посмотреть какие данные нужны его функции и увидел там набор символов… Без кодировки моя работа бы заняла 2 минуты. С кодировкой пришлось подставлять данные и смотреть на ошибки, то есть работать в слепую. Итого минут 20-30 у меня ушло. (В такой ситуации еще легко все прошло) Вы думаете там модуль с мега функционалом или с алгоритмами которые уведут из-за уникальности? Не думаю, там просто подсчет чисел (+/- от цены, ну и проценты).
Владельцам еще веселее. Допустим есть 2 модуля, их нужно подружить. Коды закрытые у обеих. Авторы как всегда загруженные и не делают такого. Можно найти человека который смог бы сделать связь модулей за пару часов. Но засада, исходники под кубом и ничего сделать невозможно. Приходится делать либо кастом в разы дороже модуля (если не в десятки), либо через костыли что-то мастерить. Как вы понимаете подход так себе.
Когда в модуле открытый код многие коллеги туда заходят посмотреть или поправить что-то под заказчика. Так вот одна голова хорошо, но фидбек от коллег еще лучше. К чему я. Вот сделали вы модуль, ок, но где-то ошиблись и допустили баг(и). Сами в силу загрузки или опыта не можете их выявить, но их может увидеть другой разработчик и вам об этом сообщить. Когда приходят багрепорты вы их можете фиксить тем самым улучшить модуль.
Также сами авторы, как уже упоминал, всегда загружены. А покупателю нужно в модуле что-то поменять или доработать. В закодированном варианте у покупателя есть закрытое решение и все. Когда модуль открыт его доработать может любой другой человек без привязки к автору.
Не стоит забывать что магазин это бизнес и в нем должно быть все безопасно. Код модуля под кубом нельзя просмотреть и сказать что в нем. А там может быть дыра, или же критическая ошибка, или же специально оставленный автором «ход» для контроля или еще чего-либо. То есть владелец сайта просто не знает что у него в магазине, плохо спит из-за чего качество его жизни стало хуже. А причина в этом ioncube.
Зачем шифровать скрипты, например PHP с помощью ionCube 9?
На PHP не программирую. Прочитал что есть ionCube 9. Объясните, зачем он? Когда применяется? Приведите реальный пример.
Ни разу не слышал про такого рода библиотеки для питона и руби. Они есть?
и
почему именно для php они есть?
А если серьезно, то это у них вроде ускоряет загрузку скриптов. Что-то типа компиляции в байт-код.
маркетинг шит 146%
не может быть быстрее при как минимум еще одной обработке сверху в видел модуля для запуска закодированного кода. Ресурсов наоборот больше сожрёт, скорость в лучшем случае не упадёт.
Объясните, зачем он? Когда применяется? Приведите реальный пример.
когда продаешь самохостящийся продукт на php в котором есть проверка лицензии или просто супер гениальные алгоритмы которые не хочется раскрывать. Чаще конечно никаких гениальных вещей там нет и шифруют только ради проверки лицензии и отключения софта когда лицензия кончилась.
Как правило все версии(кроме самых самых свежих) любого шифровальщика относительно легко раскрываются с помощью гугла/форумов DeZender’ов или даже онлайн сервисов.
Вскрытие не всегда бесплатно естественно и не всегда прокатывает(точность не 100% при восстановлении, суть уловишь, но исходиники будут не рабочие).
Суть вскрытия в удалении/обходе проверки лицензии.
Т.к. особо там ничего не придумаешь, то проверка лицензии это зачастую просто запрос на сайт продавца из разряда
Поэтому обходится примерно так:
Без изменения оригинального кода и работой с зашифрованынми исходниками(в случае если расшифровать не удалось до конца, но суть проверки лицензии понятна)
1. Заворачиванием сайта продавца на локалхост с вечной лицензией. (прописать в hosts файл)
2. Подменой глобальных переменных($_SERVER) чтобы проверялся домен на котором есть лицензия. (вставить в index.php или другое место где исходники открыты)
Если исходники расшифровались правильно и работают
3. Выпиливанием проверки лицензии из исходников.
ОЧЕНЬ много скриптов лежат взломанные или ходят по рукам массово, но я не видел чтобы разработка хоть сколько-то хорошего продукта после этого прекращалась или закрывалась по финансовым причинам.
Даже думаю это положительно сказывается на продкуте и его клиентах какой никакой пиар.
Возможно даже можно сравнить с борьбой с пиратами.
Закрывают торренты, видео сайты, судятся из-за «упущенной прибыли».
При этом продолжают снимать и прибыли только растут с годами.
Никто так и не доказал что раздача кинца/игор на торренте равняется потери прибыли.
И опять же даже наоборот помогает некоторым продуктам увиличивать аудиторию.
PS. Забыл решение написать грамотное по моему мнению.
1. Если у вас действительно супер-пупер секретный алгоритмы которые никто не знает или может повторить.
Использовать исключительно модель SaaS или производить вычисления через ваш сервер(но продукт всё равно будет стоять на сервере клиентов).
2. Если никаких алгоритмов взлома гугла/пентагона/игил/телеграма там нет.
Просто отдавать открытые исходники для работы.
3. Если вы пишите очень плохой код и вам стыдно или хороший код, но вы жадный.
Используйте SaaS.
Технологии позволяют привязать домен клиента к вам, создать ему отдельное рабочее пространство(виртуалку/сервер) и всё что только придумать можно.