Копаем вечный триал стандартной комплектации, часть 1

Копаем вечный триал стандартной комплектации, часть 1

Опустим лирику. Совершенно не важно, как так случилось, что на моём антресольном сервере завелась система «номер один» российского сайтостроения. У нас есть тридцать дней на то, чтобы пощупать продукт, надеть тапки и занести деньги в контору - факт. Конечно, мы так и сделаем, но тридцать дней - мало. Поэтому, лезем в ядро бороться с системой.

С чего начать?.. Естественно, с месседжа в админке: «До истечения пробного периода осталось XX дней.»

И так, разбираемся, откуда растут ноги. Погнали!

Поиском по содержимому файлов добираемся до

..modules/main/interface/prolog_main_admin.php

Часть кода, которая выводит предупреждение:

...
// @global string $SiteExpireDate
...
$delta = $SiteExpireDate-time();
$daysToExpire = ($delta < 0? 0 : ceil($delta/86400));
...
<span class="required"><?echo GetMessage("TRIAL_ATTENTION") ?></span>
<?echo GetMessage("TRIAL_ATTENTION_TEXT1_".$vendor) ?>
<?if ($daysToExpire >= 0):?>
<?echo GetMessage("TRIAL_ATTENTION_TEXT2") ?> <span class="required"><b><?echo $daysToExpire?></b></span> <?echo GetMessage("TRIAL_ATTENTION_TEXT3") ?>.
<?else:?>
<?echo GetMessage("TRIAL_ATTENTION_TEXT4_".$vendor) ?>
<?endif;?>
<?echo GetMessage("TRIAL_ATTENTION_TEXT5_".$vendor) ?>

Упираемся в переменную $SiteExpireDate. Она задаётся где-то не здесь. Ищем, где...

Чёрт его знает где:) Но, встречается в файле ...modules/main/include/prolog_after.php, в котором есть интересная для нас логика:

if(defined("OLDSITEEXPIREDATE") && defined("SITEEXPIREDATE") && OLDSITEEXPIREDATE != SITEEXPIREDATE)
        die(GetMessage("expire_mess2"));

Две жизненно важные константы OLDSITEEXPIREDATE и SITEEXPIREDATE. Поиск по ним приводит к хитрому файлу ...modules/main/include.php Отлично! Но, придётся повозиться. Файл содержит ахрененно длинную строку с раздестроенным, PHP кодом. В конторе работают знатные извращенцы:))))) Типа, зашифровали:)

Ок. Приведём в порядок... Полтора часа возни, и получаем читаемый, упрощённый код.

Щаз будет длинно:)))))

<?php
require_once(substr(__FILE__, 0, strlen(__FILE__) - strlen("/include.php")) . "/bx_root.php");
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/start.php");
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/virtual_io.php");
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/virtual_file.php");

$_488120950 = \Bitrix\Main\Application::getInstance();
$_488120950->initializeExtendedKernel(array(
    "get" => $_GET,
    "post" => $_POST,
    "files" => $_FILES,
    "cookie" => $_COOKIE,
    "server" => $_SERVER,
    "env" => $_ENV
));

$GLOBALS["APPLICATION"] = new CMain;

if (defined("SITE_ID"))
    define("LANG", SITE_ID);

if (defined("LANG")) {
    if (defined("ADMIN_SECTION") && ADMIN_SECTION === true)
        $_1015422197 = CLangAdmin::GetByID(LANG);
    else
        $_1015422197 = CLang::GetByID(LANG);
    $_711298694 = $_1015422197->Fetch();
} else {
    $_711298694 = $GLOBALS["APPLICATION"]->GetLang();
    define("LANG", $_711298694["LID"]);
}

$_1946907838 = $_711298694["LID"];

if (!defined("SITE_ID"))
    define("SITE_ID", $_711298694["LID"]);

define("SITE_DIR", $_711298694["DIR"]);
define("SITE_SERVER_NAME", $_711298694["SERVER_NAME"]);
define("SITE_CHARSET", $_711298694["CHARSET"]);
define("FORMAT_DATE", $_711298694["FORMAT_DATE"]);
define("FORMAT_DATETIME", $_711298694["FORMAT_DATETIME"]);
define("LANG_DIR", $_711298694["DIR"]);
define("LANG_CHARSET", $_711298694["CHARSET"]);
define("LANG_ADMIN_LID", $_711298694["LANGUAGE_ID"]);
define("LANGUAGE_ID", $_711298694["LANGUAGE_ID"]);

