Online PHP and Javascript Decoder decode hidden script to uncover its real functionality


if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
    die;
}

use Bitrix\Main, Bitrix\Main\Loader, Bitrix\Main\Localization\Loc, Bitrix\Main\Application, Bitrix\Main\Context, Bitrix\Main\Request, Bitrix\Main\Server, Bitrix\Main\Engine\CurrentUser, Bitrix\Main\Page\Asset;

Loc::loadMessages(__FILE__);

CModule::IncludeModule("rutego.block");


class RutegoBlock extends CBitrixComponent
{
    public $isEditMode;
    public $jsParams;
    public function onPrepareComponentParams($params)
    {
        $params["EDIT_AREA_ID"] = $this->GetEditAreaId(preg_replace("/[^a-zA-Z_]+/", '', $this->getTemplateName()));
        $params["DOCUMENT_ROOT"] = Context::getCurrent()->getServer()->getDocumentRoot();
        $params["ENTRY_POINT_FILEPATH"] = Context::getCurrent()->getServer()->getScriptName();
        $params["ENTRY_POINT_FOLDER"] = substr($params["ENTRY_POINT_FILEPATH"], 0, strripos($params["ENTRY_POINT_FILEPATH"], "/") + 1);
        $params["ENTRY_POINT_FOLDER_FULL"] = $params["DOCUMENT_ROOT"] . $params["ENTRY_POINT_FOLDER"];
        $params["ENTRY_POINT_FILENAME"] = substr($params["ENTRY_POINT_FILEPATH"], strripos($params["ENTRY_POINT_FILEPATH"], "/") + 1, strlen($params["ENTRY_POINT_FILEPATH"]) - 1);
        $params["ENTRY_POINT_FILENAME"] = substr($params["ENTRY_POINT_FILENAME"], 0, strripos($params["ENTRY_POINT_FILENAME"], ));
        $params["INCLUDE_AREA_SUFFIX"] = $params["ENTRY_POINT_FILENAME"] . "_block_" . $params["BLOCK_SUFFIX"];
        $params["INCLUDE_AREA_FILENAME"] = $params["INCLUDE_AREA_SUFFIX"] . ".php";
        $params["INCLUDE_AREA_FULLPATH"] = $params["ENTRY_POINT_FOLDER_FULL"] . $params["INCLUDE_AREA_FILENAME"];
        $this->jsParams = $params;
        return $params;
    }
    public function executeComponent()
    {
        if (!array_key_exists("BLOCK_SUFFIX", $this->arParams)) {
            echo Loc::GetMessage("RUTEGO_BLOCK_SUFFIX_ERROR");
            return false;
        }
        if (!preg_match("/^[a-zA-Z0-9_]+$/", $this->arParams["BLOCK_SUFFIX"])) {
            echo Loc::GetMessage("RUTEGO_BLOCK_SUFFIX_NAME_ERROR");
            return false;
        }
        if ($this->checkAjax()) {
            $this->saveArAreaData();
        }
        $this->createIncludeAreaFile();
        $this->processTemplateData();
        $this->initEditableMode();
        if ($this->startResultCache()) {
            if ($this->isEditMode) {
                echo "<div id='" . $this->arParams["EDIT_AREA_ID"] . "'>";
            }
            $this->includeComponentTemplate();
            if ($this->isEditMode) {
                echo "</div>";
                echo "<script>";
                echo "var edit_" . $this->arParams["EDIT_AREA_ID"] . " = new RutegoContentEditable(" . CUtil::PhpToJSObject($this->jsParams, false, true) . ");";
                echo "</script>";
            }
        }
    }
    protected function GetShowIncludeAreas()
    {
        $user = CurrentUser::get();
        if (!is_object($user) || !$user->getId() || defined("ADMIN_SECTION") && ADMIN_SECTION == true) {
            return false;
        }
        $kernelSession = Application::getInstance()->getKernelSession();
        if ($kernelSession->get("SESS_INCLUDE_AREAS") !== null && $kernelSession->get("SESS_INCLUDE_AREAS")) {
            return true;
        }
        static $panel_dynamic_mode = null;
        if (!isset($panel_dynamic_mode)) {
            $aUserOpt = CUserOptions::GetOption("global", "settings", array());
            $panel_dynamic_mode = isset($aUserOpt["panel_dynamic_mode"]) && $aUserOpt["panel_dynamic_mode"] == "Y";
        }
        return $panel_dynamic_mode;
    }
    protected function initEditableMode()
    {
        $this->isEditMode = $this->GetShowIncludeAreas();
        if ($this->isEditMode) {
            $this->includeContentEditableJSCSS();
        }
    }
    protected function includeContentEditableJSCSS()
    {
        Asset::getInstance()->addJs($this->__path . "/js/contenteditable.js");
        Asset::getInstance()->addCss($this->__path . "/css/contenteditable.css");
    }
    protected function createIncludeAreaFile()
    {
        if (!file_exists($this->arParams["INCLUDE_AREA_FULLPATH"])) {
            $test = array();
            $this->saveIncludeAreaFile(CRutegoBlock::prepareSaveData($test));
        }
    }
    protected function saveIncludeAreaFile($content)
    {
        file_put_contents($this->arParams["INCLUDE_AREA_FULLPATH"], print_r($content, true));
    }
    protected function readIncludeAreaFile()
    {
        if (file_exists($this->arParams["INCLUDE_AREA_FULLPATH"])) {
            return require_once $this->arParams["INCLUDE_AREA_FULLPATH"];
        } else {
            return false;
        }
    }
    protected function saveArAreaData()
    {
        while (ob_get_level()) {
            
        }
        if ($this->readIncludeAreaFile()) {
            global $arAreaData;
            if (is_array($arAreaData)) {
                $arAreaData[htmlspecialchars(trim($this->request["BLOCK_ID"]))] = htmlspecialchars(trim($this->request["CONTENT"]));
                $this->saveIncludeAreaFile(CRutegoBlock::prepareSaveData($arAreaData));
            }
        }
        die;
    }
    protected function readArAreaData()
    {
        $this->readIncludeAreaFile();
        global $arAreaData;
        $this->arResult["DATA"] = $arAreaData;
    }
    protected function processTemplateData()
    {
        $this->readArAreaData();
        foreach ($this->arResult["DATA"] as &$data) {
            $data = html_entity_decode(htmlspecialchars_decode($data));
        }
    }
    protected function checkAjax()
    {
        if ($this->request["RUTEGO_BLOCK_AJAX_COMMAND"] && $this->arParams["EDIT_AREA_ID"] == $this->request["EDIT_AREA_ID"]) {
            return true;
        } else {
            return false;
        }
    }
}




© 2023 Quttera Ltd. All rights reserved.