Анализ защиты кода Битрикс или «как сделать DEMO бесконечной»

После отмены zend’a и введения компанией 1с-Битрикс обфускации кода своих продуктов, появилось желание проверить — так ли хороша защита DEMO-версии системы. Ниже рассмотрим несколько простых и не очень способов восстановить работоспособность сайта после истечения тестового периода.

 

Статья скрыта по просьбе представителей компании 1с-Битрикс.

Если вам понравилась статья, подписывайтесь на обновления блога по rss или присоединяйтесь в twitter

Поделиться ссылкой с друзьями:

Метки: ,

Категории: Bitrix

Комментарии (78)

  1. Насколько я помню у битрикса есть возможность обновлять демо версию, ну а тех поддержка это да, проблема.

  2. Димон:

    Пробовал 5 вариант, конечно не програмист и то что зделал вроде ничего неполучилось.
    Если можно то маленький мануальчик на примере рабочего файла, а то как то то переимен, то так пример кода вставь, при переименовании : имя функции из вида ‘___344590092? в ‘func1? денвер вообще вываливает ощибка в строке 1 файла include.php/
    за подробный мануальчик заранее сбасибо от всех у кого ручки не золотые.

  3. Димон, я сознательно не публиковал куски оригинального кода из битрикса.
    Насчет расшифровки — include.php надо скопировать в отдельную директорию и издеваться над ним там:)

  4. Сергей:

    Код и впрямь весьма читаемый, только некоторые переменные не поддались деобфускации.
    Вопрос, а что можно сделать с большинством объявленных переменных типа: $_1513854713?

  5. Димон:

    Алексей, а немоглиб Вы мне помочь? Я не специалист но сайтик очень нужен, и вроде как все говорят что битрикс идеальное решение, лИЦЕНЗИЮ КОНЕЧНО ПОКУПАТЬ я невсостоянии. У вас ведь есть мой EMAIL .
    Бдте добры и снисходительны к тем, кому требуется ваша помощь.

  6. Димон, в сети болтается огромное множество халявных CMS, сдался вам этот битрих…

    Алексей Валеев, а меня вот заинтересовала ф-я для шифрование/дешифрования строк. :-)

  7. Хех, воспользовался 4-м способом — сайт заработал сразу после закомменчивания первой проверки в include.php . Остальные проверки в итоге закомментил тоже, на всякий случай) Сейчас насилуюсь с 5-м способом, просто так, чтобы было на будущее))

    «Более того, удалось написать скрипт, который создает зашифрованные строки для произвольной даты. Например, для 31.12.2010″
    Спасибо большое, конечно) Но тут такой вопрос — можно ли где-нибудь этот скрипт найти?))

    По поводу 6-го способа — самый простой по-видимому))))))) Нужно было сразу до конца читать)))
    Спасибо большое, за эту замечательную заметку!

  8. Death665[S.K.A.T.], упоминание о скрипте только для того, чтобы показать техническую возможность расшифровки алгоритма. Сергей Рыжиков меня проклянет если я его выложу:)

  9. Понял =) Вопрос тогда такой. Каким образом вы искали алгоритм расшифровки? Мне бы на пальцах — какими программами пользовались? Допустим я смогу установить раз 50 Битрикс на разные даты на своем виртуальном веб-сервере, и сопоставить датам зашифрованные строки. Есть ли программа, которая зависимости пытается установить? или искали в процессах установщика момент создания /bitrix/modules/main/admin/define.php и откуда берется это значение в коде установщика(хотя мои текущие знания не позволяют мне реализовать такое)? Или возможно каким-то образом сымитировать кусок кода установщика, генерирующий дефайнПХП и делающий запись в мускул?
    Извиняюсь за мою безграмотность в этом вопросе. Но знания не берутся из ниоткуда и очень хочется разобраться.

  10. И еще. При 4-м способе — отключаются проверки на полное отключение сайта. Но вот такой вопрос — при этом если не подставлять фэйковые даты окончания демо, и воспользоваться только закомментированием кусков кода с проверкой, то все равно на сайте сверху будет висеть строка о 2-х недельном сроке до отключения сайта. Не могли бы помочь ее найти?)) или подсказать, как ее искать. ведь по сути, если ее еще спрятать, то сайту даже не потребуется время от времени зашифрованную дату подставлять, ведь так? или я в чем-то ошибаюсь?

  11. И еще появился вопрос. Насколько палевно демо-срок больше 30-ти дней?) И какие последствия могут быть у данного сомнительного предприятия (продления демо-срока)? Просто слишком все как-то просто оказалось… подозрительно)

  12. Death665[S.K.A.T.], алгоритм я искал так — смотрел как дешифруется контрольная строка в include.php и потом с помощью обратных преобразований делал ее для произвольной даты. Это не так просто, убил несколько часов времени.
    Отключением строки о двухнедельном сроке не заморачивался, но думаю что это не очень сложно, скорее всего даже, что она выводится из незашифрованных файлов.
    Насчет палева — нет техподдержки, обновлений, если узнают разработчики — заставят купить или выключить сайт. Судя по комментариям на оф.сайте защитой своих прав они занимаются серьезно

  13. Алексей, насчет дешифрации понял, покопаюсь на днях, скорее всего возникнут проблемы с определением куска кода, в котором проводится дешифрация)
    Строка о двухнедельном сроке очень гадит сайту, предрекая его скорую кончину посетителям, однако убирается тупо подставлением новых дат в конец триального срока.
    Заставят купить или выключить через суд, как я понимаю?) Насчет защиты их прав на торрент-треккерах наслышан)

  14. Diden05:

    Странно начинать знакомство с Битриксом с попытки его спи$%^ть, редакция старт стоит около 5к рублей, нужно что то большее, просто доплачиваем. Для обучения вполне достаточно демо версий. А не хочешь платить есть куча всяких бесплатных движков.

  15. Diden05:

    Да и еще, Рыжиков мне не приплачивает ;)

  16. Diden05, согласен — лучше купить, чем использовать нуленый.

  17. Статья хорошая и интерсная, но я нашел способ продления проше, так получилось что зарабатывал сайт для клиента и не подгодал со сроками , и в один момент у меня закончилась лицензия. что я сделал
    1) закотал битркс с 0
    2) перенес все php код который был изменел
    3) из БД выдрял таблицы которые отвечают за инфоблоки iblok….
    и вояла за 15 мин нове DEMO Ж)

    PS Люди не нульте движок лучше купить! поверьте это лучше!

  18. А если взять 6й способ. допустим я установил время назад т.е. у меня на компе все работает. как сделать чтобы демо была дальше и на хостинге? ответь плз

  19. В файле include.php нужно убрать последний while и третий по счету for. В обоих условиях по одной операции.
    P.S. Не забудьте сделать backup ))))

  20. taur:

    Всем привет! Народ, подскажите как скрыть надпись о том, что срок работы пробной версии продукта истек?

  21. Этому посвящена статья выше :)

  22. stepdec:

    Алексей Валеев

    где эта статья? ))

  23. Евгений:

    В УК статья :)

  24. Евгений, тсссс — об этом никто не должен знать:)

  25. sharpmaster:

    Автор как будто и не подозревает что есть такая штука — отладчик.

  26. sharpmaster:

    Извиняюсь если слишком резко выразился.

  27. sharpmaster, любая критика на пользу. Насчет отладчика и правда не думал когда ковырял битрикс. К тому же было интересно самому дойти до решения по шагам.

  28. Никита:

    Добрый день! А «Принцип проверки демонстрационного периода.» относится к способу №5 или это отдельный способ

  29. Никита:

    Знак вопроса пропустил)

  30. Димыч:

    комментирование в файле /bitrix/modules/main/include/prolog_after.php ифа if(defined(«DEMO») && DEMO==»Y») убирает надпись вверху сайта о двух неделях

  31. John:

    не могу понять по поводу способа 4
    цитирую:
    «…но код php в нем явно просматривается (по символам ; { } и командам die, while и т.д.). После каждой (или нескольких) из команд пробуем вставлять строку
    1.die(«works»);»

    а нельзя ли по точнее… после какой команды и что именно вставлять. Буду весьма благодарен.

  32. Alex:

    поддерживаю John
    подробнее плз))

  33. Макс:

    А чем вообще отличается версия demo от полнофункциональной? только сроком пользования в первом случае?

  34. Макс:, фунциональнго отличая между демо и полной нету, дето рабоать 30 дней а полная всегда и все различия

  35. Alt:

    Спасибо за совет!
    Ничего ломать не собирался, просто хотел продлить тестовый период, что бы ввести лицензию…
    Воспользовался 5 вариантом, вот только значение admin_passwordh в обоих вариантах (1 — старый сайт, 2 — свежеустановленный) оказалось одинаковым, на сколько я понял это закодированный пароль админа…
    Хватило залить файл define.php

  36. Lyoha:

    Для битрикс 10: (до 01.01.2038)

    admin_passwordh:
    FVgQeWYUBgQtCUVcDxcGCgsTAQ==

    define.php:
    TEMPORARY_CACHE=ARtudgYHb2MMdQgebRtmG24A

  37. Lyoha:

    Alt, admin_passwordh не имеет никакого отношения к паролю админа, это зашифрованная дата отключения демки, если обратишь внимание, admin_passwordh появляется на ранних этапах установки, ещо до ввода пароля админа.
    define.php — таже дата, но зашифрованная другим способом, при проверке значения из обоих мест сверяются, по крайней мере в 10-ке.

  38. Dmitriy:

    Может знает кто, как разработчики могут найти зануленый или продленный Демо до 2038-го года Bitrix?

  39. Виктор:

    to Dmitriy: да нужен ты им больно.
    коммерчески успешный проект ты всё равно не сделаешь, а гавносайт на битриксе делать неудобно.

  40. Алексий:

    Люди помогите!!! после нескольких установок и удалений «управление сайтом 10″ не могу установить демку.

    «Внимание! На данном шаге произошла ошибка установки продукта.
    Текст ошибки:
    Срок работы пробной версии продукта истек. Вы можете купить полнофункциональную версию продукта на сайте http://www.1c-bitrix.ru. Регистрация.
    Повторите установку текущего шага. В случае повторения ошибки пропустите шаг.»

    Подскажите что делать???

  41. «if(0)» перед каким-то for и каким-то while, их там по пальцам пересчитать, пробуйте :)

  42. костя, отличный вариант, спасибо!

  43. Поковыряв немного систему защиты Битрикса, было выявлено что срок действия DEMO зависит от значения в файле define.php, а не от значения поля в БД.

  44. Аргументирую свой пост, на одном и том же компе в разное время ставил несколько демок битрикса (все одной ревизии) значение в БД во всех случаях было одинаковым. Значения в файле define.php разными.

  45. Alt:

    Я выше писал тоже самое! У меня в БД одно и тоже…

  46. Напишите какая версия и редакция битрикса, стало интересно:)

  47. Алексей, а не подскажете, каким образом вручную запихнуть обновления от скачанного дистрибутива на сервер (автоматическое обновление кончилось)

  48. Алексей Валеев:

    Думаю что никак или очень-очень сложно. Разработчики постоянно что-то шаманят в файлах и структуре базы

  49. Talisman:

    Проблема с сайтом 1с битрикс, не видно главной страницы, пустая. Что можно сделать? Тех.подерж молчит.

  50. Talisman, ну незнаю!!!

  51. установил на локальный компьютер но сайт пишет что типа на реконструкции! помогите разобраться с этим! плизз!

  52. NetSpike:

    Вышла 11 версия, кто-нибудь пробовал на ней шаманить?

  53. Игорь:

    Пока ни один способ в 11 не помог. Ищем.

  54. trasser:

    Попробовал изменить значение в define.php на TEMPORARY_CACHE=ARtudgYHb2MMdQgebRtmG24A которое до 01.01.2038
    в папке /bitrix/managed_cache/ ни чего не было, кроме папки MySQL, перезапустил сервер…..сругалась на окончание пробного периода……наверно в базе нужно тоже все таки изменения вносить ?

  55. Слава:

    заменил
    $GLOBALS[___19053454359623(105)]= OLDSITEEXPIREDATE; на
    $GLOBALS[___1908579623(105)]= time()+86400*365;
    в include.php
    и все прошло:)

  56. Булат:

    а у меня сугубо обобщенный вопрос. а какие последствия взлома могут быть? к примеру уголовной ответственности за пиратсво и т.п. И вообще, как это могут выявить, взломана одминка на конкретном сайте или нет??

  57. trasser:

    По 11 версии не слышно ни чего про проlление триала ?

  58. djo:

    все то же самое, что и для предыдущих. сегодня только демо на месяц продлил заменой define.php и admin_passwordh

  59. samat:

    в 11 версии заменил в include.php
    $GLOBALS[___112403066(420)]= OLDSITEEXPIREDATE;
    $GLOBALS[___112403066(420)]= time()+86400*965;
    на сайте появилась надпись «До истечения пробного периода осталось 965 дней»

  60. progr:

    доброго времени суток! спасибо за информацию…скажите пожалуйста, что бы продлить период обновлений на сайте необходимо приобрести лицензионный ключ или есть какое-то другое решение как с продлением демо?

  61. progr:

    да и еще вопрос, возможно ли скачать обновления с другого сайта и вручную выполнить их установку?
    заранее спасибо

  62. progr:

    назрел еще один вопрос)) продлен срок демо, а что будет если не обновлять сайт, будет ли он функционировать дальше?

  63. To progr:
    1. для обновления обязательно нужен лиц. ключ
    2. сам не пробовал, я думаю возможно, но сложно
    3. сайт будет работать до окончания действия демо

  64. все говорят лучше купить, и я за покупку. Но только почему то битрикс корп портал «Бизнесс процессы» , в котором есть CRM, которую мы как мелкий бизнес используем на всю катушку, стоит 99 500 руб — это для нас большие деньги.

    По идее тогда надо искать другое решение, но поверьте, мы уже сменили 3 CRM и 2 SAAS решения, пока лучше чем в битре решения найдено не было.

    Короче, я к тому что если бы это стоило хотя бы тысяч 20-25 это одно. А когда 99500 это совсем другая история. :( Нижние решения в линейке, не имеют необходимого функционала.

    Хочется и обновлений и техподдержки, но очень дорого, очень!

  65. Алексей Валеев:

    oreshek, такова политика битрикса и с этим вряд ли что-либо можно сделать.

  66. Василий:

    oreshek, специально для вас Битрикс выпустил продукт bitrix24.ru которая в первой редакции вообще бесплатная и с crm

  67. Сергей:

    а где расположен include.php этот? не могу разобраться…

  68. Dimas:

    Напомните про смену значения в БД и в файле, а то статью прикрыли.

  69. Иван:

    samat:
    16.02.2012 в 11:32

    в 11 версии заменил в include.php
    $GLOBALS[___112403066(420)]= OLDSITEEXPIREDATE;
    $GLOBALS[___112403066(420)]= time()+86400*965;
    на сайте появилась надпись «До истечения пробного периода осталось 965 дней»

    Сайт все равно упал после двух недель.

  70. Людмила:

    Люди помогите где взять копию статьи???

  71. 1) в файле /bitrix/modules/main/admin/define.php
    2) в базе данных в таблице b_option в записи где поле name = «admin_passwordh» в поле value

    Чтобы обойти ограничение в 30 дней достаточно установить другую демо-версию битрикса и скопировать эти значения оттуда в битрикс у которого вы хотите продлить срок.
    Не забудьте всё удалить из папки /bitrix/managed_cache/

    (с)Записи программиста v0.1

  72. Ilya Evseev:

    Какой смысл убирать статью из открытого доступа, если она сохранилась на web.archive.org?

  73. gendalf:

    Потому что:

    function forArr3($pockets) {
    return ‘»‘.addcslashes(func1($pockets[1]), «..\37\»\’»).’»‘;
    }

    $fileTxt = file_get_contents(«include.php»);

    $newstr = preg_replace_callback(«#\\\$array1\[(\d+)\]#s», «forArr1″, $fileTxt);
    $newstr2 = preg_replace_callback(«#\\\$array2\[(\d+)\]#s», «forArr2″, $newstr);
    $newstr3 = preg_replace_callback(«#func1.(\d+).#s», «forArr3″, $newstr2);
    И теперь недостаточно сделать DEMO=N.

  74. Vlad:

    Как в 14.5 версии сделать вечный триал,есть идеи?

  75. Анализ защиты кода Битрикс или «как сделать DEMO бесконечной» Способы #1-3 – тривиальные Если сайт находится на локальном компьютере, то проблемы не существует как таковой – переводим время назад и продолжаем работу с сайтом.