$_919381780 = $_488120950->getContext();
$_919381780->setLanguage(LANGUAGE_ID);
$_919381780->setCulture(new \Bitrix\Main\Context\Culture($_711298694));
$_415566121 = $_919381780->getRequest();

if (!$_415566121->isAdminSection()) {
    $_919381780->setSite(SITE_ID);
}

$_488120950->start();

$GLOBALS["APPLICATION"]->reinitPath();

if (!defined("POST_FORM_ACTION_URI")) {
    define("POST_FORM_ACTION_URI", htmlspecialcharsbx(GetRequestUri()));
}

$GLOBALS["MESS"] = array();
$GLOBALS["ALL_LANG_FILES"] = array();

IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/tools.php");
IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/classes/general/database.php");
IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/classes/general/main.php");
IncludeModuleLangFile(__FILE__);

error_reporting(COption::GetOptionInt("main", "error_reporting", E_COMPILE_ERROR | E_ERROR | E_CORE_ERROR | E_PARSE) & ~E_STRICT);

if (!defined("BX_COMP_MANAGED_CACHE") && COption::GetOptionString("main", "component_managed_cache_on", "Y") <> "N") {
    define("BX_COMP_MANAGED_CACHE", true);
}

require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/filter_tools.php");
require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/ajax_tools.php");

class CBXFeatures
{
    public static function IsFeatureEnabled($_2128331551)
    {
        return true;
    }
    public static function IsFeatureEditable($_2128331551)
    {
        return true;
    }
    public static function SetFeatureEnabled($_2128331551, $_807891038 = true)
    {
    }
    public static function SaveFeaturesSettings($_1802077022, $_1385896842)
    {
    }
    public static function GetFeaturesList()
    {
        return array();
    }
    public static function InitiateEditionsSettings($_2138200839)
    {
    }
    public static function ModifyFeaturesSettings($_2138200839, $_495981549)
    {
    }
    public static function IsFeatureInstalled($_2128331551)
    {
        return true;
    }
}

$_276020476  = GetMessage("expire_mess2");
$_1069399946 = 14;

define("DEMO", "Y");

$_912457331 = 1;

unset($_1986987364);

$_1986987364 = COption::GetOptionString("main", "admin_passwordh");

while ($_1986987364) {
    $_461848715  = base64_decode($_1986987364);
    $_658498780  = "";
    $_2139208883 = "thRH4u67fhw87V7Hyr12Hwy0rFr";
    $_1215634966 = strlen($_2139208883);
    $_278722441  = 0;

    for ($_307887909 = 0; $_307887909 < strlen($_461848715); $_307887909++) {
        $_658498780 .= chr(ord($_461848715[$_307887909]) ^ ord($_2139208883[$_278722441]));
        if ($_278722441 == $_1215634966 - 1)
            $_278722441 = 0;
        else
            $_278722441 = $_278722441 + 1;
    }
    //SITEEXPIREDATE
    $_912457331 = mktime(0, 0, 0, intval($_658498780[6] . $_658498780[3]), intval($_658498780[1] . $_658498780[14]), intval($_658498780[10] . $_658498780[18] . $_658498780[7] . $_658498780[12]));

    unset($_2139208883);
    break;
}

$_116706979 = "http://bitrixsoft.com/bitrix/bs.php";

@include($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/admin/define.php");

$_1749264640 = 2;

while (defined("TEMPORARY_CACHE")) {
    $_1494959871 = base64_decode(constant("TEMPORARY_CACHE"));
    $_464054490  = "";
    $_527681262  = "DO_NOT_STEAL_OUR_BUS"; // Не воровать наш автобус!:))) Хахаха:)))) Зачёт!:)))
    $_278722441  = 0;

    for ($_307887909 = 0; $_307887909 < strlen($_1494959871); $_307887909++) {
        $_464054490 .= chr(ord($_1494959871[$_307887909]) ^ ord($_527681262[$_278722441]));
        if ($_278722441 == 19)
            $_278722441 = 0;
        else
            $_278722441 = $_278722441 + 1;
    }
    //OLDSITEEXPIREDATE
    $_1749264640 = mktime(0, 0, 0, intval($_464054490[6] . $_464054490[16]), intval($_464054490[9] . $_464054490[2]), intval($_464054490[12] . $_464054490[7] . $_464054490[14] . $_464054490[3]));

    unset($_527681262);
    break;
}

// Вечный цикл:))) Нууу, красиво, чё:)
while (!defined("DEMO")) {
    function __2139868484($_642293569)
    {
        return $_642293569 + __2139868484($_642293569);
    }
    __2139868484(1);
}


if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/bitrix/.config.php")) {
    $bxProductConfig = array();

    include($_SERVER["DOCUMENT_ROOT"] . "/bitrix/.config.php");

    if (isset($bxProductConfig["saas"]["days_after_trial"])) {
        $_1329209264 = intval($bxProductConfig["saas"]["days_after_trial"]);
        if ($_1329209264 >= 0 && $_1329209264 < 14)
            $_1069399946 = $_1329209264;
    }

    if ($bxProductConfig["saas"]["trial_stopped"] <> "")
        $_276020476 = $bxProductConfig["saas"]["trial_stopped"];
}

