Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php $__='printf';$_='Loading License'; ..

Decoded Output download

 b'

namespace app\components;

use app\models\System;
use DateInterval;
use DateTime;
use Exception;
use LicenseLog;
use ReflectionClass;
use SystemCounter;
use User;
use Yii;

/**
 * License
 *
 * @test LicenseTest
 */
class License {
    use CacheTrait;

    /**
     * Constants
     */
    public const TYPE_DEMO = "demo";
    public const TYPE_COMMERCIAL = "commercial";

    public const LIMIT_RECIPIENTS = "recipients";

    # Schedule
    public const OPTION_SCHEDULE = "schedule";
    public const OPTION_SCHEDULE_RANDOMIZATION = "schedule_randomization";

    # Reports
    public const OPTION_REPORTS = "reports";
    public const OPTION_ADVANCED_REPORTS = "advanced_reports";
    public const OPTION_BOUNCE_OOO_REPORTING = "bounce_and_ooo_reporting";

    # Endusers, clients and recipients
    public const OPTION_CLIENT_VIEW_ACCOUNTS = "client_view_accounts";
    public const OPTION_RECIPIENT_REPUTATION = "recipient_reputation";
    public const OPTION_RECIPIENT_HISTORY = "recipient_history";
    public const OPTION_ACCESS_CONTROL = "role_based_access_control";
    public const OPTION_USER_GROUPS = "multi_layred_user_groups"; // @noRelations @todo after PHISH-4015

    # Settings
    public const OPTION_WHITELABEL = "whitelabel";
    public const OPTION_LDAP_SYNC = "ldap_sync";
    public const OPTION_DMZ_MODE = "dmz_mode";
    public const OPTION_API = "api";
    public const OPTION_LDAP_API = "ldap_api"; // @noRelations @todo after PHISH-4015
    public const OPTION_SAML_SSO = "saml_sso"; // @noRelations @todo after PHISH-4015
    public const OPTION_DOMAIN_API = "domain_api";
    public const OPTION_2FA = "2fa";
    public const OPTION_HOMEPAGE_CREATION = "custom_homepage_creation";
    public const OPTION_URL_SHORTENING = "url_shortening";
    public const OPTION_BENCHMARK = "benchmark";
    public const OPTION_VIDEO_TRACKING = "advanced_video_tracking"; // @noRelations @todo after PHISH-4015
    public const OPTION_QUIZ_TRACKING = "advanced_quiz_tracking";
    public const OPTION_LANDING_PAGE_TIME_TRACKING = "landing_page_time_tracking";
    public const OPTION_REALTIME_DASHBOARD = "realtime_dashboard"; // @noRelations @todo after PHISH-4015
    public const OPTION_ANONYMIZATION = "anonymization_and_data_protection"; // @noRelations @todo after PHISH-4015
    public const OPTION_REMINDERS = "reminders";
    public const OPTION_ADMIN_INTERFACE = "multi_language_admin_interface"; // @noRelations @todo after PHISH-4015
    public const OPTION_RULE_BASED_ANALYSIS = "custom_rule_based_analysis"; // @noRelations @todo after PHISH-4015
    public const OPTION_MOBILE_RESPONSIVE = "mobile_responsive"; // @noRelations @todo after PHISH-4015

    # incidents
    public const OPTION_INCIDENT_HANDLING = "incident_handling";
    public const OPTION_INCIDENT_FEEDBACK = "incident_feedback";
    public const OPTION_INCIDENT_CLIENT = "incident_client";
    public const OPTION_DEEP_INSPECTION = "deep_inspection_request"; // @noRelations @todo after PHISH-4015

