• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела wpt лично.

Продления демо режима

liberali3

Постоялец
Регистрация
26 Апр 2015
Сообщения
71
Реакции
18
Здравствуйте. Подскажите, пожалуйста если сейчас рабочий способ, чтобы продлить демо режим модуля?
 
Надо ставить сразу продленный модуль. Либо удалять текущий, нулить, и ставить заново. У некоторых разработчиков могут потеряться все настройки модуля
 
сохраняем код под хайдом в файл prodmod.php в корне сайта, дату можно изменить в $d ='23062035', выполняем, модули триальные продлены до 2035г.


Можно поискать всякие вставочки проверок через SSH:
Код:
grep -rPl --include="*.php" '\/\*(?!patch)[A-Za-z0-9+\/=]{1,64}\*\/\$GLOBALS' /home/bitrix/www/bitrix/

У меня находит:

1) Файл /home/bitrix/www/bitrix/modules/main/classes/general/main.php ищем строку =*/$GLOBALS тут три вхождения, первое проврка неадминский сессий у которых нет даты входа и разлогин их - нам не мешает, а вот в последующих двух закодирована проверка на максимальное кол-во пользователей, можно удалять строки полностью.


2) Файл /home/bitrix/www/bitrix/modules/main/lib/engine/response/redirect.php ищем строку =*/$GLOBALS тут закодирована проверка н максимальное кол-во пользователей, можно удалить строку полностью, если что код расшифровал он такой:
Код:
use \Bitrix\Main\License;

if (mt_rand(1, 20) == 7) {
    if (isset($GLOBALS['USER']) && is_object($GLOBALS['USER']) && call_user_func(array($GLOBALS['USER'], 'IsAuthorized')) && !call_user_func(array($GLOBALS['USER'], 'IsAdmin'))) {
        $maxUsers = 15;
        $option = \COption::GetOptionString('main', '~PARAM_MAX_USERS');

        if (!empty($option) && strpos($option, '.') !== false) {
            list($a, $b) = explode('.', $option);
            $c = pack('H*', $a);
            $d = 'bitrix' . md5(constant('LICENSE_KEY'));
            $e = hash_hmac('sha256', $b, $d, true);

            if (strcmp($e, $c) === 0) {
                $maxUsers = $b;
            }
        }

        if ($maxUsers != 0) {
            if (method_exists(\Bitrix\Main\License::class, 'getActiveUsersCount')) {
                $activeUsersCount = (new \Bitrix\Main\License())->getActiveUsersCount();
            } else {
                $activeUsersCount = 0;
                $dbResult = $GLOBALS['DB']->Query(
                    "SELECT COUNT(U.ID) as C FROM b_user U WHERE U.ACTIVE = 'Y' AND U.LAST_LOGIN IS NOT NULL AND EXISTS(SELECT 'x' FROM b_utm_user UF, b_user_field F WHERE F.ENTITY_ID = 'USER' AND F.FIELD_NAME = 'UF_DEPARTMENT' AND UF.FIELD_ID = F.ID AND UF.VALUE_ID = U.ID AND UF.VALUE_INT IS NOT NULL AND UF.VALUE_INT <> 0)",
                    true
                );

                if ($row = $dbResult->Fetch()) {
                    $activeUsersCount = intval($row['C']);
                }
            }

            if ($activeUsersCount > $maxUsers) {
                call_user_func(array($GLOBALS['USER'], 'Logout'));
            }
        }
    }
}

Закодированные файлы ищутся через SSH так:
Код:
grep -rl --include="*.php" ' array(base64_decode(' /home/bitrix/ext_www/st.devb24.dev/123/bitrix/

bitrix/modules/landing/lib/mutator.php
bitrix/modules/main/classes/general/main.php
bitrix/modules/main/classes/general/update_client.php
bitrix/modules/main/include.php
bitrix/modules/main/install/wizard/wizard.php
bitrix/modules/main/lib/config/option.php
bitrix/modules/main/lib/engine/response/redirect.php
bitrix/modules/main/lib/license.php
bitrix/modules/main/lib/security/w/rules/intvalrule.php
bitrix/modules/main/lib/security/w/rules/pregmatchrule.php
bitrix/modules/main/lib/security/w/rules/pregreplacerule.php
bitrix/modules/main/lib/security/w/rules/rule.php
bitrix/modules/main/lib/security/w/wwall.php
bitrix/modules/main/lib/UpdateSystem/ActivationSystem.php
bitrix/modules/main/lib/UpdateSystem/HashCodeParser.php
bitrix/modules/main/lib/UpdateSystem/PortalInfo.php
bitrix/modules/main/start.php

В файле: /home/bitrix/www/bitrix/modules/main/include.php начиная с конца файла надо найти строку "for($" и от этой найденной строки найти третий символ ";" вот этот блок удалить или закомментировать, там проверка на истечение даты триала, также с конца файла находим строку "while(!$GLOBALS" вот ее можно закоментировать "//while(!$GLOBAL" или удалить, все что от неё до конца файла тоже проверка на триальную дату.

Файл /home/bitrix/www/bitrix/modules/main/lib/engine/response/redirect.php комментируем строку die(Main\Localization\Loc::getMessage('MAIN_ENGINE_REDIRECT_TRIAL_EXPIRED'));

Файл: /home/bitrix/www/bitrix/modules/main/classes/general/update_client.php

