Хак Изменение MAX_USERS в новых версиях Битрикс24

sanchozu

Разрушитель (V)
Сообщения
196
Реакции
173
Баллы
5 064
В новых версиях Битрикс24 немного усложнили хранение и валидацию всеми нами любимые параметры в таблице b_option где MODULE_ID = 'main', теперь параметры которые отвечают за ограничения имеют еще и дополнительный подписанный параметр, например у параметра PARAM_MAX_USERS есть еще ~PARAM_MAX_USERS который содержит в себе еще и подпись значения, можно его посмотреть например так:
SELECT value FROM b_option WHERE name = '~PARAM_MAX_USERS';

Еще один неприятный момент к при заходе на страницу обновления в админке (/bitrix/admin/update_system.php) выполняется запрос к серверу обновлений и перезаписываются данные по лицензии (в том числе и максимальное кол-во пользователей). Чтоб установленное нами новое значение не слетало, необходимо установить сервер обновлений в localhost или левый адрес, можно это сделать в настройках обновления (/bitrix/admin/settings.php?lang=en&mid=main&tabControl_active_tab=edit5)/

После этого в корне сайта создаем файлик set_max_users.php ($max_users = 999; - меняем на нужное кол-во) с таким содержимым:
PHP:
<?php
$max_users = 999;

// Получение лицензионного ключа
$license_content = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/bitrix/license_key.php');
preg_match('/\$LICENSE_KEY\s*=\s*["\']([^"\']+)["\']/', $license_content, $matches);
$license_key = $matches[1];

// Формирование подписи
$hmac_key = 'bitrix' . md5($license_key);
$signature = hash_hmac('sha256', $max_users, $hmac_key, true);
$signed_value = bin2hex($signature) . '.' . $max_users;

// Подключение к БД
$settings = include($_SERVER['DOCUMENT_ROOT'] . '/bitrix/.settings.php');
$db = $settings['connections']['value']['default'];
$mysqli = new mysqli($db['host'], $db['login'], $db['password'], $db['database']);

// Обновление параметров
$mysqli->query("INSERT INTO b_option (MODULE_ID, NAME, VALUE) VALUES ('main', 'PARAM_MAX_USERS', '$max_users') ON DUPLICATE KEY UPDATE VALUE = '$max_users'");
$mysqli->query("INSERT INTO b_option (MODULE_ID, NAME, VALUE) VALUES ('main', '~PARAM_MAX_USERS', '$signed_value') ON DUPLICATE KEY UPDATE VALUE = '$signed_value'");

echo "OK";
?>

Получаем нужное на количество юзверей, похожим образом можно менять и количество сайтов и срок действия, единственное что если вы поставите реальный сервер обновлений и зайдете на страничку обновления системы (/bitrix/admin/update_system.php) то битрикс получит с сервера реальные значения по ключу и перезапишет их в базу, чтоб этого не происходило надо патчить update_client.php либо option.php но это уже другая история =)

1757854786451.png
 
Назад
Верх