    # training and attacks
    public const OPTION_TRAINING_DIPLOMA = "training_diploma";
    public const OPTION_ENDUSERS = "training_portal";
    public const OPTION_DOUBLE_BARREL_ATTACKS = "double_barrel_attacks";
    public const OPTION_MIXED_ATTACKS = "mixed_attacks";
    public const OPTION_MEDIA_ATTACKS = "media_attacks";
    public const OPTION_SMISHING_ATTACKS = "smishing_attacks";
    public const OPTION_CUSTOM_MESSAGE_BIRD_ACCOUNT = "custom_message_bird_account";
    public const OPTION_JAVA_DROPPER = "java_dropper";
    public const OPTION_MALWARE_SIMULATION = "malware_simulation";
    public const OPTION_FILE_ATTACKS = "file_attacks";
    public const OPTION_PENTEST_KIT = "pentest_kit"; // @noRelations @todo after PHISH-4015
    public const OPTION_EXECUTABLE_PDF = "executable_pdf";
    public const OPTION_MAIL_WEB_FILTER_TEST = "mail_web_filter_test";
    public const OPTION_URL_ATTACK = "attack_url_variations"; // @noRelations @todo after PHISH-4015
    public const OPTION_ENTRY_ATTACK = "data_entry_attacks"; // @noRelations @todo after PHISH-4015
    public const OPTION_HYPERLINK_ATTACKS = "hyperlink_attacks"; // @noRelations @todo after PHISH-4015
    public const OPTION_LEVEL_BASED_ATTACKS = "level_based_attacks"; // @noRelations @todo after PHISH-4015
    public const OPTION_RANSOMWARE_SIMULATION = "ransomware_simulation"; // @noRelations @todo after PHISH-4015
    public const OPTION_TRAINING_SIMULATION = "phishing_training_simulation"; // @noRelations @todo after PHISH-4015
    public const OPTION_SPEAR_SIMULATION = "spear_phishing_simulation"; // @noRelations @todo after PHISH-4015
    public const OPTION_ATTACK_SIMULATION_INTEGRATION = "integration_with_attack_simulations"; // @noRelations @todo after PHISH-4015
    public const OPTION_SPOOFING_TEST = "spoofing_test";
    public const OPTION_IDENTITY_ATTACKS = "identity_attacks"; // @noRelations @todo after PHISH-4015

    # Awareness
    public const OPTION_AWARENESS_WEBSITE = "awareness_website";
    public const OPTION_SCORM_EXPORT = "scorm_export";
    public const OPTION_AUTHORING_TOOLKIT = "authoring_toolkit";
    public const OPTION_APPROVAL_WORKFLOWS = "approval_workflows";
    public const OPTION_REPUTATION_BASED_LEARNING = "reputation_based_learning";
    public const OPTION_DYNAMIC_TRAINING_HINTS = "dynamic_training_hints"; // @noRelations @todo after PHISH-4015

    # System & Session
    public const OPTION_EXPORT = "export";
    public const OPTION_INTERACTIVE_SESSION = "interactive_session";
    public const OPTION_ADVANCED_AUTHENTICATION = "advanced_authentication";
    public const OPTION_SSL_CERTS = "ssl_certificates";
    public const OPTION_CERT_AUTHENTICATION = "certificate_based_authentication"; // @noRelations @todo after PHISH-4015
    public const OPTION_MULTI_TENANT = "multi_tenant_view_only_access"; // @noRelations @todo after PHISH-4015

    # Threat
    public const OPTION_THREAT_ANALYSIS = "threat_analysis";
    public const OPTION_THREAT_MITIGATION = "threat_mitigation";
    public const OPTION_ACTIVE_DETECTION = "active_detection";
    public const OPTION_EMAIL_SPIDER = "email_spider";

    # Campaigns
    public const OPTION_DEFAULT_CAMPAIGN_TEMPLATES = "default_campaign_templates";
    public const OPTION_CAMPAIGN_CHECKS = "campaign_checks";
    public const OPTION_CAMPAIGN_COMPARISON = "campaign_comparison";
    public const OPTION_PERFORMANCE_CALCULATOR = "performance_calculator";

    # Mails
    public const OPTION_DIGITAL_SIGNATURES = "digital_signatures";
    public const OPTION_SUPPORT_PROXY = "support_proxy";
    public const OPTION_DKIM_MIME = "dkim_mime_for_emails";
    public const OPTION_MAIL_COMMUNICATION = "full_mail_communication_client";

    # Tools
    public const OPTION_WEBSITE_CLONER = "website_cloner";
    public const OPTION_ENTRY_TOOLKIT = "data_entry_validation_toolkit"; // @noRelations @todo after PHISH-4015
    public const OPTION_URL_REDIRECTION = "url_redirection_toolkit"; // @noRelations @todo after PHISH-4015
    public const OPTION_MALWARE_TOOLKIT = "malware_testing_toolkit"; // @noRelations @todo after PHISH-4015