Заменяем "public static function checkValid()" на
Код:
public static function DemoMode($str_rq){return str_replace(['&TYPENC=E','&TYPENC=F','&TYPENC=T'],'&TYPENC=D',$str_rq);}public static function checkValid(){return true;} public static function checkValidNull()
В функции: "public static function CollectRequestData(" находим "return" (типа return $_711449640) и оборачиваем переменную переменную в
Код:
CUpdateClient:DemoMode()
типа было
Код:
return $_711449640;
стало "
Код:
return CUpdateClient:DemoMode($_711449640);
после этого можно обновляться.
 
Последнее редактирование:
Путем небольших манипуляций с bitrix/modules/main/classes/general/update_client.php удалось старый лицензионный битрикс (в исходных кодах но уже без поддержки) обновить на демо (обфуксированы некоторые файлы) .


Пока запишу манипуляции, черновичок:

Файл: /home/bitrix/www/bitrix/modules/main/classes/general/update_client.php
Строку:
Код:
public static function checkValid()
Заменяем на:
Код:
public static function checkValid(){return true;} public static function checkValidOld()

В функции:
Код:
public static function CollectRequestData(
перед возвратом return $_711449640; надо обработать строку запроса чтоб тип битрикса был демо (TYPENC=D) лишние модули которые не входят в лицуху скрыть, ну CANGZIP=N для удобной отладки ставлю, тут можно подправить запрос на получение обновлений, я делаю так:
Код:
//crack
$_711449640 = CUpdateClient::DemoMode($_711449640);
return $_711449640;
}
 //crack
public static function DemoMode($str_rq)
 {
            $str_rq = str_replace('&TYPENC=E', '&TYPENC=D', $str_rq);
            $str_rq = str_replace('&TYPENC=F', '&TYPENC=D', $str_rq);
            $str_rq = str_replace('&TYPENC=T', '&TYPENC=D', $str_rq);
            $str_rq = str_replace('&CANGZIP=Y', '&CANGZIP=N', $str_rq);
          
            $str_rq = str_replace('&bitm_faceid=22.100.0', '', $str_rq);
            $str_rq = str_replace('&bitm_ml=21.0.0', '', $str_rq);
            $str_rq = str_replace('&bitm_scale=21.0.0', '', $str_rq);
            return $str_rq;
}

При обновлении главоного модуля (main) перезаписывается файл /home/bitrix/www/bitrix/modules/main/include.php суть его патчинга сводится к тому чтоб найти с конца файла первое вхождение "while(" и закоментировать строку либо удалить, что-то типа:
Код:
//while(!$GLOBALS['____1094812588'][172](___986347287(775)) || $GLOBALS['____1094812588'][173](OLDSITEEXPIREDATE) <=(798-2*399) || OLDSITEEXPIREDATE != SITEEXPIREDATE)die(GetMessage(___986347287(776)));

Потом опять же с конца файла ищем первое вхождение "for(" потом отсчитываем три ";" и вот этот кусок от "for(" до третей ";" после "for(" надо закомментировать либо удалить, получится что-то типа:
Код:
/*
  for($_286262113=(882-2*441),$_305826521=($GLOBALS['____713079766'][108]()< $GLOBALS['____713079766'][109]((776-2*388),(1332/2-666),(1220/2-610),round(0+1.6666666666667+1.6666666666667+1.6666666666667),round(0+0.2+0.2+0.2+0.2+0.2),round(0+2010)) || $_1154353707 <= round(0+5+5)),$_469917575=($_1154353707< $GLOBALS['____713079766'][110]((842-2*421),min(66,0,22),(1400/2-700),Date(___1954873542(397)),$GLOBALS['____713079766'][111](___1954873542(398))-$_408422008,$GLOBALS['____713079766'][112](___1954873542(399)))),$_245666088=($_SERVER[___1954873542(400)]!==___1954873542(401)&&$_SERVER[___1954873542(402)]!==___1954873542(403));
  $_286262113< round(0+2.5+2.5+2.5+2.5),($_305826521 || $_469917575 || $_1154353707 != $_244386865) && $_245666088;
  $_286262113++,$GLOBALS['_____1344588588'][4]($_1803886768)) ;
  */
 
  $GLOBALS['____713079766'][113]($_1041937832, $_1154353707);
  $GLOBALS['____713079766'][114]($_655189668, $_244386865);

собственно для автоматизации процесса необходимо накладывать этот патч во время перезаписи файла /home/bitrix/www/bitrix/modules/main/include.php при обновлении, наверно гдето внутрь CUpdateSystem::CopyDirFiles можно внедриться и сделать патч. иначе в процессе обновления может вылетать сообщение об окончании срока действия и битрикс стает колом, правка вручную вышеописаного оживляет сайт и можно дальше обновлять, но неудобно если много релизов главного модуля надо накатить каждый релиз ручками править...

Файл /home/bitrix/www/bitrix/modules/main/lib/engine/response/redirect.php комментируем строку die(Main\Localization\Loc::getMessage('MAIN_ENGINE_REDIRECT_TRIAL_EXPIRED'));

Код:
  public function send()
    {
        if ($this->checkTrial())
        {
            //die(Main\Localization\Loc::getMessage('MAIN_ENGINE_REDIRECT_TRIAL_EXPIRED'));
        }
 
Назад
Сверху