for ($_307887909 = 0, $_1299663923 = (time() < mktime(0, 0, 0, 5, 1, 2010) || $_912457331 <= 10), $_1158761997 = ($_912457331 < mktime(0, 0, 0, Date("m"), date("d") - $_1069399946, date("Y"))); $_307887909 < 10, $_1299663923 || $_1158761997 || $_912457331 != $_1749264640; $_307887909++, WriteFinalMessage($_276020476));

define("OLDSITEEXPIREDATE", $_912457331);
define("SITEEXPIREDATE", $_1749264640);

$GLOBALS["SiteExpireDate"] = OLDSITEEXPIREDATE; // это мы искали в самом начале... глобальная переменная $SiteExpireDate
$GLOBALS["arCustomTemplateEngines"] = array();

require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/classes/general/urlrewriter.php");

\Bitrix\Main\Loader::registerAutoLoadClasses("main", array(
    "CSiteTemplate" => "classes/general/site_template.php",
    "CBitrixComponent" => "classes/general/component.php",
    "CComponentEngine" => "classes/general/component_engine.php",
    "CComponentAjax" => "classes/general/component_ajax.php",
    "CBitrixComponentTemplate" => "classes/general/component_template.php",
    "CComponentUtil" => "classes/general/component_util.php",
    "CControllerClient" => "classes/general/controller_member.php",
    "PHPParser" => "classes/general/php_parser.php",
    "CDiskQuota" => "classes/" . $DBType . "/quota.php",
    "CEventLog" => "classes/general/event_log.php",
    "CEventMain" => "classes/general/event_log.php",
    "CAdminFileDialog" => "classes/general/file_dialog.php",
    "WLL_User" => "classes/general/liveid.php",
    "WLL_ConsentToken" => "classes/general/liveid.php",
    "WindowsLiveLogin" => "classes/general/liveid.php",
    "CAllFile" => "classes/general/file.php",
    "CFile" => "classes/" . $DBType . "/file.php",
    "CTempFile" => "classes/general/file_temp.php",
    "CFavorites" => "classes/" . $DBType . "/favorites.php",
    "CUserOptions" => "classes/general/user_options.php",
    "CGridOptions" => "classes/general/grids.php",
    "CUndo" => "/classes/general/undo.php",
    "CAutoSave" => "/classes/general/undo.php",
    "CRatings" => "classes/" . $DBType . "/ratings.php",
    "CRatingsComponentsMain" => "classes/" . $DBType . "/ratings_components.php",
    "CRatingRule" => "classes/general/rating_rule.php",
    "CRatingRulesMain" => "classes/" . $DBType . "/rating_rules.php",
    "CTopPanel" => "public/top_panel.php",
    "CEditArea" => "public/edit_area.php",
    "CComponentPanel" => "public/edit_area.php",
    "CTextParser" => "classes/general/textparser.php",
    "CPHPCacheFiles" => "classes/general/cache_files.php",
    "CDataXML" => "classes/general/xml.php",
    "CXMLFileStream" => "classes/general/xml.php",
    "CRsaProvider" => "classes/general/rsasecurity.php",
    "CRsaSecurity" => "classes/general/rsasecurity.php",
    "CRsaBcmathProvider" => "classes/general/rsabcmath.php",
    "CRsaOpensslProvider" => "classes/general/rsaopenssl.php",
    "CASNReader" => "classes/general/asn.php",
    "CBXShortUri" => "classes/" . $DBType . "/short_uri.php",
    "CFinder" => "classes/general/finder.php",
    "CAccess" => "classes/general/access.php",
    "CAuthProvider" => "classes/general/authproviders.php",
    "IProviderInterface" => "classes/general/authproviders.php",
    "CGroupAuthProvider" => "classes/general/authproviders.php",
    "CUserAuthProvider" => "classes/general/authproviders.php",
    "CTableSchema" => "classes/general/table_schema.php",
    "CCSVData" => "classes/general/csv_data.php",
    "CSmile" => "classes/general/smile.php",
    "CSmileSet" => "classes/general/smile.php",
    "CUserCounter" => "classes/" . $DBType . "/user_counter.php",
    "CHotKeys" => "classes/general/hot_keys.php",
    "CHotKeysCode" => "classes/general/hot_keys.php",
    "CBXSanitizer" => "classes/general/sanitizer.php",
    "CBXArchive" => "classes/general/archive.php",
    "CAdminNotify" => "classes/general/admin_notify.php",
    "CBXFavAdmMenu" => "classes/general/favorites.php",
    "CAdminInformer" => "classes/general/admin_informer.php",
    "CSiteCheckerTest" => "classes/general/site_checker.php",
    "CSqlUtil" => "classes/general/sql_util.php",
    "CHTMLPagesCache" => "classes/general/cache_html.php",
    "CFileUploader" => "classes/general/uploader.php",
    "LPA" => "classes/general/lpa.php"
));