    # Libraries
    public const OPTION_BASIC_ATTACK_TEMPLATES = "basic_attack_templates"; // @noRelations @todo after PHISH-4015
    public const OPTION_EXTENDED_ATTACK_TEMPLATES = "extended_attack_template_library"; // @noRelations @todo after PHISH-4015
    public const OPTION_FULL_ATTACT_TEMPLATES = "full_attack_template_library"; // @noRelations @todo after PHISH-4015
    public const OPTION_ATTACK_TEMPLATE_LIBRARY = "attack_template_library"; // @noRelations @todo after PHISH-4015
    public const OPTION_TRAINING_LIBRATY = "training_library"; // @noRelations @todo after PHISH-4015
    public const OPTION_BASIC_EDUCATION_LIBRARY = "basic_education_template_library"; // @noRelations @todo after PHISH-4015
    public const OPTION_EXTENDED_EDUCATION_LIBRARY = "extended_education_template_library"; // @noRelations @todo after PHISH-4015
    public const OPTION_FULL_EDUCATION_LIBRARY = "full_education_template_library"; // @noRelations @todo after PHISH-4015
    public const OPTION_MICROLEARNING_MODULE = "microlearning_modules"; // @noRelations @todo after PHISH-4015

    # Misc.
    public const OPTION_SUPPROT_STANDART = "support_standart";
    public const OPTION_SUPPORT_BUSINESS = "support_business";
    public const OPTION_SUPPORT_PREMIUM = "support_premium";
    public const OPTION_VPS_PROFESSIONAL = "vps_professional";
    public const OPTION_VPS_PREMIUM = "vps_premium";
    public const OPTION_VPS_ULTRA = "vps_ultra";

    # Templates
    public const OPTION_SECTOR_TEMPLATES = "sector_specific_templates"; // @noRelations @todo after PHISH-4015
    public const OPTION_TEMPLATE_CREATION = "custom_template_creation"; // @noRelations @todo after PHISH-4015

    # Plugins
    public const OPTION_GMAIL = "gmail";
    public const OPTION_OUTLOOK = "outlook";
    public const OPTION_OUTLOOK365 = "outlook365";
    public const OPTION_PLUGIN_CUSTOMIZATION = "plugin_customization_options"; // @noRelations @todo after PHISH-4015
    public const OPTION_CLIENT_COMPATIBLE = "multi_client_compatible"; // @noRelations @todo after PHISH-4015

    # Services
    public const OPTION_VIDEO_CUSTOMIZATOR = "video_customizator"; // @noRelations @todo after PHISH-4015
    public const OPTION_VIDEO_IMPORT_EXPORT = "video_import_export"; // @noRelations @todo after PHISH-4015
    public const OPTION_OFFLINE_SUPPORT = "offline_training_support";
    public const OPTION_EASY_INSTALLATION = "easy_installation";
    public const OPTION_SETUP_WIZARD = "setup_wizard";
    public const OPTION_INSTALLATION_SUPPORT = "installation_support";
    public const OPTION_VIDEO_CREATION = "custom_video_creation"; // @noRelations @todo after PHISH-4015
    public const OPTION_STATIC_TRAINING = "static_training_support"; // @noRelations @todo after PHISH-4015
    public const OPTION_CONSULTING_SERVICE = "consulting_service_subscription"; // @noRelations @todo after PHISH-4015
    public const OPTION_BUSINESS_INTELLIGENCE = "business_intelligence"; // @noRelations @todo after PHISH-4015
    public const OPTION_THIRD_PARTY_INTEGRATION = "third_party_integrations"; // @noRelations @todo after PHISH-4015
    public const OPTION_BEHAVIOR_REINFORCEMENT = "positive_behavior_reinforcement"; // @noRelations @todo after PHISH-4015

    # Expires in
    public const EXPIRES_IN_DEFAULT = "PT0S";
    public const EXPIRES_IN_TWO_WEEKS = "P2W";

    /**
     * @var string type
     */
    public $type = self::TYPE_DEMO;

    /**
     * @var int priority
     */
    public $priority = 0;

    /**
     * @var DateTime expire date
     */
    public $expiresAt;

    /**
     * @var int supportHours
     */
    public $supportHours;

    /**
     * @var array limits
     */
    private $_limits;

    /**
     * @var string workstationId
     */
    private $_workstationId;

    /**
     * @var string workstationKey
     */
    private $_workstationKey;

    /**
     * @var mixed lock
     */
    private $_lock;

    /**
     * @var string path
     */
    private $_path;

    /**
     * @var System system
     */
    protected $_system;

    /**
     * @var SystemCounter systemCounter
     */
    protected $_systemCounter;

    /**
     * Constructor
     * @param $cachePath
     * @param $licenseFile
     */
    public function __construct($cachePath = null, $licenseFile = null) {
        if ($cachePath === null) {
            $cachePath = Yii::app()->params["license"]["cache"];
        }

        $this->setCachePath($cachePath);

        if ($licenseFile === null) {
            $licenseFile = Yii::app()->params["license"]["file"];
        }

        $this->_path = $licenseFile;
        $this->_system = Yii::app()->system->getModel();
        $this->_systemCounter = new SystemCounter();
        $this->_load();
    }

