Ликбез по IonCube

    IonCube — это набор утилит для командной строки, которые позволяют производить кодирование, обфускацию и лицензирование исходного кода, написанного на языке php.
    Функционал IonCube очень обширен что бы о нем можно было написать в одной статье. Под катом я опишу основной функционал IonCube, который необходим для защиты кода от не лицензионного использования.


    Список понятий



    1. Кодирование исходного кода — процесс при котором исходный код, написанный на языке php, превращается в набор машинных команд, чтение и декодирование которых максимально затруднено.

    2. Обфускация — приведение исходного кода программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию.

    3. Лицензия — это специальный, закодированный приватным ключом файл, который необходим для запуска закодированного исходного кода.

    Необходимое ПО



    1. IonCube Encoder — набор бинарных файлов для разных ОС, при помощи которых можно кодировать исходный код, производить его обфускацию и генерировать лицензии. Платное ПО, но можно скачать триал версию.

    2. IonCube Loader — поставляется в виде .so или .dll библиотеки, необходим для декодирования исходного кода закодированного при помощи IonCube Encoder. Бесплатное ПО, скачать можно тут.

    Кодирование и обфускация исходного кода



    В зависимости от версии PHP под которую написан код, IonCube Encoder предоставляет следующие бинарные файлы для выполнения кодирования и обфускации: ioncube_encoder, ioncube_encoder5 или ioncube_encoder53
    Формат команды следующий:

    ./ioncube_encoder <source_file_or_folder> –o <target_file_or_folder> [options]

    Ниже я перечислю основные опции необходимые для кодирования и обфускации кода:

    --replace-target — опция говорит енкодеру что надо полностью заменить целевой каталог или файл, если он уже существует, новым каталогом или файлом. Например:

    ./ioncube_encoder unencrypted_folder –o encrypted_folder --replace-target

    --copy @<file_or_directory_name> — опция говорит енкодеру что надо копировать указанный файл или каталог (и все его подкаталоги) без кодирования его содержимого. Знак @ говорит о том, что путь к копируемому файлу или директории надо искать от корня кодируемой директории. Т.е. если было указано копировать каталог configs, то будет копироватся только каталог configs котороый лежит в корне кодируемой директории, а не например в подкатегории example/configs. В качестве примера можно привести каталог где лежат конфигурационные файлы и которые кодировать не нужно:

    ./ioncube_encoder unencrypted_folder –o encrypted_folder --replace-target --copy @configs/

    --ignore @<file_or_directory_name> — опция говорит енкодеру что надо игнорировать указанный файл или директорию (и все ее поддриректории), при этом в результирующий каталог они не копируются.

    ./ioncube_encoder unencrypted_folder –o encrypted_folder --replace-target --ignore @docs/

    --obfuscate <entities> — запускает процесс обфускации кода, в качестве объектов, к которым применяется обфускация могут быть: functions, linenos, locals или all. Например:

    ./ioncube_encoder unencrypted_folder –o encrypted_folder --replace-target --obfuscate all

    --obfuscation-key «some_unique_key» — обязательный параметр для обфускации, который задает уникальный ключ, что делает практически невозможным процесс декодирования кода.

    ./ioncube_encoder unencrypted_folder –o encrypted_folder --replace-target --obfuscate all --obfuscation-key "It is unique key :)"

    --with-license <path> — опция говорит энкодеру, что файл при запуске должен запрашивать файл лицензии. Путь к файлу лицензии будет относителен запросившему его файлу, так что лучше здесь указывать просто название файла лицензии, который IonCube Loader будет искать сперва в том же каталоге, в котором находится скрипт, запросивший файл лицензии, а не найдя будет идти рекурсивно в верх вплоть до корневой директории. Таким образом файл лицензии можно сохранять просто в корневом каталоге, куда установлено ваше приложение. Например:

    ./ioncube_encoder unencrypted_folder –o encrypted_folder --replace-target --with-license license.txt

    --passphrase <key> — секретный ключ, при помощи которого кодируются файлы. Внимание: файл лицензии должен быть сгенерирован с таким же секретным ключом. Обязательный параметр если используется параметр --with-license.

    ./ioncube_encoder unencrypted_folder –o encrypted_folder --replace-target --with-license license.txt --passphrase some_passphrase

    Создание лицензии



    Лицензии создаются при помощи бинарного файла make_license. Формат команды для создания лицензии:

    ./make_license –-passphrase <key> –o <output-path>

    --passphrase <key> — эта опция задает секретный ключ, который используется для формирования подписи для лицензии. Внимание: ключ должен совпадать с ключем, который использовался при кодировании исходного кода.

    Ограничение лицензии по серверам


    --allowed-server [<domain names>][@[<IP addresses>]][{<MAC address>}] — эта опция используется для ограничения валидности лицензии по домену, IP или MAC адресу сервера, для которого она предназначена.

    Примеры.
    1. Ограничение по домену:
    --allowed-server www.foo.com
    --allowed-server www.foo.com,www.bar.com
    --allowed-server 1.2.3.4@


    Символ "@" в конце домена означает что хоть домен и похож на IP адрес но его стоит воспринимать именно как домен.
    Внимание: для определения домена в IonCube Loader используется конструкция $_SERVER['SERVER_NAME'].

    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-ти байт и должен быть представлен в шестнадцатеричном виде, например:

    --allowed-server '{00:01:02:06:DA:5B}'

    4. Комбинирование ограничений. IonCube позволяет комбинировать ограничения, например:

    --allowed-server 'www.foo.com@192.168.1.1{00:02:08:02:e0:c8}'

    Ограничение лицензии по времени


    --expire-in <period> — позволяет задать период, на протяжении которого с момента генерации лицензия является валидной. Периоды можно задавать в следующих величинах: секунды (s), минуты (m). часы (h) или дни (d). Например:

    --expire-in 360s
    --expire-in 20m
    --expire-in 24h
    --expire-in 365d


    --expire-on <yyyy-mm-dd> — позволяет задать точную дату, до которой лицензия является валидной. Например:

    --expire-on 2012-03-20

    Установка IonCube Loader



    1. Скачайте IonCube Loader для вашей ОС, он распространяется бесплатно.

    2. В архиве вы найдете по два файла с расширением .so или .dll для каждой версии php, у одного из них будет постфикс «ts», что означает что функционал «thread safety» для этого файла активен.

    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.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 18
    • +2
      Правильно писать «функциональность», а функционал это:

      Функциона́л — числовая функция, заданная на векторном пространстве.

      ru.wikipedia.org/wiki/Функционал
      • +5
        В статье: реклама, SEO, маркетинг, распечатка man-page, Installation Guide.
        Почему не в «я пиарюсь»?
        • 0
          Не совсем понял Вашу претензию. Я изучал возможности и форматы команды для защиты своего php кода. Решил поделится информацией с сообществом. Т.к. это касается именно веб разработки то и поместил в соответствующий раздел.
          Где Вы тут усмотрели «реклама, SEO, маркетинг» мне не понятно.
          • 0
            с радостью отвечаю вам ПМом.
            • 0
              ОК, Я прошу прощения, если задел.

              Предлагаю в будущем добавлять сравнение нескольких продуктов. Или краткий обзор, какие еще бывают утилиты под те же задачи.
              • 0
                Не несите ерунду, человек написал статью на основании своего опыта и для конкретного продукта, при чём здесь реклама или SEO или маркетинг, не понятно.
                • +2
                  A что, собственно, человек написал?
                  Это не ликбез — это перевод документации на русский язык.
          • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              Есть такая проблемка. Сам пытался распространять продукт за символическую плату защищенный ионКубом. Вывод печальный — 0 продаж. Снял ионКуб и отдал бесплатно — тогда пошла жара.
              Да, продавать пытался на постсоветском пространстве =)
              • 0
                Я пока, что просто юзаю 3 кодировщика для этих целей Zend Guard, ionCube и NuCoder, юзер может скачать на выбор.
                • 0
                  Зависит от продукта. Я пользуюсь продуктом, написанном на постсоветском пространстве для постсоветских же пользователей, знаю о минимум паре сотен других пользователей этого же продукта, который защищен сабжем. Стоит дорого, себя окупает быстро, смысл покупать — есть.

                  Хотите быть популярным — делайте прикольные фишки. Хотите иметь продажи — делайте продукты, которые решают проблемы, и продажи будут.
              • 0
                На самом деле, вообще очень мало адекватных решений для защиты PHP кода, и ioncube просто вынуждает клиентов в итоге слезать с привычных тупо хостингов на vps, что не есть хорошо.
                • 0
                  А мне к примеру нравится, что у ionCube более адекватные цены, и есть онлайн-кодировщик, т.е. не нужно покупать лицензию за 200 баксов, чтобы закодить один скриптик, в который вынесен расширенный функционал и проверка лицензии. Zend с их 600 баксами вообще выглядят офигевшими, притом, что еще полно дезендеров.
                  • 0
                    притом, что еще полно дезендеров
                    Не знаю как дела обстоят с ionCube 7, но ionCube 6.5 раскодировать не проблема.
                    • 0
                      Да я не говорю что это невозможно, просто не понимаю за что Zend платить такие бабки. Или сделали бы хотя бы онлайн сервис.
                • 0
                  Если кто защищает ioncube свой код и думает, что исходный код получить не возможно, то он очень сильно ошибается. В сети есть полный дамп сайта ioncube с исходниками ioncube. Также есть много сервисов которые занимаються декодированием в исходный код)))))
                  • +1
                    Ну так никто не говорит об абсолютной защите, но в любом случае выпилить проверку лицензии в открытом исходнике намного проще, чем в закоденном скрипте.
                  • +1
                    Нет, здорово конечно, что вы прочитали и не поленились перевести инструкцию по использованию ioncube, но каких-то мыслей, идей и инноваций (ваших личных) в этом ноль.
                    Да, я тоже его использую, нормальная штука. В ант-скрипте сборки оно вызывается и кодируется, все здорово. Кстати, один из плюсов иона над зендом — оно работает из командной строки и даже под мак. Да и по цене дешевле.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.