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

Способы #1-3 – тривиальные

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

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

Третий способ состоит в подмене закодированных файлов на аналогичные из полнофункционального варианта. Но, во-первых, его надо где-то взять, а во-вторых – очень сложно найти близкую по номеру версию (иначе может не заработать).


Способ #4 – отключаем проверку

Для реализации этого способа необходимы навыки программирования на php. Открываем в редакторе файл /bitrix/modules/main/include.php – он в закодированном виде, но код php в нем явно просматривается (по символам ; { } и командам die, while и т.д.). После каждой (или нескольких) из команд пробуем вставлять строку
view source
print
?
1.
die(«works»);

и обновляем страницу в браузере. Как только надпись «works» сменится на «Срок работы пробной версии продукта истек» – мы дошли до проверки и соответствующий блок кода можно закомментировать. В include.php таких блока 2 – один в середине (цикл for) и один в конце файла (цикл while).

Это еще не все, теперь необходимо закомментировать явные проверки в незакодированных файлах, их всего 2:
/bitrix/modules/main/include/prolog_after.php
/bitrix/modules/main/tools.php

Комментируем строки вида
view source
print
?
1.
if(OLDSITEEXPIREDATE != SITEEXPIREDATE)
2.
die(GetMessage(«expire_mess2″));

После этого сайт должен заработать, если что-то не получилось – попробуйте сначала Не забывайте делать резервные копии файлов перед изменением!
Способ #5 – деобфусцируем код

Как оказалось, расшифровать файлы Битрикса довольно несложно. Работать будем опять же с файлом /bitrix/modules/main/include.php. Задача состоит в том, чтобы сделать на его основе удобочитаемый код, в котором видны определения констант и используемые функции. Потом можно будет более осмысленно комментировать\добавлять\удалять строки в оригинальном зашифрованном файле.

Итак, копируем include.php в отдельную директорию, например, /bx/ Далее, открываем его в адекватном текстовом редакторе и видим, что он состоит из 2х массивов, большой функции и некоторого php-кода. Каждый из блоков находится в своих угловых скобках. Первым делом, стандартной функцией замены редактора преобразуем во всем документе
— имя первого массива из вида $GLOBALS[‘_____12332445355′] в $array1
— имя второго массива из вида $GLOBALS[‘_____34434535353′] в $array2
— имя функции из вида ‘___344590092? в ‘func1?

Теперь первые 3 части нужно вырезать и вставить в другой php файл, например decode.php Добавим в него несколько простых строк, которые довольно хорошо расшифруют оставшуюся часть /bx/include.php
view source
print
?
01.
function forArr1($pockets) {
02.
return $array1[$pockets[1]];
03.
}
04.
function forArr2($pockets) {
05.
return $array2[$pockets[1]];
06.
}
07.
function forArr3($pockets) {
08.
return ‘»‘.func1($pockets[1]).'»‘;
09.
}
10.

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

13.
$newstr = preg_replace_callback(«#array1\[(\d+)\]#s», «forArr1″, $fileTxt);
14.
$newstr2 = preg_replace_callback(«#array2\[(\d+)\]#s», «forArr2″, $newstr);
15.
$newstr3 = preg_replace_callback(«#func1.(\d+).#s», «forArr3″, $newstr2);
16.

17.
file_put_contents(«include-decode.php», $newstr3);

Все, в файле include-decode.php будет содержаться вполне читабельный код.

Что нам это дало? Как минимум, мы можем найти строку где определяется константа DEMO=Y и заменить ее на DEMO=N. Это позволит убрать проверки из других 2х файлов (см. способ 3).

Про более вкусные возможности читаем дальше.
Принцип проверки демонстрационного периода.

Внимательно проанализировав полученный код, выяснилось, что:
— дата окончания тестового доступа хранится в зашифрованном виде в 2х местах – это
1. файл /bitrix/modules/main/admin/define.php
2. в БД в таблице b_option в поле ‘value’ строки name=’admin_passwordh’
— шифруется дата одним алгоритмом, но с 2 разными строками-параметрами

Более того, удалось написать скрипт, который создает зашифрованные строки для произвольной даты. Например, для 31.12.2010

Код для записи в файл:
JjdufiwmbmM1diInbS5kJG1jdHJl
Код для записи в БД:
FlsqelcHBwYHC0VTBzcGPlhTARNpVlg=

После замены значения в базе данных обязательно очистите каталог /bitrix/managed_cache/
Способ #6 – все гениальное – просто!

Запись опубликована в рубрике Без рубрики с метками , , . Добавьте в закладки постоянную ссылку.