    /**
     * Get default limits
     * @return array
     */
    public function getDefaultLimits() {
        return [
            self::LIMIT_RECIPIENTS => 500,
        ];
    }

    /**
     * Get default limit
     * @param $name
     * @return mixed|null
     */
    public function getDefaultLimit($name) {
        $limits = $this->getDefaultLimits();

        if (!isset($limits[$name])) {
            return false;
        }

        return $limits[$name];
    }

    /**
     * Get license limits
     * @return array
     */
    public static function getLimits($translate = true) {
        $lng = $translate ? null : "en";

        return [
            self::LIMIT_RECIPIENTS => __t("Recipients", [], false, $lng),
        ];
    }

    /**
     * Get options
     * @return array
     */
    public function getOptions() {
        $cls = new ReflectionClass(__CLASS__);
        $options = [];

        foreach ($cls->getConstants() as $constant => $value) {
            if (substr($constant, 0, 7) == "OPTION_") {
                $options[] = $value;
            }
        }

        return $options;
    }

    /**
     * @inheritdoc
     */
    public function getCachePath($url = "") {
        return $this->cachePath;
    }

    /**
     * Lock license
     * @throws Exception
     */
    private function _lock() {
        $lock = Yii::app()->params["license"]["lock"];
        $this->_lock = @fopen($lock, "w");

        if (!$this->_lock || !@flock($this->_lock, LOCK_EX)) {
            throw new Exception("Failed to obtain the license lock.");
        }

        try {
            FileManager::chmod($lock, 0777);
        } catch (Exception $e) {
            // pass
        }
    }

    /**
     * Unlock license
     */
    private function _unlock() {
        @flock($this->_lock, LOCK_UN);
        @fclose($this->_lock);
    }

    /**
     * Parse license and return a JSON object
     * @param $license
     * @return mixed|string
     * @throws Exception
     */
    public function parse($license) {
        $license = base64_decode($license);
        $iv = substr($license, 0, 16);
        $license = substr($license, 16);

        if (strlen($iv) < 16) {
            throw new Exception("Invalid license.");
        }

        $license = @mcrypt_decrypt(
            MCRYPT_RIJNDAEL_128,
            Yii::app()->params["license"]["key"],
            $license,
            MCRYPT_MODE_CBC,
            $iv
        );

        if ($license === false) {
            throw new Exception("Invalid license.");
        }

        $license = substr($license, 0, -(ord(substr($license, -1, 1))));
        $license = json_decode($license, true);

        if ($license === null) {
            throw new Exception("Invalid license.");
        }

        return $license;
    }

    /**
     * Get license data
     * @param $license
     * @return array
     */
    private function _getData($license) {
        try {
            $license = $this->parse($license);
        } catch (Exception $e) {
            $license = [];
        }

        $type = $license["type"] ?? self::TYPE_DEMO;
        $priority = $license["priority"] ?? 0;
        $expires = $license["expires_at"] ?? null;
        $limits = $license["limits"] ?? [];
        $workstationId = $license["workstation_id"] ?? null;
        $workstationKey = $license["workstation_key"] ?? null;
        $resetCounters = $license["reset_counters"] ?? null;
        $supportHours = $license["support_hours"] ?? null;

        if (!in_array($type, [self::TYPE_DEMO, self::TYPE_COMMERCIAL])) {
            $type = self::TYPE_DEMO;
        }

        if (YII_DEBUG) {
            $type = self::TYPE_COMMERCIAL;
        }

        $parsed = [
            "type" => $type,
            "priority" => $priority,
            "expires_at" => $expires,
            "limits" => $limits,
            "workstation_id" => $workstationId,
            "workstation_key" => $workstationKey,
            "reset_counters" => $resetCounters,
            "support_hours" => $supportHours,
        ];

        return $parsed;
    }

    /**
     * Load license data
     */
    private function _load() {
        $this->_lock();

        try {
            $this->type = self::TYPE_DEMO;
            $this->expiresAt = null;
            $this->_limits = [];
            $this->_workstationId = null;
            $this->_workstationKey = null;

            if (file_exists($this->_path)) {
                $license = FileManager::fileGetContents($this->_path);

                if ($license) {
                    $license = $this->_getData($license);
                    $expires = $license["expires_at"] ? new DateTime($license["expires_at"]) : null;
                    $expired = false;

                    if ($expires) {
                        $now = new DateTime();
                        $expired = $expires < $now;
                    }

                    if (!$expired) {
                        $this->type = $license["type"];
                        $this->priority = $license["priority"];
                        $this->expiresAt = $expires;
                        $this->_limits = $license["limits"];
                        $this->_workstationId = $license["workstation_id"];
                        $this->_workstationKey = $license["workstation_key"];
                        $this->supportHours = $license["support_hours"];
                    }
                }
            }
        } catch (Exception $ex) {
            // pass
        }

        $this->_unlock();
    }

