Ликбез по 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.
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 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, но каких-то мыслей, идей и инноваций (ваших личных) в этом ноль.
                    Да, я тоже его использую, нормальная штука. В ант-скрипте сборки оно вызывается и кодируется, все здорово. Кстати, один из плюсов иона над зендом — оно работает из командной строки и даже под мак. Да и по цене дешевле.

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