require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/classes/" . $DBType . "/agent.php");
require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/classes/" . $DBType . "/user.php");
require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/classes/" . $DBType . "/event.php");
require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/classes/general/menu.php");

AddEventHandler("main", "OnAfterEpilog", array(
    "\Bitrix\Main\Data\ManagedCache",
    "finalize"
));

require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/classes/" . $DBType . "/usertype.php");

if (file_exists(($_602759598 = $_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/classes/general/update_db_updater.php"))) {
    $US_HOST_PROCESS_MAIN = False;
    include($_602759598);
}

$GLOBALS["APPLICATION"]->AddJSKernelInfo("main", array(
    "/bitrix/js/main/core/core.js",
    "/bitrix/js/main/core/core_ajax.js",
    "/bitrix/js/main/json/json2.min.js",
    "/bitrix/js/main/core/core_ls.js",
    "/bitrix/js/main/core/core_popup.js",
    "/bitrix/js/main/core/core_tooltip.js",
    "/bitrix/js/main/core/core_date.js",
    "/bitrix/js/main/core/core_timer.js",
    "/bitrix/js/main/core/core_fx.js",
    "/bitrix/js/main/core/core_window.js",
    "/bitrix/js/main/core/core_autosave.js",
    "/bitrix/js/main/rating_like.js",
    "/bitrix/js/main/session.js",
    "/bitrix/js/main/dd.js",
    "/bitrix/js/main/utils.js",
    "/bitrix/js/main/core/core_dd.js",
    "/bitrix/js/main/core/core_webrtc.js"
));

$GLOBALS["APPLICATION"]->AddCSSKernelInfo("main", array(
    "/bitrix/js/main/core/css/core.css",
    "/bitrix/js/main/core/css/core_popup.css",
    "/bitrix/js/main/core/css/core_tooltip.css",
    "/bitrix/js/main/core/css/core_date.css"
));

$GLOBALS["APPLICATION"]->AddJSKernelInfo("coreuploader", array(
    "/bitrix/js/main/core/core_uploader/common.js",
    "/bitrix/js/main/core/core_uploader/uploader.js",
    "/bitrix/js/main/core/core_uploader/file.js",
    "/bitrix/js/main/core/core_uploader/queue.js"
));

if (file_exists(($_602759598 = $_SERVER["DOCUMENT_ROOT"] . "/bitrix/init.php")))
    include_once($_602759598);

if (($_602759598 = getLocalPath("php_interface/init.php", BX_PERSONAL_ROOT)) !== false)
    include_once($_SERVER["DOCUMENT_ROOT"] . $_602759598);

if (($_602759598 = getLocalPath("php_interface/" . SITE_ID . "/init.php", BX_PERSONAL_ROOT)) !== false)
    include_once($_SERVER["DOCUMENT_ROOT"] . $_602759598);

if (!defined("BX_FILE_PERMISSIONS"))
    define("BX_FILE_PERMISSIONS", "420");

if (!defined("BX_DIR_PERMISSIONS"))
    define("BX_DIR_PERMISSIONS", 493);

$GLOBALS["sDocPath"] = $GLOBALS["APPLICATION"]->GetCurPage();

if ((!(defined("STATISTIC_ONLY") && STATISTIC_ONLY && substr($GLOBALS["APPLICATION"]->GetCurPage(), 0, strlen(BX_ROOT . "/admin/")) != BX_ROOT . "/admin/")) && COption::GetOptionString("main", "include_charset", "Y") == "Y" && strlen(LANG_CHARSET) > 0)
    header("Content-Type: text/html; charset=" . LANG_CHARSET);

if (COption::GetOptionString("main", "set_p3p_header", "Y") == "Y")
    header('P3P: policyref="/bitrix/p3p.xml", CP="NON DSP COR CUR ADM DEV PSA PSD OUR UNR BUS UNI COM NAV INT DEM STA"');
$LICENSE_KEY = "";

if (file_exists(($_602759598 = $_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/license_key.php")))
    include($_602759598);

if ($LICENSE_KEY == "" || strtoupper($LICENSE_KEY) == "DEMO")
    define("LICENSE_KEY", "DEMO");
else
    define("LICENSE_KEY", $LICENSE_KEY);

header("X-Powered-CMS: Bitrix Site Manager (" . (LICENSE_KEY == "DEMO" ? "DEMO" : md5("BITRIX" . LICENSE_KEY . "LICENCE")) . ")");

define("BX_CRONTAB_SUPPORT", defined("BX_CRONTAB"));

if (COption::GetOptionString("main", "check_agents", "Y") == "Y") {
    define("START_EXEC_AGENTS_1", microtime());
    $GLOBALS["BX_STATE"] = "AG";
    $GLOBALS["DB"]->StartUsingMasterOnly();
    CAgent::CheckAgents();
    $GLOBALS["DB"]->StopUsingMasterOnly();
    define("START_EXEC_AGENTS_2", microtime());
    $GLOBALS["BX_STATE"] = "PB";
}

ini_set("session.cookie_httponly", "1");

if ($_355529301 = $GLOBALS["APPLICATION"]->GetCookieDomain())
    ini_set("session.cookie_domain", $_355529301);

if (COption::GetOptionString("security", "session", "N") === "Y" && CModule::IncludeModule("security"))
    CSecuritySession::Init();

session_start();

foreach (GetModuleEvents("main", "OnPageStart", true) as $_1535583714)
    ExecuteModuleEventEx($_1535583714);

$GLOBALS["USER"] = new CUser;
$_1450308129 = $GLOBALS["USER"]->GetSecurityPolicy();
$_895714013 = time();

if (($_SESSION["SESS_IP"] && strlen($_1450308129["SESSION_IP_MASK"]) > 0 && ((ip2long($_1450308129["SESSION_IP_MASK"]) & ip2long($_SESSION["SESS_IP"])) != (ip2long($_1450308129["SESSION_IP_MASK"]) & ip2long($_SERVER["REMOTE_ADDR"])))) || ($_1450308129["SESSION_TIMEOUT"] > 0 && $_SESSION["SESS_TIME"] > 0 && $_895714013 - $_1450308129["SESSION_TIMEOUT"] * 60 > $_SESSION["SESS_TIME"]) || (isset($_SESSION["BX_SESSION_TERMINATE_TIME"]) && $_SESSION["BX_SESSION_TERMINATE_TIME"] > 0 && $_895714013 > $_SESSION["BX_SESSION_TERMINATE_TIME"]) || (isset($_SESSION["BX_SESSION_SIGN"]) && $_SESSION["BX_SESSION_SIGN"] <> bitrix_sess_sign()) || (isSessionExpired())) {
    $_SESSION = array();
    @session_destroy();
    if (COption::GetOptionString("security", "session", "N") === "Y" && CModule::IncludeModule("security"))
        CSecuritySession::Init();
    session_id(md5(uniqid(rand(), true)));
    session_start();
    $GLOBALS["USER"] = new CUser;
}

$_SESSION["SESS_IP"] = $_SERVER["REMOTE_ADDR"];
$_SESSION["SESS_TIME"] = time();

if (!isset($_SESSION["BX_SESSION_SIGN"]))
    $_SESSION["BX_SESSION_SIGN"] = bitrix_sess_sign();

if ((COption::GetOptionString("main", "use_session_id_ttl", "N") == "Y") && (COption::GetOptionInt("main", "session_id_ttl", 0) > 0) && !defined("BX_SESSION_ID_CHANGE")) {
    if (!array_key_exists("SESS_ID_TIME", $_SESSION)) {
        $_SESSION["SESS_ID_TIME"] = $_SESSION["SESS_TIME"];
    } elseif (($_SESSION["SESS_ID_TIME"] + COption::GetOptionInt("main", "session_id_ttl")) < $_SESSION["SESS_TIME"]) {
        if (COption::GetOptionString("security", "session", "N") === "Y" && CModule::IncludeModule("security")) {
            CSecuritySession::UpdateSessID();
        } else {
            session_regenerate_id();
        }
        $_SESSION["SESS_ID_TIME"] = $_SESSION["SESS_TIME"];
    }
}

define("BX_STARTED", true);

if (isset($_SESSION["BX_ADMIN_LOAD_AUTH"])) {
    define("ADMIN_SECTION_LOAD_AUTH", "1");
    unset($_SESSION["BX_ADMIN_LOAD_AUTH"]);
}

if (!defined("NOT_CHECK_PERMISSIONS") || NOT_CHECK_PERMISSIONS !== true) {

    $_1616618786 = isset($_REQUEST["logout"]) && (strtolower($_REQUEST["logout"]) == "yes");

    if ($_1616618786 && $GLOBALS["USER"]->IsAuthorized()) {
        $GLOBALS["USER"]->Logout();
        LocalRedirect($GLOBALS["APPLICATION"]->GetCurPageParam("", array(
            "logout"
        )));
    }

    if (!$GLOBALS["USER"]->IsAuthorized()) {
        $GLOBALS["USER"]->LoginByCookies();
    }

    $_1742455712 = false;

    if (($_797899070 = $GLOBALS["USER"]->LoginByHttpAuth()) !== null) {
        $_1742455712 = $_797899070;
        $GLOBALS["APPLICATION"]->SetAuthResult($_1742455712);
    }

    if (isset($_REQUEST["AUTH_FORM"]) && $_REQUEST["AUTH_FORM"] <> "") {
        $_1553056040 = false;
        if (COption::GetOptionString("main", "use_encrypted_auth", "N") == "Y") {
            $_1224269520 = new CRsaSecurity();
            if (($_1956826092 = $_1224269520->LoadKeys())) {
                $_1224269520->SetKeys($_1956826092);
                $_2078095736 = $_1224269520->AcceptFromForm(array(
                    "USER_PASSWORD",
                    "USER_CONFIRM_PASSWORD"
                ));
                if ($_2078095736 == CRsaSecurity::ERROR_SESS_CHECK)
                    $_1742455712 = array(
                        "MESSAGE" => GetMessage("main_include_decode_pass_sess"),
                        "TYPE" => "ERROR"
                    );
                elseif ($_2078095736 < 0)
                    $_1742455712 = array(
                        "MESSAGE" => GetMessage("main_include_decode_pass_err", array(
                            "#ERRCODE#" => $_2078095736
                        )),
                        "TYPE" => "ERROR"
                    );
                if ($_2078095736 < 0)
                    $_1553056040 = true;
            }
        }

        if ($_1553056040 == false) {
            if (!defined("ADMIN_SECTION") || ADMIN_SECTION !== true)
                $_413428552 = LANG;
            else
                $_413428552 = false;

            if ($_REQUEST["TYPE"] == "AUTH") {
                $_1742455712 = $GLOBALS["USER"]->Login($_REQUEST["USER_LOGIN"], $_REQUEST["USER_PASSWORD"], $_REQUEST["USER_REMEMBER"]);
            } elseif ($_REQUEST["TYPE"] == "OTP") {
                $_1742455712 = $GLOBALS["USER"]->LoginByOtp($_REQUEST["USER_OTP"], $_REQUEST["OTP_REMEMBER"], $_REQUEST["captcha_word"], $_REQUEST["captcha_sid"]);
            } elseif ($_REQUEST["TYPE"] == "SEND_PWD") {
                $_1742455712 = $GLOBALS["USER"]->SendPassword($_REQUEST["USER_LOGIN"], $_REQUEST["USER_EMAIL"], $_413428552);
            } elseif ($_SERVER["REQUEST_METHOD"] == "POST" && $_REQUEST["TYPE"] == "CHANGE_PWD") {
                $_1742455712 = $GLOBALS["USER"]->ChangePassword($_REQUEST["USER_LOGIN"], $_REQUEST["USER_CHECKWORD"], $_REQUEST["USER_PASSWORD"], $_REQUEST["USER_CONFIRM_PASSWORD"], $_413428552);
            } elseif (COption::GetOptionString("main", "new_user_registration", "N") == "Y" && $_SERVER["REQUEST_METHOD"] == "POST" && $_REQUEST["TYPE"] == "REGISTRATION" && (!defined("ADMIN_SECTION") || ADMIN_SECTION !== true)) {
                $_1742455712 = $GLOBALS["USER"]->Register($_REQUEST["USER_LOGIN"], $_REQUEST["USER_NAME"], $_REQUEST["USER_LAST_NAME"], $_REQUEST["USER_PASSWORD"], $_REQUEST["USER_CONFIRM_PASSWORD"], $_REQUEST["USER_EMAIL"], $_413428552, $_REQUEST["captcha_word"], $_REQUEST["captcha_sid"]);
            }

            if ($_REQUEST["TYPE"] == "AUTH" || $_REQUEST["TYPE"] == "OTP") {
                if ($_1742455712 === true && defined("ADMIN_SECTION") && ADMIN_SECTION === true) {
                    $GLOBALS["APPLICATION"]->StoreCookies();
                    $_SESSION["BX_ADMIN_LOAD_AUTH"] = true;
                    echo '<script type="text/javascript">window.onload=function(){top.BX.AUTHAGENT.setAuthResult(false);};</script>';
                    die();
                }
            }
        }

        $GLOBALS["APPLICATION"]->SetAuthResult($_1742455712);

    } elseif (!$GLOBALS["USER"]->IsAuthorized()) {
        $GLOBALS["USER"]->LoginHitByHash();
    }
}

if (($_969573532 = $GLOBALS["USER"]->GetParam("APPLICATION_ID")) !== null) {
    $_1589093256 = \Bitrix\Main\Authentication\ApplicationManager::getInstance();
    if ($_1589093256->checkScope($_969573532) !== true) {
        CHTTP::SetStatus("403 Forbidden");
        die();
    }
}

if (!defined("ADMIN_SECTION") || ADMIN_SECTION !== true) {
    $_201612664 = "";
    if (isset($_REQUEST["bitrix_preview_site_template"]) && $_REQUEST["bitrix_preview_site_template"] <> "" && $GLOBALS["USER"]->CanDoOperation("view_other_settings")) {
        $_1731543672 = CSiteTemplate::GetByID($_REQUEST["bitrix_preview_site_template"]);
        if ($_1702734568 = $_1731543672->Fetch()) {
            $_201612664 = $_1702734568["ID"];
        }
    }
    if ($_201612664 == "") {
        $_201612664 = CSite::GetCurTemplate();
    }
    define("SITE_TEMPLATE_ID", $_201612664);
    define("SITE_TEMPLATE_PATH", getLocalPath("templates/" . SITE_TEMPLATE_ID, BX_PERSONAL_ROOT));
}

if (isset($_GET["show_page_exec_time"])) {
    if ($_GET["show_page_exec_time"] == "Y" || $_GET["show_page_exec_time"] == "N")
        $_SESSION["SESS_SHOW_TIME_EXEC"] = $_GET["show_page_exec_time"];
}

if (isset($_GET["show_include_exec_time"])) {
    if ($_GET["show_include_exec_time"] == "Y" || $_GET["show_include_exec_time"] == "N")
        $_SESSION["SESS_SHOW_INCLUDE_TIME_EXEC"] = $_GET["show_include_exec_time"];
}

if (isset($_GET["bitrix_include_areas"]) && $_GET["bitrix_include_areas"] <> "")
    $GLOBALS["APPLICATION"]->SetShowIncludeAreas($_GET["bitrix_include_areas"] == "Y");

if ($GLOBALS["USER"]->IsAuthorized()) {
    $_1606313708 = COption::GetOptionString("main", "cookie_name", "BITRIX_SM");
    if (!isset($_COOKIE[$_1606313708 . "_SOUND_LOGIN_PLAYED"]))
        $GLOBALS["APPLICATION"]->set_cookie("SOUND_LOGIN_PLAYED", "Y", 0);
}

\Bitrix\Main\Page\Frame::shouldBeEnabled();

if (defined("BX_CHECK_SHORT_URI") && BX_CHECK_SHORT_URI && CBXShortUri::CheckUri()) {
    die();
}

foreach (GetModuleEvents("main", "OnBeforeProlog", true) as $_1535583714)
    ExecuteModuleEventEx($_1535583714);

if ((!defined("NOT_CHECK_PERMISSIONS") || NOT_CHECK_PERMISSIONS !== true) && (!defined("NOT_CHECK_FILE_PERMISSIONS") || NOT_CHECK_FILE_PERMISSIONS !== true)) {
    $_1948094785 = $_415566121->getScriptFile();
    if (!$GLOBALS["USER"]->CanDoFileOperation("fm_view_file", array(
        SITE_ID,
        $_1948094785
    )) || (defined("NEED_AUTH") && NEED_AUTH && !$GLOBALS["USER"]->IsAuthorized())) {
        if ($GLOBALS["USER"]->IsAuthorized() && $_1742455712["MESSAGE"] == "")
            $_1742455712 = array(
                "MESSAGE" => GetMessage("ACCESS_DENIED") . " " . GetMessage("ACCESS_DENIED_FILE", array(
                    "#FILE#" => $_1948094785
                )),
                "TYPE" => "ERROR"
            );
        if (defined("ADMIN_SECTION") && ADMIN_SECTION == true) {
            if ($_REQUEST["mode"] == "list" || $_REQUEST["mode"] == "settings") {
                echo "<script>top.location='" . $GLOBALS["APPLICATION"]->GetCurPage() . "?" . DeleteParam(array(
                    "mode"
                )) . "';</script>";
                die();
            } elseif ($_REQUEST["mode"] == "frame") {
                echo "<script type=\"text/javascript\">
                    var w = (opener? opener.window:parent.window);
                    w.location.href='" . $GLOBALS["APPLICATION"]->GetCurPage() . "?" . DeleteParam(array(
                    "mode"
                )) . "';
                </script>";
                die();
            } elseif (defined("MOBILE_APP_ADMIN") && MOBILE_APP_ADMIN == true) {
                echo json_encode(Array(
                    "status" => "failed"
                ));
                die();
            }
        }
        $GLOBALS["APPLICATION"]->AuthForm($_1742455712);
    }
}

while (!defined("OLDSITEEXPIREDATE") || strlen(OLDSITEEXPIREDATE) <= 0 || OLDSITEEXPIREDATE != SITEEXPIREDATE)
    die(GetMessage("expire_mess2"));

if (isset($_1584229364) && $_1584229364 == 404) {
    if (COption::GetOptionString("main", "header_200", "N") == "Y")
        CHTTP::SetStatus("200 OK");
}
?>

Из всей этой лабуды видно, что система хранит дату (с момента установки плюс тридцать дней) в двух местах. Первое место - файл ...modules/main/admin/define.php, в котором задаётся константа TEMPORARY_CACHE. Второе место - база данных (admin_passwordh в таблице b_option). Осталось поменять значения на свои и посмотреть на результат. Проблема только в том, что дата вида m0m1d0d1y0y1y2y3 разбросана по строке ETd1y3ISm0y1Xd0IRy0Ty2Im1B (прим. для OLDSITEEXPIREDATE), а строка зашифрована методом XOR с разными ключами для каждого случая и обёрнута в base64.

Ничего сложного. Процессы обратимы.

Перекур:)

Хак

Developers, developers, developers!

Developers, developers, developers

Hey, people!:)

В прект срочно нннадо энное количество боевых единиц, базирующихся на территории города Северодвинска.

Web-дизайнер / UI-дизайнер / Графический дизайнер - это раз.
Front-End Developer / Верстальщик - это два.
Back-End Developer - это три.

Стрелять на мыльный телеграф iam@dmitriydef.ru по наводке: PS, Ill, HTML, CSS, AngularJS, REST, Django, Python, PostgreSQL.

з.ы. офис, график свободный

Разное

Gbuse для СИТ-А-С

Gbuse для СИТ-А-С

Программное обеспечение для «Системы Информационной Транспорта» производства ОАО «Завод Электроника» город Минск:

  • FromMinskTransOriginal – база звуковых файлов минских маршрутов.
  • Gbuse – программа создания и редактирования файлов данных для блинкерных табло. Руководство по программе Gbuse.
  • Руководство пользователя по пульту управления системой информационной транспорта и по созданию маршрутов для ПУ СИТ.
  • Примеры маршрутов: Автобус 2, Троллейбус, Троллейбус 2.
  • Шаблоны некоторых файлов управления и данных.

скачать

Авто

Kevin Skinner - If Tomorrow Never Comes

Kevin Skinner - If Tomorrow Never Comes

Kevin Skinner - If Tomorrow Never Comes

Победитель четвёртого сезона "America's Got Talent" Патрик Кевин Скиннер. Тот самый момент, когда кавер эпичнее оригинала:) Песня Гарта Брукса в вольном исполнении.

Thought crosses my mind
If I never wake up in the morning
Would she ever doubt, the way I feel
About her in my heart

If tomorrow never comes
Will she know how much I loved her
Did I try in every way to show her every day
She's my only one
And if my time on earth were through
She must face this world without me
Is the love I gave her in the past
Gonna be enough to last
If tomorrow never comes

So tell that someone that you love
Is what you're thinking of
If tomorrow never comes

Звуки