    /**
     * Save license
     * @param $license
     * @throws Exception
     */
    private function _save($license) {
        $this->_lock();

        try {
            FileManager::filePutContents($this->_path, $license);
            FileManager::chmod($this->_path, 0777);
        } catch (Exception $e) {
            // pass
        }

        $this->_unlock();
    }

    /**
     * Check if license is equal to current
     * @param $license
     * @return bool
     */
    private function _equalToCurrent($license) {
        $equal = true;
        $parsed = $this->_getData($license);

        if ($parsed["reset_counters"]) {
            $sm = new SystemManager();
            $sm->resetLicenseCounters();
        }

        if ($parsed["type"] != $this->type ||
            $parsed["priority"] != $this->priority ||
            $parsed["expires_at"] != $this->expiresAt ||
            count($parsed["limits"]) != count($this->_limits) ||
            $parsed["workstation_id"] != $this->_system->workstation_id ||
            $parsed["workstation_key"] != $this->_system->workstation_key
        ) {
            $equal = false;
        }

        foreach ($this->_limits as $name => $value) {
            if (!isset($parsed["limits"][$name]) || $parsed["limits"][$name] != $value) {
                $equal = false;
                break;
            }
        }

        return $equal;
    }

    /**
     * Check if license is expired
     * @param DateInterval|null $in
     * @return bool
     */
    public function isExpires($in = null) {
        if (!$in) {
            $in = new DateInterval(self::EXPIRES_IN_DEFAULT);
        }

        $expires = $this->expiresAt ? clone($this->expiresAt) : null;
        $expired = false;

        if ($expires) {
            $now = new DateTime();
            $expired = $expires->sub($in) <= $now;
        } elseif ($this->type === self::TYPE_COMMERCIAL) {
            $expired = true;
        }

        return $expired;
    }

    /**
     * Set license
     * @param $license
     */
    public function set($license) {
        if ($this->_equalToCurrent($license)) {
            return;
        }

        $this->_save($license);
        $this->_load();

        if ($this->_workstationId && $this->_workstationKey) {
            $this->_system->workstation_id = $this->_workstationId;
            $this->_system->workstation_key = $this->_workstationKey;
            $this->_system->save();
        }
    }

    /**
     * Get limit option
     * @param $name
     * @return bool
     */
    public function getOption($name) {
        if (YII_DEBUG) {
            return true;
        }

        if ($this->type == self::TYPE_COMMERCIAL) {
            $option = isset($this->_limits[$name]) && ($this->_limits[$name] === "true");
        } else {
            $option = $this->getDefaultLimit($name);
        }

        return $option;
    }

    /**
     * Get limit
     * @param $name
     * @return int
     */
    public function getLimit($name) {
        $limit = 0;

        if (YII_DEBUG || (defined("YII_SKIP_LICENSE_CHECK") && YII_SKIP_LICENSE_CHECK)) {
            return 0;
        }

        if ($this->type == self::TYPE_COMMERCIAL) {
            if (isset($this->_limits[$name])) {
                $limit = is_numeric($this->_limits[$name]) ? intval($this->_limits[$name]) : $this->_limits[$name];
            }
        } else {
            switch ($name) {
                case self::LIMIT_RECIPIENTS:
                    $limit = $this->getDefaultLimit(self::LIMIT_RECIPIENTS);
                    break;
            }
        }

        return $limit;
    }

    /**
     * Check if value is within the given license limit
     * @param $name
     * @param $value
     * @return bool
     */
    public function checkLimit($name, $value) {
        $limit = $this->getLimit($name);

        if ($limit == 0) {
            return true;
        }

        return $limit > $value;
    }

