Пользователь
0,0
рейтинг
17 марта 2012 в 13:27

Разработка → Ликбез по 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.
Владимир @vagrand
карма
30,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

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

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