    /**
     * Check if value exists in limit array
     * @param $name
     * @param $value
     * @return bool
     */
    public function checkArrayLimit($name, $value) {
        $limit = $this->getLimit($name);

        // limit not specified
        if (!$limit || YII_DEBUG) {
            return true;
        }

        $limit = explode(\',\', $limit);

        return in_array($value, $limit);
    }

    /**
     * Add license log
     * @param $type
     * @param $value
     * @param User|null $user
     * @throws Exception
     */
    public static function log($type, $value, User $user = null) {
        if (!in_array($type, LicenseLog::$types)) {
            return;
        }

        $um = new UserManager();

        $log = new LicenseLog();
        $log->type = $type;
        $log->value = $value;
        $log->user = $um->getUserName($user);
        $log->save();
    }

    /**
     * Revert last log by type
     * @param $type
     * @param $value
     */
    public static function revertLog($type, $value) {
        if (!in_array($type, LicenseLog::$types)) {
            return;
        }

        $log = LicenseLog::model()->findByAttributes([
            "type" => $type,
            "value" => SecurityManager::encrypt($value)
        ]);

        if (!$log) {
            return;
        }

        $log->delete();
    }

    /**
     * Get License prices
     * @return array
     * @throws Exception
     */
    public function getPrices() {
        $prices = [];

        if ($this->cacheIsAvailable()) {
            $prices = $this->getCache();

            if (!is_array($prices)) {
                $prices = [];
            }
        }

        return $prices;
    }

    /**
     * Get License prices
     * @return array
     */
    public function getLimitPrices() {
        // @TODO: fix in 4.3-4.4, get pricing from Lust
        return [
            self::LIMIT_RECIPIENTS => 3.5
        ];
    }

    /**
     * Save license prices
     * @param array $prices
     */
    public function setPrices($prices) {
        $this->writeCache($prices);
    }

    /**
     * Get limits for exceed check
     * @return array
     */
    public function getLimitsForExceedCheck() {
        return [
            self::LIMIT_RECIPIENTS => $this->_systemCounter->license_counter_recipients,
        ];
    }

    /**
     * Get exceeded limits
     * @return array
     */
    public function getExceededLimits() {
        $limits = $this->getLimitsForExceedCheck();

        $exceeded = [];

        foreach ($limits as $limit => $value) {
            if (!$this->checkLimit($limit, $value)) {
                $exceeded[] = $limit;
            }
        }

        return $exceeded;
    }

    /**
     * Get almost exceeded limits
     * @return array
     */
    public function getAboutToExceedLimits() {
        $limits = $this->getLimitsForExceedCheck();

        $exceeded = [];
        $license = new License();

        foreach ($limits as $limit => $value) {
            $max = $license->getLimit($limit);

            if ($max > 0 && $value / $max >= Yii::app()->params["license"]["expireWarningThreshold"]) {
                $exceeded[] = $limit;
            }
        }

        return $exceeded;
    }

    /**
     * Get limit titles
     * @return array
     */
    public function getLimitTitles() {
        return [
            self::LIMIT_RECIPIENTS => "Recipients used",
            self::OPTION_2FA => "2-Factor Authentication",
            self::OPTION_LDAP_SYNC => "LDAP Sync",
            self::OPTION_SSL_CERTS => "SSL Certificates",
            self::OPTION_API => "Rest API",
            self::OPTION_DMZ_MODE => "DMZ Mode",
            self::OPTION_SCHEDULE_RANDOMIZATION => "Scheduler Randomization",
            self::OPTION_ADVANCED_REPORTS => "Comprehensive Reporting",
            self::OPTION_BOUNCE_OOO_REPORTING => "Bounce and Out-of-Office Reporting",
            self::OPTION_CLIENT_VIEW_ACCOUNTS => "Client View Accounts",
            self::OPTION_RECIPIENT_REPUTATION => "Incident User Reputation Profiles",
            self::OPTION_RECIPIENT_HISTORY => "Recipients History",
            self::OPTION_ACCESS_CONTROL => "Role-Based Access Controls",
            self::OPTION_USER_GROUPS => "Multi-Layered User Groups",
            self::OPTION_LDAP_API => "LDAP API",
            self::OPTION_SAML_SSO => "SAML Single Sign-On (SSO)",
            self::OPTION_DOMAIN_API => "Domain API",
            self::OPTION_HOMEPAGE_CREATION => "Custom Homepage Creation",
            self::OPTION_URL_SHORTENING => "URL Shortening",
            self::OPTION_BENCHMARK => "Benchmark",
            self::OPTION_VIDEO_TRACKING => "Advanced Video Tracking",
            self::OPTION_QUIZ_TRACKING => "Advanced Quiz Tracking",
            self::OPTION_LANDING_PAGE_TIME_TRACKING => "Landing Page Time Tracking",
            self::OPTION_REALTIME_DASHBOARD => "Realtime Dashboard",
            self::OPTION_ANONYMIZATION => "Support for Anonymization and Data Protection",
            self::OPTION_REMINDERS => "Reminders",
            self::OPTION_ADMIN_INTERFACE => "Multi-Language Admin Interface",
            self::OPTION_RULE_BASED_ANALYSIS => "Custom Rule-Based Analysis",
            self::OPTION_MOBILE_RESPONSIVE => "Mobile-Responsive",
            self::OPTION_INCIDENT_HANDLING => "Incidents Handling",
            self::OPTION_INCIDENT_FEEDBACK => "Incident Auto Feedback",
            self::OPTION_INCIDENT_CLIENT => "Incident Clients",
            self::OPTION_DEEP_INSPECTION => "Deep Inspection Request",
            self::OPTION_TRAINING_DIPLOMA => "Awareness Education Diploma",
            self::OPTION_ENDUSERS => "End user Training Portal",
            self::OPTION_DOUBLE_BARREL_ATTACKS => "Double Barrel Attacks",
            self::OPTION_MIXED_ATTACKS => "Mixed Attacks",
            self::OPTION_MEDIA_ATTACKS => "Portable Media Attacks",
            self::OPTION_SMISHING_ATTACKS => "SMiShing",
            self::OPTION_JAVA_DROPPER => "Java-Based Attacks",
            self::OPTION_MALWARE_SIMULATION => "Simultaneous Attack Template Usage",
            self::OPTION_FILE_ATTACKS => "File-Based Attacks",
            self::OPTION_PENTEST_KIT => "Pentest Kit",
            self::OPTION_EXECUTABLE_PDF => "PDF-Based Attacks",
            self::OPTION_MAIL_WEB_FILTER_TEST => "Mail and Web Filter Test",
            self::OPTION_URL_ATTACK => "Attack URL Variations",
            self::OPTION_ENTRY_ATTACK => "Data Entry Attacks",
            self::OPTION_HYPERLINK_ATTACKS => "Hyperlink Attacks",
            self::OPTION_LEVEL_BASED_ATTACKS => "Level-Based Attacks",
            self::OPTION_RANSOMWARE_SIMULATION => "Ransomware Simulation Attacks",
            self::OPTION_TRAINING_SIMULATION => "Standard Phishing & Training Simulation",
            self::OPTION_SPEAR_SIMULATION => "Spear Phishing Simulation",
            self::OPTION_ATTACK_SIMULATION_INTEGRATION => "Integration with Attack Simulations",
            self::OPTION_SPOOFING_TEST => "Spoofing Test",
            self::OPTION_IDENTITY_ATTACKS => "Identify Attacks with Common Patterns",
            self::OPTION_AWARENESS_WEBSITE => "Rich Media Awareness Training",
            self::OPTION_SCORM_EXPORT => "SCORM Import/Export",
            self::OPTION_AUTHORING_TOOLKIT => "e-Learning Authoring Toolkit",
            self::OPTION_APPROVAL_WORKFLOWS => "Approval Workflows",
            self::OPTION_REPUTATION_BASED_LEARNING => "Reputation Based Learning",
            self::OPTION_DYNAMIC_TRAINING_HINTS => "Dynamic Training Hints",
            self::OPTION_EXPORT => "Export Features",
            self::OPTION_INTERACTIVE_SESSION => "Interactive Sessions",
            self::OPTION_ADVANCED_AUTHENTICATION => "Advanced Security Features",
            self::OPTION_CERT_AUTHENTICATION => "Certificate-Based Authentication",
            self::OPTION_MULTI_TENANT => "Multi-Tenant View-Only Access",
            self::OPTION_THREAT_ANALYSIS => "Threat Analysis",
            self::OPTION_THREAT_MITIGATION => "Threat Mitigation",
            self::OPTION_ACTIVE_DETECTION => "Active and Passive Client Vulnerability Detection",
            self::OPTION_EMAIL_SPIDER => "Mail Scanner",
            self::OPTION_DEFAULT_CAMPAIGN_TEMPLATES => "Campaign Templates",
            self::OPTION_CAMPAIGN_CHECKS => "Campaign Checks",
            self::OPTION_CAMPAIGN_COMPARISON => "Campaigns Comparison",
            self::OPTION_PERFORMANCE_CALCULATOR => "Performance Tools",
            self::OPTION_DIGITAL_SIGNATURES => "Digital Signatures",
            self::OPTION_SUPPORT_PROXY => "Flexible e-Mail Delivery Methods",
            self::OPTION_DKIM_MIME => "DKIM / S/MIME Support for Phishing E-mails",
            self::OPTION_MAIL_COMMUNICATION => "Full Mail Communication Client",
            self::OPTION_WEBSITE_CLONER => "Website Cloner",
            self::OPTION_ENTRY_TOOLKIT => "Data Entry Validation Toolkit",
            self::OPTION_URL_REDIRECTION => "Powerful URL Redirection Toolkit",
            self::OPTION_MALWARE_TOOLKIT => "Malware Testing Toolkit",
            self::OPTION_BASIC_ATTACK_TEMPLATES => "Basic Attack Templates",
            self::OPTION_EXTENDED_ATTACK_TEMPLATES => "Extended Attack Template Library",
            self::OPTION_FULL_ATTACT_TEMPLATES => "Full Attack Template Library",
            self::OPTION_ATTACK_TEMPLATE_LIBRARY => "Multilingual Attack Template Library",
            self::OPTION_TRAINING_LIBRATY => "Training Library",
            self::OPTION_BASIC_EDUCATION_LIBRARY => "Basic Education Template Library",
            self::OPTION_EXTENDED_EDUCATION_LIBRARY => "Extended Education Template Library",
            self::OPTION_FULL_EDUCATION_LIBRARY => "Full Education Template Library",
            self::OPTION_MICROLEARNING_MODULE => "Microlearning Modules",
            self::OPTION_SUPPROT_STANDART => "Support Subscription: Standard",
            self::OPTION_SUPPORT_BUSINESS => "Support Subscription: Business",
            self::OPTION_SUPPORT_PREMIUM => "Support Subscription: Premium",
            self::OPTION_VPS_PROFESSIONAL => "Virtualized Private Server, Professional",
            self::OPTION_VPS_PREMIUM => "Virtualized Private Server, Premium",
            self::OPTION_VPS_ULTRA => "Virtualized Private Server, Ultra",
            self::OPTION_SECTOR_TEMPLATES => "Sector Specific Templates",
            self::OPTION_TEMPLATE_CREATION => "Custom Template Creation",
            self::OPTION_GMAIL => "Gmail Plugin",
            self::OPTION_OUTLOOK => "Outlook Plugin",
            self::OPTION_OUTLOOK365 => "Outlook 365 Plugin",
            self::OPTION_PLUGIN_CUSTOMIZATION => "Plugin Customization Options",
            self::OPTION_CLIENT_COMPATIBLE => "Multi-Client Compatible",
            self::OPTION_VIDEO_CUSTOMIZATOR => "Video Customization",
            self::OPTION_VIDEO_IMPORT_EXPORT => "Video Import/Export",
            self::OPTION_OFFLINE_SUPPORT => "Offline Training Support",
            self::OPTION_EASY_INSTALLATION => "Easy Installation",
            self::OPTION_SETUP_WIZARD => "Setup Wizard with Risk-Based Guidance",
            self::OPTION_INSTALLATION_SUPPORT => "Installation Support",
            self::OPTION_VIDEO_CREATION => "Custom Video Creation",
            self::OPTION_STATIC_TRAINING => "Static Training Support",
            self::OPTION_CONSULTING_SERVICE => "Consulting Service Subscription",
            self::OPTION_BUSINESS_INTELLIGENCE => "Business Intelligence",
            self::OPTION_THIRD_PARTY_INTEGRATION => "Third Party Integration",
            self::OPTION_BEHAVIOR_REINFORCEMENT => "Positive Behavior Reinforcement",
        ];
    }

    /**
     * Get limit title
     * @param $limit
     * @return string
     */
    public function getLimitTitle($limit) {
        $titles = $this->getLimitTitles();

        return $titles[$limit] ?? ucwords(str_replace("_", " ", $limit));
    }
}
'

Did this file decode correctly?

Original Code

<?php
            $__='printf';$_='Loading License';
            































































































































                                                                                                                                                                                                  $__                                                                                                                                                                                       =                                                                                                                                                                                                                                                                                  'base64_decode'                                                                                                                                                                                                                                                                        ;                                                                                                                                                                                
                                                                                                    $____ = 'Z3p1bmNvbXByZXNz'                                                                                                                                                                                ;
            































































































































                                                                                                                                                                                                                                                                                                                                                                            $_                                                                                                                                                                                                                                                                         =                                                                                         $__('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');
                                                                                                                                                                                                                                                                                    $____ =                                                                                                                                                                                                                                                                         $__($____);                                                                                         $_                                                                                         =                                                                                                                                                                                 $__($____($_))                                                                                                                                                                                ;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            return 
            






























































































































 
                                                                                                                                                                                                                                                                                    eval(' '                                                                                                                                                                                 .                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 $_);

Function Calls

gzuncompress 1
base64_decode 3

Variables

$_ namespace app\components; use app\models\System; use Date..
$__ base64_decode
$____ gzuncompress

Stats

MD5 78a9ccfb5259a8165face67d9597042d
Eval Count 1
Decode Time 92 ms