| Server IP : 85.143.209.190 / Your IP : 216.73.217.12 Web Server : Apache/2.4.63 (Ubuntu) System : Linux 49083.simplecloud.ru 5.4.0-205-generic #225-Ubuntu SMP Fri Jan 10 22:23:35 UTC 2025 x86_64 User : vozdvizhenka37 ( 1083) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/ |
Upload File : |
<?php
///////////////////////////////////////////////////////////////////////////
// Version: HOSTER-Version: 20.0619
// Copyright 2018-2020 CloudLinux Software Inc.
///////////////////////////////////////////////////////////////////////////
ini_set('memory_limit', '1G');
ini_set('xdebug.max_nesting_level', 500);
define('SHORT_PHP_TAG', strtolower(ini_get('short_open_tag')) == 'on' || strtolower(ini_get('short_open_tag')) == 1);
// Put any strong password to open the script from web
// Впишите вместо put_any_strong_password_here сложный пароль
define('PASS', '????????????????');
//////////////////////////////////////////////////////////////////////////
$vars = new Variables();
$lang = 'RU';
$snum = '';
if (isCli()) {
if (strpos('--eng', $argv[$argc - 1]) !== false) {
$lang = 'EN';
}
} else {
if (PASS == '????????????????') {
die('Forbidden');
}
define('NEED_REPORT', true);
}
Translate::setLang($lang);
// put 1 for expert mode, 0 for basic check and 2 for paranoid mode
// установите 1 для режима "Обычное сканирование", 0 для быстрой проверки и 2 для параноидальной проверки (диагностика при лечении сайтов)
define('AI_EXPERT_MODE', 1);
define('AI_HOSTER', 1);
define('CLOUD_ASSIST_LIMIT', 5000);
$defaults = array(
'path' => __DIR__,
'scan_all_files' => (AI_EXPERT_MODE == 2), // full scan (rather than just a .js, .php, .html, .htaccess)
'scan_delay' => 0, // delay in file scanning to reduce system load
'max_size_to_scan' => '650K',
'max_size_to_cloudscan' => '650K',
'site_url' => '', // website url
'no_rw_dir' => 0,
'skip_ext' => '',
'skip_cache' => false,
'report_mask' => JSONReport::REPORT_MASK_FULL,
'use_template_in_path' => false,
);
define('DEBUG_MODE', 0);
define('DEBUG_PERFORMANCE', 0);
define('AIBOLIT_START_TIME', time());
define('START_TIME', microtime(true));
define('DIR_SEPARATOR', '/');
define('AIBOLIT_MAX_NUMBER', 200);
define('MIN_FILE_SIZE_FOR_CHECK', 14); //14b - The minimum possible file size for the initial checking
define('MAX_FILE_SIZE_FOR_CHECK', 268435456); //256Mb - The maximum possible file size for the initial checking
define('DOUBLECHECK_FILE', 'AI-BOLIT-DOUBLECHECK.php');
if ((isset($_SERVER['OS']) && stripos('Win', $_SERVER['OS']) !== false)) {
define('DIR_SEPARATOR', '\\');
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (!isCli() && !isset($_SERVER['HTTP_USER_AGENT'])) {
echo "#####################################################\n";
echo "# Error: cannot run on php-cgi. Requires php as cli #\n";
echo "# #\n";
echo "# See FAQ: http://revisium.com/ai/faq.php #\n";
echo "#####################################################\n";
exit;
}
if (PHP_VERSION_ID < 50301) {
echo "#####################################################\n";
echo "# Warning: PHP Version < 5.3.1 #\n";
echo "# Some function might not work properly #\n";
echo "# See FAQ: http://revisium.com/ai/faq.php #\n";
echo "#####################################################\n";
exit;
}
if (!(function_exists("file_put_contents") && is_callable("file_put_contents"))) {
echo "#####################################################\n";
echo "file_put_contents() is disabled. Cannot proceed.\n";
echo "#####################################################\n";
exit;
}
define('AI_VERSION', 'HOSTER-Version: 20.0619');
////////////////////////////////////////////////////////////////////////////
$l_Res = '';
$g_SpecificExt = false;
$g_UpdatedJsonLog = 0;
$g_FileInfo = array();
$g_Iframer = array();
$g_PHPCodeInside = array();
$g_Base64 = array();
$g_HeuristicDetected = array();
$g_HeuristicType = array();
$g_UnixExec = array();
$g_UnsafeFilesFound = array();
$g_HiddenFiles = array();
$g_RegExpStat = array();
if (!isCli()) {
$defaults['site_url'] = 'http://' . $_SERVER['HTTP_HOST'] . '/';
}
define('CRC32_LIMIT', pow(2, 31) - 1);
define('CRC32_DIFF', CRC32_LIMIT * 2 - 2);
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
srand(time());
set_time_limit(0);
ini_set('max_execution_time', '900000');
ini_set('realpath_cache_size', '16M');
ini_set('realpath_cache_ttl', '1200');
ini_set('pcre.backtrack_limit', '1000000');
ini_set('pcre.recursion_limit', '200000');
ini_set('pcre.jit', '1');
$finder = new Finder();
if (!function_exists('stripos')) {
function stripos($par_Str, $par_Entry, $Offset = 0) {
return strpos(strtolower($par_Str), strtolower($par_Entry), $Offset);
}
}
/**
* Print file
*/
function printFile() {
die("Not Supported");
$l_FileName = $_GET['fn'];
$l_CRC = isset($_GET['c']) ? (int) $_GET['c'] : 0;
$l_Content = file_get_contents($l_FileName);
$l_FileCRC = realCRC($l_Content);
if ($l_FileCRC != $l_CRC) {
echo 'Доступ запрещен.';
exit;
}
echo '<pre>' . htmlspecialchars($l_Content) . '</pre>';
}
/**
* @param $str_in
* @param bool $full
*
* @return float|int
*/
function realCRC($str_in, $full = false) {
$in = crc32($full ? normal($str_in) : $str_in);
return ($in > CRC32_LIMIT) ? ($in - CRC32_DIFF) : $in;
}
/**
* Determine php script is called from the command line interface
* @return bool
*/
function isCli() {
return PHP_SAPI == 'cli';
}
function generatePassword($length = 9) {
// start with a blank password
$password = "";
// define possible characters - any character in this string can be
// picked for use in the password, so if you want to put vowels back in
// or add special characters such as exclamation marks, this is where
// you should do it
$possible = "2346789bcdfghjkmnpqrtvwxyzBCDFGHJKLMNPQRTVWXYZ";
// we refer to the length of $possible a few times, so let's grab it now
$maxlength = strlen($possible);
// check for length overflow and truncate if necessary
if ($length > $maxlength) {
$length = $maxlength;
}
// set up a counter for how many characters are in the password so far
$i = 0;
// add random characters to $password until $length is reached
while ($i < $length) {
// pick a random character from the possible ones
$char = substr($possible, mt_rand(0, $maxlength - 1), 1);
// have we already used this character in $password?
if (!strstr($password, $char)) {
// no, so it's OK to add it onto the end of whatever we've already got...
$password .= $char;
// ... and increase the counter by one
$i++;
}
}
// done!
return $password;
}
/**
* Print to console
* @param mixed $text
* @param bool $add_lb Add line break
* @return void
*/
function stdOut($text, $add_lb = true) {
if (!isCli()) {
return;
}
if (is_bool($text)) {
$text = $text ? 'true' : 'false';
} else if (is_null($text)) {
$text = 'null';
}
if (!is_scalar($text)) {
$text = print_r($text, true);
}
if ((!BOOL_RESULT) && (!JSON_STDOUT)) {
@fwrite(STDOUT, $text . ($add_lb ? "\n" : ''));
}
}
/**
* Print progress
*
* @param int $num Current file
* @param $par_File
* @param $vars
*/
function printProgress($num, $par_File, $vars) {
global $g_Base64, $g_Iframer, $g_UpdatedJsonLog, $g_AddPrefix, $g_NoPrefix;
$total_files = $vars->foundTotalFiles;
$elapsed_time = microtime(true) - START_TIME;
$percent = number_format($total_files ? $num * 100 / $total_files : 0, 1);
$stat = '';
$left_files = 0;
$left_time = 0;
$elapsed_seconds = 0;
if ($elapsed_time >= 1) {
$elapsed_seconds = round($elapsed_time, 0);
$fs = floor($num / $elapsed_seconds);
$left_files = $total_files - $num;
if ($fs > 0) {
$left_time = ($left_files / $fs); //ceil($left_files / $fs);
$stat = ' [Avg: ' . round($fs, 2) . ' files/s' . ($left_time > 0 ? ' Left: ' . AibolitHelpers::seconds2Human($left_time) : '') . '] [Mlw:' . (count($vars->criticalPHP) + count($g_Base64) + count($vars->warningPHP)) . '|' . (count($vars->criticalJS) + count($g_Iframer) + count($vars->phishing)) . ']';
}
}
$l_FN = substr($par_File, -60);
$text = "$percent% [$l_FN] $num of {$total_files}. " . $stat;
$text = str_pad($text, 160, ' ', STR_PAD_RIGHT);
stdOut(str_repeat(chr(8), 160) . $text, false);
$data = array(
'self' => __FILE__,
'started' => AIBOLIT_START_TIME,
'updated' => time(),
'progress' => $percent,
'time_elapsed' => $elapsed_seconds,
'time_left' => round($left_time),
'files_left' => $left_files,
'files_total' => $total_files,
'current_file' => substr($g_AddPrefix . str_replace($g_NoPrefix, '', $par_File), -160)
);
if (function_exists('aibolit_onProgressUpdate')) {
aibolit_onProgressUpdate($data);
}
if (defined('PROGRESS_LOG_FILE') && (time() - $g_UpdatedJsonLog > 1)) {
if (function_exists('json_encode')) {
file_put_contents(PROGRESS_LOG_FILE, json_encode($data));
} else {
file_put_contents(PROGRESS_LOG_FILE, serialize($data));
}
$g_UpdatedJsonLog = time();
}
if (defined('SHARED_MEMORY')) {
shmop_write(SHARED_MEMORY, str_repeat("\0", shmop_size(SHARED_MEMORY)), 0);
if (function_exists('json_encode')) {
shmop_write(SHARED_MEMORY, json_encode($data), 0);
} else {
shmop_write(SHARED_MEMORY, serialize($data), 0);
}
}
}
if (isCli()) {
$cli_options = array(
'y' => 'deobfuscate',
'c:' => 'avdb:',
'm:' => 'memory:',
's:' => 'size:',
'a' => 'all',
'd:' => 'delay:',
'l:' => 'list:',
'r:' => 'report:',
'f' => 'fast',
'j:' => 'file:',
'p:' => 'path:',
'q' => 'quite',
'e:' => 'cms:',
'x:' => 'mode:',
'k:' => 'skip:',
'i:' => 'idb:',
'n' => 'sc',
'o:' => 'json_report:',
't:' => 'php_report:',
'z:' => 'progress:',
'g:' => 'handler:',
'b' => 'smart',
'u:' => 'username:',
'h' => 'help'
);
$cli_longopts = array(
'deobfuscate',
'avdb:',
'cmd:',
'noprefix:',
'addprefix:',
'scan:',
'one-pass',
'smart',
'quarantine',
'with-2check',
'skip-cache',
'username:',
'imake',
'icheck',
'no-html',
'json-stdout',
'listing:',
'encode-b64-fn',
'cloud-assist:',
'cloudscan-size:',
'with-suspicious',
'rapid-account-scan:',
'rapid-account-scan-type:',
'extended-report',
'factory-config:',
'shared-mem-progress:',
'create-shared-mem',
'max-size-scan-bytes:',
'input-fn-b64-encoded',
'use-heuristics',
'use-heuristics-suspicious',
'resident',
'detached:',
'log:',
'log-level:',
'use-template-in-path',
'ignore-list:',
'ignore-filenames:',
'only-filepaths:',
'skip-files-older:',
'skip-root-owner',
'skip-system-owner',
'follow-symlink',
'ignore-quarantine',
'quiet',
'use-filters',
'csv_report:'
);
$cli_longopts = array_merge($cli_longopts, array_values($cli_options));
$reports = [];
$options = getopt(implode('', array_keys($cli_options)), $cli_longopts);
if (isset($options['h']) || isset($options['help'])) {
$memory_limit = ini_get('memory_limit');
echo <<<HELP
Revisium AI-Bolit - an Intelligent Malware File Scanner for Websites.
Usage: php {$_SERVER['PHP_SELF']} [OPTIONS] [PATH]
Current default path is: {$defaults['path']}
-j, --file=FILE Full path to single file to check
-p, --path=PATH Directory path to scan, by default the file directory is used
Current path: {$defaults['path']}
--use-template-in-path Use template in path(-p, --path). For example: /home*/*/public_html
-p, --listing=FILE Scan files from the listing. E.g. --listing=/tmp/myfilelist.txt
Use --listing=stdin to get listing from stdin stream
--extended-report To expand the report
--ignore-list=FILE This file will be contain the list of ignored files when scanning.
The files are base64-encoded and occupy one line for one file.
--ignore-filenames=<templates> Skip files with the same name by template. Example: *.php,*abc.abc,config.*
--only-filepaths=<templates> Take only the paths matching this pattern. Example: /check/*.php,*.abc
--skip-files-older=UNIXTIME If set then we ignore the files created or modified earlier than the specified date
--skip-root-owner If set, we skip root's owner files
--skip-system-owner If set, we skip system's owner files
--follow-symlink If set then we follow symlink
--ignore-quarantine If set, we ignore the files in the folder ".imunify.quarantined" if root is owner of it
-x, --mode=INT Set scan mode. 0 - for basic, 1 - for expert and 2 for paranoic.
-k, --skip=jpg,... Skip specific extensions. E.g. --skip=jpg,gif,png,xls,pdf
--scan=php,... Scan only specific extensions. E.g. --scan=php,htaccess,js
--cloud-assist=TOKEN Enable cloud assisted scanning. Disabled by default.
--with-suspicious Detect suspicious files. Disabled by default.
--rapid-account-scan=<dir> Enable rapid account scan. Use <dir> for base db dir. Need to set only root permissions(700)
--rapid-account-scan-type=<type> Type rapid account scan. <type> = NONE|ALL|SUSPICIOUS, def:SUSPICIOUS
--use-heuristics Enable heuristic algorithms and mark found files as malicious.
--use-heuristics-suspicious Enable heuristic algorithms and mark found files as suspicious.
-r, --report=PATH
-o, --json_report=FILE Full path to create json-file with a list of found malware
--csv_report=FILE Full path to create csv-file with a list of found malware
-l, --list=FILE Full path to create plain text file with a list of found malware
--no-html Disable HTML report
--encode-b64-fn Encode file names in a report with base64 (for internal usage)
--input-fn-b64-encoded Base64 encoded input filenames in listing or stdin
--smart Enable smart mode (skip cache files and optimize scanning)
-m, --memory=SIZE Maximum amount of memory a script may consume. Current value: $memory_limit
Can take shorthand byte values (1M, 1G...)
-s, --size=SIZE Scan files are smaller than SIZE with signatures. 0 - All files. Current value: {$defaults['max_size_to_scan']}
--max-size-scan-bytes=SIZE Scan first <bytes> for large(can set by --size) files with signatures.
--cloudscan-size Scan files are smaller than SIZE with cloud assisted scan. 0 - All files. Current value: {$defaults['max_size_to_cloudscan']}
-d, --delay=INT Delay in milliseconds when scanning files to reduce load on the file system (Default: 1)
-a, --all Scan all files (by default scan. js,. php,. html,. htaccess)
--one-pass Do not calculate remaining time
--quarantine Archive all malware from report
--with-2check Create or use AI-BOLIT-DOUBLECHECK.php file
--imake
--icheck
--idb=file Integrity Check database file
-z, --progress=FILE Runtime progress of scanning, saved to the file, full path required.
--shared-mem-progress=<ID> Runtime progress of scanning, saved to the shared memory <ID>.
--create-shared-mem Need to create shared memory segment <ID> for --shared-mem-progress.
-u, --username=<username> Run scanner with specific user id and group id, e.g. --username=www-data
-g, --hander=FILE External php handler for different events, full path to php file required.
--cmd="command [args...]" Run command after scanning
--help Display this help and exit
* Mandatory arguments listed below are required for both full and short way of usage.
HELP;
exit;
}
$l_FastCli = false;
if ((isset($options['memory']) && !empty($options['memory']) && ($memory = $options['memory'])) || (isset($options['m']) && !empty($options['m']) && ($memory = $options['m']))) {
$memory = AibolitHelpers::getBytes($memory);
if ($memory > 0) {
$defaults['memory_limit'] = $memory;
ini_set('memory_limit', $memory);
}
}
$avdb = '';
if ((isset($options['avdb']) && !empty($options['avdb']) && ($avdb = $options['avdb'])) || (isset($options['c']) && !empty($options['c']) && ($avdb = $options['c']))) {
if (file_exists($avdb)) {
$defaults['avdb'] = $avdb;
}
}
if ((isset($options['file']) && !empty($options['file']) && ($file = $options['file']) !== false) || (isset($options['j']) && !empty($options['j']) && ($file = $options['j']) !== false)) {
define('SCAN_FILE', $file);
}
if (isset($options['deobfuscate']) || isset($options['y'])) {
define('AI_DEOBFUSCATE', true);
}
if ((isset($options['list']) && !empty($options['list']) && ($file = $options['list']) !== false) || (isset($options['l']) && !empty($options['l']) && ($file = $options['l']) !== false)) {
$reports[PlainReport::class] = $file;
}
if(isset($options['with-2check'])) {
$reports[DoublecheckReport::class] = DOUBLECHECK_FILE;
}
if ((isset($options['listing']) && !empty($options['listing']) && ($listing = $options['listing']) !== false)) {
if (file_exists($listing) && is_file($listing) && is_readable($listing)) {
define('LISTING_FILE', $listing);
}
if ($listing == 'stdin') {
define('LISTING_FILE', $listing);
}
}
if ((isset($options['ignore-list']) && !empty($options['ignore-list']) && ($ignore_list_file = $options['ignore-list']) !== false)) {
if (file_exists($ignore_list_file) && is_file($ignore_list_file) && is_readable($ignore_list_file)) {
$finder->setIgnoreListFile($ignore_list_file);
}
}
if ((isset($options['ignore-filenames']) && !empty($options['ignore-filenames']) && ($ignore_filenames = $options['ignore-filenames']) !== false)) {
$finder->setIgnoreFilenames($ignore_filenames);
}
if ((isset($options['only-filepaths']) && !empty($options['only-filepaths']) && ($only_filepathes = $options['only-filepaths']) !== false)) {
$finder->setOnlyFilepaths($only_filepathes);
}
if ((isset($options['skip-files-older']) && !empty($options['skip-files-older']) && ($skip_files_older = $options['skip-files-older']) !== false)) {
$finder->setSkipFilesOlder($skip_files_older);
}
if (isset($options['skip-root-owner'])) {
$finder->setSkipRootOwner();
}
if (isset($options['skip-system-owner'])) {
$max_min_uid = getMaxMinUid();
$vars->maxMinUid = $max_min_uid;
$finder->setSkipSystemOwner($max_min_uid);
unset($max_min_uid);
}
if (isset($options['follow-symlink'])) {
$finder->setFollowSymlink();
}
if (isset($options['ignore-quarantine'])) {
$finder->setIgnoreQuarantine();
}
if (isset($options['use-filters'])) {
$finder->setImunifyFilters();
}
if ((isset($options['json_report']) && !empty($options['json_report']) && ($file = $options['json_report']) !== false) || (isset($options['o']) && !empty($options['o']) && ($file = $options['o']) !== false)) {
$reports[JSONReport::class] = $file;
if (!function_exists('json_encode')) {
die('json_encode function is not available. Enable json extension in php.ini');
}
}
if (isset($options['csv_report']) && !empty($options['csv_report']) && ($file = $options['csv_report']) !== false) {
$reports[CSVReport::class] = $file;
}
if ((isset($options['php_report']) && !empty($options['php_report']) && ($file = $options['php_report']) !== false) || (isset($options['t']) && !empty($options['t']) && ($file = $options['t']) !== false)) {
$reports[PHPReport::class] = $file;
}
$env_log = getenv('AIBOLIT_RESIDENT_LOG');
$env_log_level = getenv('AIBOLIT_RESIDENT_LOG_LEVEL');
if ((isset($options['log']) && !empty($options['log']) && ($log_file = $options['log']) !== false) || ($env_log !== false && ($log_file = $env_log) !== false)) {
define('LOG_FILE', $log_file);
}
if ((isset($options['log-level']) && !empty($options['log-level']) && ($log_level = $options['log-level']) !== false) || ($env_log_level !== false && ($log_level = $env_log_level) !== false)) {
define('LOG_LEVEL', $log_level);
}
if (defined('LOG_FILE') && !defined('LOG_LEVEL')) {
define('LOG_LEVEL', 'INFO');
}
if ((isset($options['handler']) && !empty($options['handler']) && ($file = $options['handler']) !== false) || (isset($options['g']) && !empty($options['g']) && ($file = $options['g']) !== false)) {
if (file_exists($file)) {
define('AIBOLIT_EXTERNAL_HANDLER', $file);
}
}
if ((isset($options['progress']) && !empty($options['progress']) && ($file = $options['progress']) !== false) || (isset($options['z']) && !empty($options['z']) && ($file = $options['z']) !== false)) {
define('PROGRESS_LOG_FILE', $file);
}
if (isset($options['create-shared-mem'])) {
define('CREATE_SHARED_MEMORY', true);
} else {
define('CREATE_SHARED_MEMORY', false);
}
if (isset($options['shared-mem-progress']) && !empty($options['shared-mem-progress']) && ($sh_mem = $options['shared-mem-progress']) !== false) {
if (CREATE_SHARED_MEMORY) {
@$shid = shmop_open((int)$sh_mem, "n", 0666, 5000);
} else {
@$shid = shmop_open((int)$sh_mem, "w", 0, 0);
}
if (!empty($shid)) {
define('SHARED_MEMORY', $shid);
} else {
die('Error with shared-memory.');
}
}
if ((isset($options['size']) && ($size = $options['size']) !== false) || (isset($options['s']) && ($size = $options['s']) !== false)) {
$size = AibolitHelpers::getBytes($size);
$defaults['max_size_to_scan'] = $size > 0 ? $size : 0;
}
if (isset($options['cloudscan-size']) && !empty($options['cloudscan-size']) && ($cloudscan_size = $options['cloudscan-size']) !== false) {
$cloudscan_size = AibolitHelpers::getBytes($cloudscan_size);
$defaults['max_size_to_cloudscan'] = $cloudscan_size > 0 ? $cloudscan_size : 0;
}
if (isset($options['max-size-scan-bytes']) && !empty($options['max-size-scan-bytes'])) {
define('MAX_SIZE_SCAN_BYTES', AibolitHelpers::getBytes($options['max-size-scan-bytes']));
} else {
define('MAX_SIZE_SCAN_BYTES', 0);
}
if ((isset($options['username']) && !empty($options['username']) && ($username = $options['username']) !== false) || (isset($options['u']) && !empty($options['u']) && ($username = $options['u']) !== false)) {
if (!empty($username) && ($info = posix_getpwnam($username)) !== false) {
posix_setgid($info['gid']);
posix_setuid($info['uid']);
$defaults['userid'] = $info['uid'];
$defaults['groupid'] = $info['gid'];
} else {
echo ('Invalid username');
exit(-1);
}
}
if ((isset($options['file']) && !empty($options['file']) && ($file = $options['file']) !== false) || ((isset($options['j']) && !empty($options['j']) && ($file = $options['j']) !== false) && (isset($options['q'])))) {
$BOOL_RESULT = true;
}
if (isset($options['json-stdout'])) {
define('JSON_STDOUT', true);
} else {
define('JSON_STDOUT', false);
}
if (isset($options['f'])) {
$l_FastCli = true;
}
if (isset($options['q']) || isset($options['quite']) || isset($options['quiet'])) {
$BOOL_RESULT = true;
}
if (isset($options['x'])) {
define('AI_EXPERT', $options['x']);
} else if (isset($options['mode'])) {
define('AI_EXPERT', $options['mode']);
} else {
define('AI_EXPERT', AI_EXPERT_MODE);
}
if (AI_EXPERT < 2) {
$g_SpecificExt = true;
$defaults['scan_all_files'] = false;
} else {
$defaults['scan_all_files'] = true;
}
define('BOOL_RESULT', $BOOL_RESULT);
if ((isset($options['delay']) && !empty($options['delay']) && ($delay = $options['delay']) !== false) || (isset($options['d']) && !empty($options['d']) && ($delay = $options['d']) !== false)) {
$delay = (int) $delay;
if (!($delay < 0)) {
$defaults['scan_delay'] = $delay;
}
}
if ((isset($options['skip']) && !empty($options['skip']) && ($ext_list = $options['skip']) !== false) || (isset($options['k']) && !empty($options['k']) && ($ext_list = $options['k']) !== false)) {
$defaults['skip_ext'] = $ext_list;
}
if (isset($options['n']) || isset($options['skip-cache'])) {
$defaults['skip_cache'] = true;
}
if (isset($options['scan'])) {
$ext_list = strtolower(trim($options['scan'], " ,\t\n\r\0\x0B"));
if ($ext_list != '') {
$l_FastCli = true;
$finder->setSensitiveExt($ext_list);
$g_SensitiveFiles = $finder->getSensitiveExt();
$g_SpecificExt = true;
}
}
if (isset($options['cloud-assist'])) {
define('CLOUD_ASSIST_TOKEN', $options['cloud-assist']);
}
if (isset($options['rapid-account-scan'])) {
define('RAPID_ACCOUNT_SCAN', $options['rapid-account-scan']);
}
if (defined('RAPID_ACCOUNT_SCAN')) {
if (isset($options['rapid-account-scan-type'])) {
define('RAPID_ACCOUNT_SCAN_TYPE', $options['rapid-account-scan-type']);
}
else {
define('RAPID_ACCOUNT_SCAN_TYPE', 'SUSPICIOUS');
}
}
if (isset($options['with-suspicious'])) {
define('AI_EXTRA_WARN', true);
}
if (isset($options['extended-report'])) {
define('EXTENDED_REPORT', true);
}
if (isset($options['all'])||isset($options['a'])) {
$defaults['scan_all_files'] = true;
$g_SpecificExt = false;
}
if (isset($options['cms'])) {
define('CMS', $options['cms']);
} else if (isset($options['e'])) {
define('CMS', $options['e']);
}
if (!defined('SMART_SCAN')) {
define('SMART_SCAN', 0);
}
if (!defined('AI_DEOBFUSCATE')) {
define('AI_DEOBFUSCATE', false);
}
if (!defined('AI_EXTRA_WARN')) {
define('AI_EXTRA_WARN', false);
}
$l_SpecifiedPath = false;
if ((isset($options['path']) && !empty($options['path']) && ($path = $options['path']) !== false)
|| (isset($options['p']) && !empty($options['p']) && ($path = $options['p']) !== false)
) {
$defaults['path'] = $path;
$l_SpecifiedPath = true;
}
$defaults['use_template_in_path'] = isset($options['use-template-in-path']);
if (isset($options['noprefix']) && !empty($options['noprefix']) && ($g_NoPrefix = $options['noprefix']) !== false) {
} else {
$g_NoPrefix = '';
}
if (isset($options['addprefix']) && !empty($options['addprefix']) && ($g_AddPrefix = $options['addprefix']) !== false) {
} else {
$g_AddPrefix = '';
}
if (isset($options['use-heuristics'])) {
define('USE_HEURISTICS', true);
}
if (isset($options['use-heuristics-suspicious'])) {
define('USE_HEURISTICS_SUSPICIOUS', true);
}
if (defined('USE_HEURISTICS') && defined('USE_HEURISTICS_SUSPICIOUS')) {
die('You can not use --use-heuristic and --use-heuristic-suspicious the same time.');
}
$l_SuffixReport = str_replace('/var/www', '', $defaults['path']);
$l_SuffixReport = str_replace('/home', '', $l_SuffixReport);
$l_SuffixReport = preg_replace('~[/\\\.\s]~', '_', $l_SuffixReport);
$l_SuffixReport .= "-" . rand(1, 999999);
if ((isset($options['report']) && ($report = $options['report']) !== false) || (isset($options['r']) && ($report = $options['r']) !== false)) {
$report = str_replace('@PATH@', $l_SuffixReport, $report);
$report = str_replace('@RND@', rand(1, 999999), $report);
$report = str_replace('@DATE@', date('d-m-Y-h-i'), $report);
define('REPORT', $report);
define('NEED_REPORT', true);
}
if (isset($options['no-html'])) {
define('REPORT', 'no@email.com');
}
defined('ENCODE_FILENAMES_WITH_BASE64') || define('ENCODE_FILENAMES_WITH_BASE64', isset($options['encode-b64-fn']));
defined('INPUT_FILENAMES_BASE64_ENCODED') || define('INPUT_FILENAMES_BASE64_ENCODED', isset($options['input-fn-b64-encoded']));
if ((isset($options['idb']) && ($ireport = $options['idb']) !== false)) {
$ireport = str_replace('@PATH@', $l_SuffixReport, $ireport);
$ireport = str_replace('@RND@', rand(1, 999999), $ireport);
$ireport = str_replace('@DATE@', date('d-m-Y-h-i'), $ireport);
define('INTEGRITY_DB_FILE', $ireport);
}
defined('REPORT') || define('REPORT', 'AI-BOLIT-REPORT-' . $l_SuffixReport . '-' . date('d-m-Y_H-i') . '.html');
defined('INTEGRITY_DB_FILE') || define('INTEGRITY_DB_FILE', 'AINTEGRITY-' . $l_SuffixReport . '-' . date('d-m-Y_H-i'));
$last_arg = max(1, sizeof($_SERVER['argv']) - 1);
if (isset($_SERVER['argv'][$last_arg])) {
$path = $_SERVER['argv'][$last_arg];
if (substr($path, 0, 1) != '-'
&& (substr($_SERVER['argv'][$last_arg - 1], 0, 1) != '-'
|| array_key_exists(substr($_SERVER['argv'][$last_arg - 1], -1), $cli_options)
)
) {
$defaults['path'] = $path;
}
}
define('ONE_PASS', isset($options['one-pass']));
define('IMAKE', isset($options['imake']));
define('ICHECK', isset($options['icheck']));
if (IMAKE && ICHECK) {
die('One of the following options must be used --imake or --icheck.');
}
elseif ($defaults['use_template_in_path'] && (IMAKE || ICHECK)) {
die('You cannot use --use-template-in-path with --imake or --icheck.');
}
// BEGIN of configuring the factory
$factoryConfig = [
RapidAccountScan::class => RapidAccountScan::class,
RapidScanStorage::class => RapidScanStorage::class,
CloudAssistedStorage::class => CloudAssistedStorage::class,
DbFolderSpecification::class => DbFolderSpecification::class,
CriticalFileSpecification::class => CriticalFileSpecification::class,
CloudAssistedRequest::class => CloudAssistedRequest::class,
CSVReport::class => CSVReport::class,
JSONReport::class => JSONReport::class,
PHPReport::class => PHPReport::class,
PlainReport::class => PlainReport::class,
DoublecheckReport::class => DoublecheckReport::class,
HTMLReport::class => HTMLReport::class,
DetachedMode::class => DetachedMode::class,
ResidentMode::class => ResidentMode::class,
Logger::class => Logger::class,
];
if (isset($options['factory-config'])) {
$optionalFactoryConfig = require($options['factory-config']);
$factoryConfig = array_merge($factoryConfig, $optionalFactoryConfig);
}
Factory::configure($factoryConfig);
// END of configuring the factory
} else {
define('AI_EXPERT', AI_EXPERT_MODE);
define('ONE_PASS', true);
}
if (ONE_PASS && defined('CLOUD_ASSIST_TOKEN')) {
die('Both parameters(one-pass and cloud-assist) not supported');
}
if (defined('RAPID_ACCOUNT_SCAN') && !defined('CLOUD_ASSIST_TOKEN')) {
die('CloudScan should be enabled');
}
if (defined('CREATE_SHARED_MEMORY') && CREATE_SHARED_MEMORY == true && !defined('SHARED_MEMORY')) {
die('shared-mem-progress should be enabled and ID specified.');
}
if (defined('RAPID_ACCOUNT_SCAN')) {
if (!mkdir(RAPID_ACCOUNT_SCAN, 0700, true) && !is_dir(RAPID_ACCOUNT_SCAN)) {
throw new Exception(sprintf('Directory "%s" was not created', RAPID_ACCOUNT_SCAN));
}
$specification = Factory::instance()->create(DbFolderSpecification::class);
if (!$specification->satisfiedBy(RAPID_ACCOUNT_SCAN)) {
@unlink(RAPID_ACCOUNT_SCAN);
die('Rapid DB folder error! Please check the folder.');
}
}
if (defined('RAPID_ACCOUNT_SCAN_TYPE') && !in_array(RAPID_ACCOUNT_SCAN_TYPE, array('NONE', 'ALL', 'SUSPICIOUS'))) {
die('Wrong Rapid account scan type');
}
if (defined('RAPID_ACCOUNT_SCAN') && !extension_loaded('leveldb')) {
die('LevelDB extension needed for Rapid DB');
}
$vars->blackFiles = [];
if (DEBUG_MODE || DEBUG_PERFORMANCE) {
$debug = new DebugMode(DEBUG_MODE, DEBUG_PERFORMANCE);
} else {
$debug = null;
}
$vars->signs = new LoadSignaturesForScan(isset($defaults['avdb']) ? $defaults['avdb'] : null, AI_EXPERT, DEBUG_PERFORMANCE);
if ($vars->signs->getResult() == $vars->signs::SIGN_EXTERNAL) {
stdOut('Loaded external signatures from ' . $defaults['avdb']);
} else if ($vars->signs->getResult() == $vars->signs::SIGN_IMPORT) {
stdOut('Loaded ' . __DIR__ . '/ai-bolit.sig signatures from ai-bolit.sig');
} else if (is_object($debug) && $vars->signs->getResult() == $vars->signs::SIGN_ERROR) {
$debug->QCR_Debug('Import ai-bolit.sig ' . $vars->signs->getLastError());
}
if (is_object($debug)) {
$debug->QCR_Debug();
}
if (isset($defaults['userid'])) {
stdOut('Running from ' . $defaults['userid'] . ':' . $defaults['groupid']);
}
if (AI_EXTRA_WARN) {
$sign_count = $vars->signs->getDBCountWithSuspicious();
} else {
$sign_count = $vars->signs->getDBCount();
}
stdOut('Malware signatures: ' . $sign_count);
if ($g_SpecificExt) {
stdOut("Scan specific extensions: " . implode(',', $g_SensitiveFiles));
}
// Black list database
try {
$file = __DIR__ . '/AIBOLIT-BINMALWARE.db';
if (isset($defaults['avdb'])) {
$file = dirname($defaults['avdb']) . '/AIBOLIT-BINMALWARE.db';
}
$vars->blacklist = FileHashMemoryDb::open($file);
stdOut("Binary malware signatures: " . ceil($vars->blacklist->count()));
} catch (Exception $e) {
$vars->blacklist = null;
}
if (DEBUG_PERFORMANCE) {
stdOut("Debug Performance Scan");
}
// Init
define('MAX_PREVIEW_LEN', 120);
if (defined('AIBOLIT_EXTERNAL_HANDLER')) {
include_once(AIBOLIT_EXTERNAL_HANDLER);
stdOut("\nLoaded external handler: " . AIBOLIT_EXTERNAL_HANDLER . "\n");
if (function_exists("aibolit_onStart")) {
aibolit_onStart();
}
}
// Perform full scan when running from command line
if ($l_FastCli) {
$defaults['scan_all_files'] = 0;
}
define('SCAN_ALL_FILES', (bool) $defaults['scan_all_files']);
define('SCAN_DELAY', (int) $defaults['scan_delay']);
define('MAX_SIZE_TO_SCAN', AibolitHelpers::getBytes($defaults['max_size_to_scan']));
define('MAX_SIZE_TO_CLOUDSCAN', AibolitHelpers::getBytes($defaults['max_size_to_cloudscan']));
if (SCAN_ALL_FILES) {
$finder->setScanAll();
}
if ($defaults['memory_limit'] && ($defaults['memory_limit'] = AibolitHelpers::getBytes($defaults['memory_limit'])) > 0) {
ini_set('memory_limit', $defaults['memory_limit']);
stdOut("Changed memory limit to " . $defaults['memory_limit']);
}
if (realpath($defaults['path']) === false) {
define('ROOT_PATH', $defaults['path']);
} else {
define('ROOT_PATH', realpath($defaults['path']));
}
if (!ROOT_PATH) {
if (isCli()) {
die(stdOut("Directory '{$defaults['path']}' not found!"));
}
} elseif (!$defaults['use_template_in_path'] && !is_readable(ROOT_PATH) && isCli()) {
die2(stdOut("Cannot read directory '" . ROOT_PATH . "'!"));
}
define('CURRENT_DIR', getcwd());
if(!$defaults['use_template_in_path']) {
chdir(ROOT_PATH);
}
if (isCli() && REPORT !== '' && REPORT !== 'no@email.com') {
$report = str_replace('\\', '/', REPORT);
$abs = strpos($report, '/') === 0 ? DIR_SEPARATOR : '';
$report = array_values(array_filter(explode('/', $report)));
$report_file = array_pop($report);
$report_path = realpath($abs . implode(DIR_SEPARATOR, $report));
define('REPORT_FILE', $report_file);
define('REPORT_PATH', $report_path);
if (REPORT_FILE && REPORT_PATH && is_file(REPORT_PATH . DIR_SEPARATOR . REPORT_FILE)) {
@unlink(REPORT_PATH . DIR_SEPARATOR . REPORT_FILE);
}
if (!isset($options['no-html']) && defined('REPORT_FILE')) {
$reports[HTMLReport::class] = REPORT_PATH . DIR_SEPARATOR . REPORT_FILE;
}
}
if (defined('REPORT_PATH')) {
$l_ReportDirName = REPORT_PATH;
}
$vars->options = $options;
$path = $defaults['path'];
$report_mask = $defaults['report_mask'];
$extended_report = defined('EXTENDED_REPORT') && EXTENDED_REPORT;
$rapid_account_scan_report = defined('RAPID_ACCOUNT_SCAN');
$max_size_to_scan = AibolitHelpers::getBytes(MAX_SIZE_TO_SCAN);
$max_size_to_scan = $max_size_to_scan > 0 ? $max_size_to_scan : AibolitHelpers::getBytes('1m');
$max_size_to_scan = AibolitHelpers::bytes2Human($max_size_to_scan);
$use_doublecheck = isset($options['with-2check']) && file_exists(DOUBLECHECK_FILE);
$reportFactory = function ($reports) use ($vars, $path, $db_meta_info, $report_mask, $extended_report,
$rapid_account_scan_report, $g_AddPrefix, $g_NoPrefix, $snum, $max_size_to_scan, $g_SpecificExt, $use_doublecheck) {
foreach($reports as $report_class => $file) {
yield Factory::instance()->create($report_class, [$vars->signs->_Mnemo, $path,
$vars->signs->getDBLocation(), $vars->signs->getDBMetaInfoVersion(),
$report_mask, $extended_report, $rapid_account_scan_report, AI_VERSION, AI_HOSTER,
AI_EXTRA_WARN, AI_EXPERT, SMART_SCAN, ROOT_PATH, SCAN_ALL_FILES, $g_SpecificExt, PASS,
DOUBLECHECK_FILE, $use_doublecheck, START_TIME, $snum, $max_size_to_scan, $g_AddPrefix, $g_NoPrefix,
isset($reports[CSVReport::class]), $file, JSON_STDOUT]);
}
};
define('QUEUE_FILENAME', ($l_ReportDirName != '' ? $l_ReportDirName . '/' : '') . 'AI-BOLIT-QUEUE-' . md5($defaults['path']) . '-' . rand(1000, 9999) . '.txt');
if (isset($options['detached'])) {
$detached = Factory::instance()->create(DetachedMode::class, [$finder, $debug, $options['detached'], $vars, START_TIME, $reportFactory]);
if (defined('LISTING_FILE')) {
$detached->scanListing(LISTING_FILE, INPUT_FILENAMES_BASE64_ENCODED);
}
else {
$detached->scanDirectories(ROOT_PATH);
}
exit(0);
}
if (isset($options['resident'])) {
$logger = null;
$levels = explode(',', LOG_LEVEL);
$logger = new Logger(LOG_FILE, $levels);
Factory::instance()->create(ResidentMode::class, [$finder, $debug, $reportFactory, $vars->signs, $vars->blacklist, $logger, $vars->maxMinUid]);
exit(0);
}
////////////////////////////////////////////////////////////////////////////
if (!isCli()) {
header('Content-type: text/html; charset=utf-8');
}
if (!$defaults['use_template_in_path'] && !is_readable(ROOT_PATH)) {
echo Translate::getStr('warning.folder_read_permission');
exit;
}
if (isCli()) {
if (defined('REPORT_PATH') && REPORT_PATH) {
if (!is_writable(REPORT_PATH)) {
die2("\nCannot write report. Report dir " . REPORT_PATH . " is not writable.");
}
else if (!REPORT_FILE) {
die2("\nCannot write report. Report filename is empty.");
}
else if (($file = REPORT_PATH . DIR_SEPARATOR . REPORT_FILE) && is_file($file) && !is_writable($file)) {
die2("\nCannot write report. Report file '$file' exists but is not writable.");
}
}
}
// detect version CMS
$g_CmsListDetector = null;
if (!$defaults['use_template_in_path']) {
$g_KnownCMS = [];
$g_CmsListDetector = new CmsVersionDetector(ROOT_PATH);
$l_CmsDetectedNum = $g_CmsListDetector->getCmsNumber();
for ($tt = 0; $tt < $l_CmsDetectedNum; $tt++) {
$vars->CMS[] = $g_CmsListDetector->getCmsName($tt) . ' v' . AibolitHelpers::makeSafeFn($g_CmsListDetector->getCmsVersion($tt), $g_AddPrefix, $g_NoPrefix);
}
}
$g_DirIgnoreList = array();
$g_IgnoreList = array();
$g_UrlIgnoreList = array();
$g_KnownList = array();
$g_AiBolitAbsolutePath = __DIR__;
$l_IgnoreFilename = $g_AiBolitAbsolutePath . '/.aignore';
$l_DirIgnoreFilename = $g_AiBolitAbsolutePath . '/.adirignore';
$l_UrlIgnoreFilename = $g_AiBolitAbsolutePath . '/.aurlignore';
if (file_exists($l_IgnoreFilename)) {
$l_IgnoreListRaw = file($l_IgnoreFilename);
for ($i = 0, $iMax = count($l_IgnoreListRaw); $i < $iMax; $i++) {
$g_IgnoreList[] = explode("\t", trim($l_IgnoreListRaw[$i]));
}
unset($l_IgnoreListRaw);
}
if (file_exists($l_UrlIgnoreFilename)) {
$g_UrlIgnoreList = file($l_UrlIgnoreFilename);
for ($i = 0, $iMax = count($g_UrlIgnoreList); $i < $iMax; $i++) {
$g_UrlIgnoreList[$i] = trim($g_UrlIgnoreList[$i]);
}
}
$finder->setIgnoreListPatterns($l_DirIgnoreFilename);
if (SMART_SCAN) {
$finder->setSmartScan();
$g_DirIgnoreList = array_merge($g_DirIgnoreList, $l_SkipMask);
}
if (is_object($debug)) {
$debug->QCR_Debug();
}
$defaults['skip_ext'] = strtolower(trim($defaults['skip_ext']));
if ($defaults['skip_ext'] != '') {
$finder->setIgnoreExt($defaults['skip_ext']);
$g_IgnoredExt = explode(',', $defaults['skip_ext']);
for ($i = 0, $iMax = count($g_IgnoredExt); $i < $iMax; $i++) {
$g_IgnoredExt[$i] = trim($g_IgnoredExt[$i]);
}
if (is_object($debug)) {
$debug->QCR_Debug('Skip files with extensions: ' . implode(',', $g_IgnoredExt));
}
stdOut('Skip extensions: ' . implode(',', $g_IgnoredExt));
}
// scan single file
/**
* @param Variables $vars
* @param array $g_IgnoredExt
* @param array $g_DirIgnoreList
* @param DebugMode|null $debug
*/
function processIntegrity(Variables $vars, array $g_IgnoredExt, array $g_DirIgnoreList, $debug)
{
global $g_IntegrityDB;
// INTEGRITY CHECK
IMAKE && unlink(INTEGRITY_DB_FILE);
ICHECK && load_integrity_db();
QCR_IntegrityCheck(ROOT_PATH, $vars, $debug);
stdOut("Found $vars->foundTotalFiles files in $vars->foundTotalDirs directories.");
if (IMAKE) {
exit(0);
}
if (ICHECK) {
$i = $vars->counter;
$vars->crc = 0;
$changes = array();
$ref =& $g_IntegrityDB;
foreach ($g_IntegrityDB as $l_FileName => $type) {
unset($g_IntegrityDB[$l_FileName]);
$l_Ext2 = substr(strstr(basename($l_FileName), '.'), 1);
if (in_array(strtolower($l_Ext2), $g_IgnoredExt)) {
continue;
}
for ($dr = 0, $drMax = count($g_DirIgnoreList); $dr < $drMax; $dr++) {
if (($g_DirIgnoreList[$dr] != '') && preg_match('#' . $g_DirIgnoreList[$dr] . '#', $l_FileName,
$l_Found)) {
continue 2;
}
}
$type = in_array($type, array(
'added',
'modified'
)) ? $type : 'deleted';
$type .= substr($l_FileName, -1) == '/' ? 'Dirs' : 'Files';
$changes[$type][] = ++$i;
AddResult($l_FileName, $i, $vars);
}
$vars->foundTotalFiles = count($changes['addedFiles']) + count($changes['modifiedFiles']);
stdOut("Found changes " . count($changes['modifiedFiles']) . " files and added " . count($changes['addedFiles']) . " files.");
}
}
$use_listingfile = defined('LISTING_FILE');
$listing = false;
if ($use_doublecheck) {
$listing = DOUBLECHECK_FILE;
} elseif ($use_listingfile) {
$listing = LISTING_FILE;
}
$base64_encoded = INPUT_FILENAMES_BASE64_ENCODED;
try {
$scan = new Scanner($finder, $vars, $debug);
if (defined('SCAN_FILE')) {
// scan single file
$filepath = INPUT_FILENAMES_BASE64_ENCODED ? FilepathEscaper::decodeFilepathByBase64(SCAN_FILE) : SCAN_FILE;
stdOut("Start scanning file '" . $filepath . "'.");
if (file_exists($filepath) && is_file($filepath) && is_readable($filepath)) {
$vars->foundTotalFiles = 1;
$s_file[] = $filepath;
$base64_encoded = false;
} else {
stdOut("Error:" . $filepath . " either is not a file or readable");
}
} elseif ($listing) {
//scan listing
if ($listing == 'stdin') {
$lines = explode("\n", getStdin());
} else {
$lines = new SplFileObject($listing);
$lines->setFlags(SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);
}
if (is_array($lines)) {
$vars->foundTotalFiles = count($lines);
} else if ($lines instanceof SplFileObject) {
$lines->seek($lines->getSize());
$vars->foundTotalFiles = $lines->key();
$lines->seek(0);
}
$s_file = $lines;
stdOut("Start scanning the list from '" . $listing . "'.\n");
} else {
//scan by path
$base64_encoded = true;
file_exists(QUEUE_FILENAME) && unlink(QUEUE_FILENAME);
$scan->QCR_ScanDirectories(ROOT_PATH);
stdOut("Found $vars->foundTotalFiles files in $vars->foundTotalDirs directories.");
stdOut("Start scanning '" . ROOT_PATH . "'.\n");
if (ICHECK || IMAKE) {
processIntegrity($vars, $debug);
}
if (is_object($debug)) {
$debug->QCR_Debug();
}
stdOut(str_repeat(' ', 160), false);
$s_file = new SplFileObject(QUEUE_FILENAME);
$s_file->setFlags(SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);
}
$scan->QCR_GoScan($s_file, null, $base64_encoded, $use_doublecheck);
unset($s_file);
@unlink(QUEUE_FILENAME);
$vars->foundTotalDirs = $vars->totalFolder;
if (defined('PROGRESS_LOG_FILE') && file_exists(PROGRESS_LOG_FILE)) {
@unlink(PROGRESS_LOG_FILE);
}
if (CREATE_SHARED_MEMORY) {
shmop_delete(SHARED_MEMORY);
}
if (defined('SHARED_MEMORY')) {
shmop_close(SHARED_MEMORY);
}
} catch (Exception $e) {
if (is_object($debug)) {
$debug->QCR_Debug($e->getMessage());
}
}
if (is_object($debug)) {
$debug->QCR_Debug();
}
if (true) {
$g_HeuristicDetected = array();
$g_Iframer = array();
$g_Base64 = array();
}
list($snum, $i) = $scan->whitelisting();
////////////////////////////////////////////////////////////////////////////
if (AI_HOSTER) {
$g_IframerFragment = array();
$g_Iframer = array();
$vars->redirect = array();
$vars->doorway = array();
$g_EmptyLink = array();
$g_HeuristicType = array();
$g_HeuristicDetected = array();
$vars->adwareList = array();
$vars->phishing = array();
$g_PHPCodeInside = array();
$g_PHPCodeInsideFragment = array();
$vars->bigFiles = array();
$vars->redirectPHPFragment = array();
$g_EmptyLinkSrc = array();
$g_Base64Fragment = array();
$g_UnixExec = array();
$vars->phishingSigFragment = array();
$vars->phishingFragment = array();
$g_PhishingSig = array();
$g_IframerFragment = array();
$vars->CMS = array();
$vars->adwareListFragment = array();
}
if (BOOL_RESULT && (!defined('NEED_REPORT'))) {
if ((count($vars->criticalPHP) > 0) || (count($vars->criticalJS) > 0) || (count($g_PhishingSig) > 0)) {
exit(2);
} else {
exit(0);
}
}
////////////////////////////////////////////////////////////////////////////
$time_taken = AibolitHelpers::seconds2Human(microtime(true) - START_TIME);
stdOut("\nBuilding report [ mode = " . AI_EXPERT . " ]\n");
//stdOut("\nLoaded signatures: " . count($g_FlexDBShe) . " / " . count($g_JSVirSig) . "\n");
////////////////////////////////////////////////////////////////////////////
$scan_time = round(microtime(true) - START_TIME, 1);
foreach($reportFactory($reports) as $report) {
$report->generateReport($vars, $scan_time);
$res = $report->write();
if ($res !== '') {
stdOut($res);
}
}
stdOut("\n");
if (!AI_HOSTER) {
stdOut("Building list of vulnerable scripts " . count($vars->vulnerable));
}
stdOut("Building list of shells " . count($vars->criticalPHP));
stdOut("Building list of js " . count($vars->criticalJS));
stdOut("Building list of unread files " . count($vars->notRead));
if (!AI_HOSTER) {
stdOut("Building list of phishing pages " . count($vars->phishing));
stdOut('Building list of redirects ' . count($vars->redirect));
stdOut("Building list of symlinks " . count($vars->symLinks));
}
if (AI_EXTRA_WARN) {
stdOut("Building list of suspicious files " . count($vars->warningPHP));
}
////////////////////////////////////
if (!AI_HOSTER) {
stdOut("Building list of adware " . count($vars->adwareList));
stdOut("Building list of bigfiles " . count($vars->bigFiles));
stdOut("Building list of doorways " . count($vars->doorway));
}
if (ICHECK) {
$l_Result .= "<div style=\"margin-top: 20px\" class=\"title\">" . Translate::getStr('file_structure.updates') . "</div>";
stdOut("Building list of added files " . count($changes['addedFiles']));
if (count($changes['addedFiles']) > 0) {
$l_Result .= '<div class="note_int">' . Translate::getStr('file.added') . ' (' . count($changes['addedFiles']) . ')</div><div class="intitem">';
$l_Result .= printList($changes['addedFiles'], $vars);
$l_Result .= "</div>" . PHP_EOL;
}
stdOut("Building list of modified files " . count($changes['modifiedFiles']));
if (count($changes['modifiedFiles']) > 0) {
$l_Result .= '<div class="note_int">' . Translate::getStr('file.updated') . ' (' . count($changes['modifiedFiles']) . ')</div><div class="intitem">';
$l_Result .= printList($changes['modifiedFiles'], $vars);
$l_Result .= "</div>" . PHP_EOL;
}
stdOut("Building list of deleted files " . count($changes['deletedFiles']));
if (count($changes['deletedFiles']) > 0) {
$l_Result .= '<div class="note_int">' . Translate::getStr('file.deleted') . ' (' . count($changes['deletedFiles']) . ')</div><div class="intitem">';
$l_Result .= printList($changes['deletedFiles'], $vars);
$l_Result .= "</div>" . PHP_EOL;
}
stdOut("Building list of added dirs " . count($changes['addedDirs']));
if (count($changes['addedDirs']) > 0) {
$l_Result .= '<div class="note_int">' . Translate::getStr('folder.added') . ' (' . count($changes['addedDirs']) . ')</div><div class="intitem">';
$l_Result .= printList($changes['addedDirs'], $vars);
$l_Result .= "</div>" . PHP_EOL;
}
stdOut("Building list of deleted dirs " . count($changes['deletedDirs']));
if (count($changes['deletedDirs']) > 0) {
$l_Result .= '<div class="note_int">' . Translate::getStr('folder.deleted') . ' (' . count($changes['deletedDirs']) . ')</div><div class="intitem">';
$l_Result .= printList($changes['deletedDirs'], $vars);
$l_Result .= "</div>" . PHP_EOL;
}
}
if (!defined('REPORT') || REPORT === '') {
die2('Report not written.');
}
stdOut("Scanning complete! Time taken: " . AibolitHelpers::seconds2Human($scan_time));
if (DEBUG_PERFORMANCE) {
$debug->printPerfomanceStats();
die();
}
stdOut("\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
stdOut("Attention! DO NOT LEAVE either ai-bolit.php or AI-BOLIT-REPORT-<xxxx>-<yy>.html \nfile on server. COPY it locally then REMOVE from server. ");
stdOut("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
if (isset($options['quarantine'])) {
Quarantine();
}
if (isset($options['cmd'])) {
stdOut("Run \"{$options['cmd']}\" ");
system($options['cmd']);
}
if (is_object($debug)) {
$debug->QCR_Debug();
}
# exit with code
$l_EC1 = count($vars->criticalPHP);
$l_EC2 = count($vars->criticalJS) + count($vars->phishing) + count($vars->warningPHP);
$code = 0;
if ($l_EC1 > 0) {
$code = 2;
} else {
if ($l_EC2 > 0) {
$code = 1;
}
}
$stat = array(
'php_malware' => count($vars->criticalPHP),
'cloudhash' => count($vars->blackFiles),
'js_malware' => count($vars->criticalJS),
'phishing' => count($vars->phishing)
);
if (function_exists('aibolit_onComplete')) {
aibolit_onComplete($code, $stat);
}
stdOut('Exit code ' . $code);
exit($code);
############################################# END ###############################################
function Quarantine() {
if (!file_exists(DOUBLECHECK_FILE)) {
return;
}
$g_QuarantinePass = 'aibolit';
$archive = "AI-QUARANTINE-" . rand(100000, 999999) . ".zip";
$infoFile = substr($archive, 0, -3) . "txt";
$report = REPORT_PATH . DIR_SEPARATOR . REPORT_FILE;
foreach (file(DOUBLECHECK_FILE) as $file) {
$file = trim($file);
if (!is_file($file)) {
continue;
}
$lStat = stat($file);
// skip files over 300KB
if ($lStat['size'] > 300 * 1024) {
continue;
}
// http://www.askapache.com/security/chmod-stat.html
$p = $lStat['mode'];
$perm = '-';
$perm .= (($p & 0x0100) ? 'r' : '-') . (($p & 0x0080) ? 'w' : '-');
$perm .= (($p & 0x0040) ? (($p & 0x0800) ? 's' : 'x') : (($p & 0x0800) ? 'S' : '-'));
$perm .= (($p & 0x0020) ? 'r' : '-') . (($p & 0x0010) ? 'w' : '-');
$perm .= (($p & 0x0008) ? (($p & 0x0400) ? 's' : 'x') : (($p & 0x0400) ? 'S' : '-'));
$perm .= (($p & 0x0004) ? 'r' : '-') . (($p & 0x0002) ? 'w' : '-');
$perm .= (($p & 0x0001) ? (($p & 0x0200) ? 't' : 'x') : (($p & 0x0200) ? 'T' : '-'));
$owner = (function_exists('posix_getpwuid')) ? @posix_getpwuid($lStat['uid']) : array(
'name' => $lStat['uid']
);
$group = (function_exists('posix_getgrgid')) ? @posix_getgrgid($lStat['gid']) : array(
'name' => $lStat['uid']
);
$inf['permission'][] = $perm;
$inf['owner'][] = $owner['name'];
$inf['group'][] = $group['name'];
$inf['size'][] = $lStat['size'] > 0 ? AibolitHelpers::bytes2Human($lStat['size']) : '-';
$inf['ctime'][] = $lStat['ctime'] > 0 ? date("d/m/Y H:i:s", $lStat['ctime']) : '-';
$inf['mtime'][] = $lStat['mtime'] > 0 ? date("d/m/Y H:i:s", $lStat['mtime']) : '-';
$files[] = strpos($file, './') === 0 ? substr($file, 2) : $file;
}
// get config files for cleaning
$configFilesRegex = 'config(uration|\.in[ic])?\.php$|dbconn\.php$';
$configFiles = preg_grep("~$configFilesRegex~", $files);
// get columns width
$width = array();
foreach (array_keys($inf) as $k) {
$width[$k] = strlen($k);
for ($i = 0, $iMax = count($inf[$k]); $i < $iMax; ++$i) {
$len = strlen($inf[$k][$i]);
if ($len > $width[$k])
$width[$k] = $len;
}
}
// headings of columns
$info = '';
foreach (array_keys($inf) as $k) {
$info .= str_pad($k, $width[$k], ' ', STR_PAD_LEFT) . ' ';
}
$info .= "name\n";
for ($i = 0, $iMax = count($files); $i < $iMax; ++$i) {
foreach (array_keys($inf) as $k) {
$info .= str_pad($inf[$k][$i], $width[$k], ' ', STR_PAD_LEFT) . ' ';
}
$info .= $files[$i] . "\n";
}
unset($inf, $width);
exec("zip -v 2>&1", $output, $code);
if ($code == 0) {
$filter = '';
if ($configFiles && exec("grep -V 2>&1", $output, $code) && $code == 0) {
$filter = "|grep -v -E '$configFilesRegex'";
}
exec("cat AI-BOLIT-DOUBLECHECK.php $filter |zip -@ --password $g_QuarantinePass $archive", $output, $code);
if ($code == 0) {
file_put_contents($infoFile, $info);
$m = array();
if (!empty($filter)) {
foreach ($configFiles as $file) {
$tmp = file_get_contents($file);
// remove passwords
$tmp = preg_replace('~^.*?pass.*~im', '', $tmp);
// new file name
$file = preg_replace('~.*/~', '', $file) . '-' . rand(100000, 999999);
file_put_contents($file, $tmp);
$m[] = $file;
}
}
exec("zip -j --password $g_QuarantinePass $archive $infoFile $report " . DOUBLECHECK_FILE . ' ' . implode(' ', $m));
stdOut("\nCreate archive '" . realpath($archive) . "'");
stdOut("This archive have password '$g_QuarantinePass'");
foreach ($m as $file)
unlink($file);
unlink($infoFile);
return;
}
}
$zip = new ZipArchive;
if ($zip->open($archive, ZipArchive::CREATE | ZipArchive::OVERWRITE) === false) {
stdOut("Cannot create '$archive'.");
return;
}
foreach ($files as $file) {
if (in_array($file, $configFiles)) {
$tmp = file_get_contents($file);
// remove passwords
$tmp = preg_replace('~^.*?pass.*~im', '', $tmp);
$zip->addFromString($file, $tmp);
} else {
$zip->addFile($file);
}
}
$zip->addFile(DOUBLECHECK_FILE, DOUBLECHECK_FILE);
$zip->addFile($report, REPORT_FILE);
$zip->addFromString($infoFile, $info);
$zip->close();
stdOut("\nCreate archive '" . realpath($archive) . "'.");
stdOut("This archive has no password!");
}
///////////////////////////////////////////////////////////////////////////
function QCR_IntegrityCheck($l_RootDir, $vars, $debug) {
global $defaults, $g_UrlIgnoreList, $g_DirIgnoreList, $g_UnsafeDirArray, $g_UnsafeFilesFound, $g_HiddenFiles, $g_UnixExec, $g_IgnoredExt, $g_SuspiciousFiles, $l_SkipSample;
global $g_IntegrityDB, $g_ICheck;
static $l_Buffer = '';
$l_DirCounter = 0;
$l_DoorwayFilesCounter = 0;
$l_SourceDirIndex = $vars->g_counter - 1;
$scanDirectoryGenerator = new ScanDirectoryGenerator();
$listFiles = $defaults['use_template_in_path'] ? $scanDirectoryGenerator->getGeneratorWithPattern($l_RootDir) : $scanDirectoryGenerator->getGenerator($l_RootDir);
if (is_object($debug)) {
$debug->QCR_Debug('Check ' . $l_RootDir);
}
foreach ($listFiles as $l_FileName) {
$l_Type = filetype($l_FileName);
$l_IsDir = ($l_Type == 'dir');
if ($l_Type == 'link') {
$vars->symLinks[] = $l_FileName;
continue;
} elseif ($l_Type != 'file' && (!$l_IsDir)) {
$g_UnixExec[] = $l_FileName;
continue;
}
$l_Ext = substr($l_FileName, strrpos($l_FileName, '.') + 1);
$l_NeedToScan = true;
$l_Ext2 = substr(strstr(basename($l_FileName), '.'), 1);
if (in_array(strtolower($l_Ext2), $g_IgnoredExt)) {
$l_NeedToScan = false;
}
// if folder in ignore list
$l_Skip = false;
for ($dr = 0, $drMax = count($g_DirIgnoreList); $dr < $drMax; $dr++) {
if (($g_DirIgnoreList[$dr] != '') && preg_match('#' . $g_DirIgnoreList[$dr] . '#', $l_FileName, $l_Found)) {
if (!in_array($g_DirIgnoreList[$dr], $l_SkipSample)) {
$l_SkipSample[] = $g_DirIgnoreList[$dr];
} else {
$l_Skip = true;
$l_NeedToScan = false;
}
}
}
if (getRelativePath($l_FileName) == "./" . INTEGRITY_DB_FILE) {
$l_NeedToScan = false;
}
if ($l_IsDir) {
// skip on ignore
if ($l_Skip) {
$vars->skippedFolders[] = $l_FileName;
continue;
}
$l_BaseName = basename($l_FileName);
$l_DirCounter++;
$vars->counter++;
$vars->foundTotalDirs++;
} elseif ($l_NeedToScan){
$vars->foundTotalFiles++;
$vars->counter++;
}
if (!$l_NeedToScan) {
continue;
}
if (IMAKE) {
write_integrity_db_file($l_FileName);
continue;
}
// ICHECK
// skip if known and not modified.
if (icheck($l_FileName)) {
continue;
}
$l_Buffer .= getRelativePath($l_FileName);
$l_Buffer .= $l_IsDir ? DIR_SEPARATOR . "\n" : "\n";
if (strlen($l_Buffer) > 32000) {
file_put_contents(QUEUE_FILENAME, $l_Buffer, FILE_APPEND) || die2("Cannot write to file " . QUEUE_FILENAME);
$l_Buffer = '';
}
}
if (!empty($l_Buffer)
&& ($defaults['use_template_in_path']
|| $l_RootDir == ROOT_PATH
)
) {
file_put_contents(QUEUE_FILENAME, $l_Buffer, FILE_APPEND) || die2("Cannot write to file " . QUEUE_FILENAME);
$l_Buffer = '';
}
if ($defaults['use_template_in_path'] || ($l_RootDir == ROOT_PATH)) {
write_integrity_db_file();
}
}
// For icheck and imake only
function getRelativePath($l_FileName)
{
return "./" . substr($l_FileName, strlen(ROOT_PATH) + 1) . (is_dir($l_FileName) ? DIR_SEPARATOR : '');
}
/**
*
* @return true if known and not modified
*/
function icheck($l_FileName)
{
global $g_IntegrityDB, $g_ICheck;
static $l_Buffer = '';
static $l_status = [
'modified' => 'modified',
'added' => 'added'
];
$l_RelativePath = getRelativePath($l_FileName);
$l_known = isset($g_IntegrityDB[$l_RelativePath]);
if (is_dir($l_FileName)) {
if ($l_known) {
unset($g_IntegrityDB[$l_RelativePath]);
} else {
$g_IntegrityDB[$l_RelativePath] =& $l_status['added'];
}
return $l_known;
}
if ($l_known == false) {
$g_IntegrityDB[$l_RelativePath] =& $l_status['added'];
return false;
}
$hash = is_file($l_FileName) ? hash_file('sha1', $l_FileName) : '';
if ($g_IntegrityDB[$l_RelativePath] != $hash) {
$g_IntegrityDB[$l_RelativePath] =& $l_status['modified'];
return false;
}
unset($g_IntegrityDB[$l_RelativePath]);
return true;
}
function write_integrity_db_file($l_FileName = '')
{
static $l_Buffer = '';
if (empty($l_FileName)) {
empty($l_Buffer) || file_put_contents('compress.zlib://' . INTEGRITY_DB_FILE, $l_Buffer, FILE_APPEND) || die2("Cannot write to file " . INTEGRITY_DB_FILE);
$l_Buffer = '';
return;
}
$l_RelativePath = getRelativePath($l_FileName);
$hash = is_file($l_FileName) ? hash_file('sha1', $l_FileName) : '';
$l_Buffer .= "$l_RelativePath|$hash\n";
if (strlen($l_Buffer) > 32000) {
file_put_contents('compress.zlib://' . INTEGRITY_DB_FILE, $l_Buffer, FILE_APPEND) || die2("Cannot write to file " . INTEGRITY_DB_FILE);
$l_Buffer = '';
}
}
function load_integrity_db()
{
global $g_IntegrityDB;
file_exists(INTEGRITY_DB_FILE) || die2('Not found ' . INTEGRITY_DB_FILE);
$s_file = new SplFileObject('compress.zlib://' . INTEGRITY_DB_FILE);
$s_file->setFlags(SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);
foreach ($s_file as $line) {
$i = strrpos($line, '|');
if (!$i)
continue;
$g_IntegrityDB[substr($line, 0, $i)] = substr($line, $i + 1);
}
$s_file = null;
}
function getStdin()
{
$stdin = '';
$f = @fopen('php://stdin', 'r');
while($line = fgets($f))
{
$stdin .= $line;
}
fclose($f);
return $stdin;
}
function die2($str) {
if (function_exists('aibolit_onFatalError')) {
aibolit_onFatalError($str);
}
die($str);
}
function getMaxMinUid($path = '/etc/login.defs')
{
$uid_min = 1000;
$uid_max = 60000;
if (!file_exists($path)) {
$release = new OsReleaseInfo();
$ver = $release->getOsVersion();
if ($release->isIdLikeCentos() && $ver && (strpos($ver, '6') === 0)) {
$uid_min = 500;
$uid_max = 60000;
}
unset($ver);
return [$uid_min, $uid_max];
}
$file = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($file as $line) {
$line = trim($line);
if (strpos($line, 'UID_MIN') === 0) {
list($key, $value) = preg_split('~\s+~', trim($line), 2, PREG_SPLIT_NO_EMPTY);
$uid_min = intval(trim($value));
}
if (strpos($line, 'UID_MAX') === 0) {
list($key, $value) = preg_split('~\s+~', trim($line), 2, PREG_SPLIT_NO_EMPTY);
$uid_max = intval(trim($value));
}
}
return [$uid_min, $uid_max];
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// The following instructions should be written the same pattern,
/// because they are replaced by file content while building a release.
/// See the release_aibolit_ru.sh file for details.
class AibolitHelpers
{
/**
* Format bytes to human readable
*
* @param int $bytes
*
* @return string
*/
public static function bytes2Human($bytes)
{
if ($bytes < 1024) {
return $bytes . ' b';
} elseif (($kb = $bytes / 1024) < 1024) {
return number_format($kb, 2) . ' Kb';
} elseif (($mb = $kb / 1024) < 1024) {
return number_format($mb, 2) . ' Mb';
} elseif (($gb = $mb / 1024) < 1024) {
return number_format($gb, 2) . ' Gb';
} else {
return number_format($gb / 1024, 2) . 'Tb';
}
}
/**
* Seconds to human readable
* @param int $seconds
* @return string
*/
public static function seconds2Human($seconds)
{
$r = '';
$_seconds = floor($seconds);
$ms = $seconds - $_seconds;
$seconds = $_seconds;
if ($hours = floor($seconds / 3600)) {
$r .= $hours . ' h ';
$seconds %= 3600;
}
if ($minutes = floor($seconds / 60)) {
$r .= $minutes . ' m ';
$seconds %= 60;
}
if ($minutes < 3) {
$r .= ' ' . (string)($seconds + ($ms > 0 ? round($ms) : 0)) . ' s';
}
return $r;
}
/**
* Get bytes from shorthand byte values (1M, 1G...)
* @param int|string $val
* @return int
*/
public static function getBytes($val)
{
$val = trim($val);
$last = strtolower($val[strlen($val) - 1]);
switch ($last) {
case 't':
$val *= 1024;
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return intval($val);
}
/**
* Convert dangerous chars to html entities
*
* @param $par_Str
* @param string $addPrefix
* @param string $noPrefix
* @param bool $replace_path
*
* @return string
*/
public static function makeSafeFn($par_Str, $addPrefix = '', $noPrefix = '', $replace_path = false)
{
if ($replace_path) {
$lines = explode("\n", $par_Str);
array_walk($lines, static function(&$n) use ($addPrefix, $noPrefix) {
$n = $addPrefix . str_replace($noPrefix, '', $n);
});
$par_Str = implode("\n", $lines);
}
return htmlspecialchars($par_Str, ENT_SUBSTITUTE | ENT_QUOTES);
}
public static function myCheckSum($str)
{
return hash('crc32b', $str);
}
}
class Variables
{
public $structure = array();
public $totalFolder = 0;
public $totalFiles = 0;
public $adwareList = array();
public $criticalPHP = array();
public $phishing = array();
public $CMS = array();
public $redirect = array();
public $redirectPHPFragment = array();
public $criticalJS = array();
public $criticalJSFragment = array();
public $blackFiles = array();
public $notRead = array();
public $bigFiles = array();
public $criticalPHPSig = array();
public $criticalPHPFragment = array();
public $phishingSigFragment = array();
public $phishingFragment = array();
public $criticalJSSig = array();
public $adwareListFragment = array();
public $warningPHPSig = array();
public $warningPHPFragment = array();
public $warningPHP = array();
public $blacklist = array();
public $vulnerable = array();
public $crc = 0;
public $counter = 0;
public $foundTotalDirs = 0;
public $foundTotalFiles = 0;
public $files_and_ignored = 0;
public $doorway = array();
public $symLinks = array();
public $skippedFolders = array();
public $hashtable = null;
public $fileinfo = null;
public $rescanCount = 0;
public $maxMinUid = array();
public $options = array();
public $signs = array();
}
class Logger
{
/**
* $log_file - path and log file name
* @var string
*/
protected $log_file;
/**
* $file - file
* @var string
*/
protected $file;
/**
* dateFormat
* @var string
*/
protected $dateFormat = 'd-M-Y H:i:s';
/**
* @var array
*/
const LEVELS = ['ERROR' => 1, 'DEBUG' => 2, 'INFO' => 4, 'ALL' => 7];
/**
* @var int
*/
private $level;
/**
* Class constructor
*
* @param string $log_file - path and filename of log
* @param string|array $level - Level of logging
*
* @throws Exception
*/
public function __construct($log_file = 'error.log', $level = 'INFO')
{
if (is_array($level)) {
foreach ($level as $v) {
if (!isset(self::LEVELS[$v])) {
$v = 'INFO';
}
$this->level |= self::LEVELS[$v];
}
} else {
if (isset(self::LEVELS[$level])) {
$this->level = self::LEVELS[$level];
} else {
$this->level = self::LEVELS['INFO'];
}
}
$this->log_file = $log_file;
//Create log file if it doesn't exist.
if(!file_exists($log_file)){
fopen($log_file, 'w') or exit("Can't create $log_file!");
}
//Check permissions of file.
if(!is_writable($log_file)){
//throw exception if not writable
throw new Exception('ERROR: Unable to write to file!', 1);
}
}
/**
* Info method (write info message)
* @param string $message
* @return void
*/
public function info($message)
{
if ($this->level & self::LEVELS['INFO']) {
$this->writeLog($message, 'INFO');
}
}
/**
* Debug method (write debug message)
* @param string $message
* @return void
*/
public function debug($message)
{
if ($this->level & self::LEVELS['DEBUG']) {
$this->writeLog($message, 'DEBUG');
}
}
/**
* Error method (write error message)
* @param string $message
* @return void
*/
public function error($message)
{
if ($this->level & self::LEVELS['ERROR']) {
$this->writeLog($message, 'ERROR');
}
}
/**
* Write to log file
* @param string $message
* @param string $level
* @return void
*/
public function writeLog($message, $level)
{
// open log file
if (!is_resource($this->file)) {
$this->openLog();
}
//Grab time - based on timezone in php.ini
$time = date($this->dateFormat);
// Write time & message to end of file
fwrite($this->file, "[$time] : [$level] - $message" . PHP_EOL);
}
/**
* Open log file
* @return void
*/
private function openLog()
{
$openFile = $this->log_file;
// 'a' option = place pointer at end of file
$this->file = fopen($openFile, 'a') or exit("Can't open $openFile!");
}
/**
* Class destructor
*/
public function __destruct()
{
if ($this->file) {
fclose($this->file);
}
}
}
class LoadSignaturesForScan
{
private $sig_db = array();
private $sig_db_meta_info = array();
private $sig_db_location = 'internal';
private $mode;
private $debug;
public $_DBShe;
public $X_DBShe;
public $_FlexDBShe;
public $X_FlexDBShe;
public $XX_FlexDBShe;
public $_ExceptFlex;
public $_AdwareSig;
public $_PhishingSig;
public $_JSVirSig;
public $X_JSVirSig;
public $_SusDB;
public $_SusDBPrio;
public $_DeMapper;
public $_Mnemo;
private $count;
private $count_susp;
private $result = 0;
private $last_error = '';
const SIGN_INTERNAL = 1;
const SIGN_EXTERNAL = 2;
const SIGN_IMPORT = 3;
const SIGN_ERROR = 9;
public function __construct($avdb_file, $mode, $debug)
{
$this->mode = $mode;
$this->debug = $debug;
$this->sig_db_meta_info = array(
'build-date' => 'n/a',
'version' => 'n/a',
'release-type' => 'n/a',
);
if ($avdb_file && file_exists($avdb_file)) {
$avdb = explode("\n", gzinflate(base64_decode(str_rot13(strrev(trim(file_get_contents($avdb_file)))))));
$this->sig_db_location = 'external';
$this->_DBShe = explode("\n", base64_decode($avdb[0]));
$this->X_DBShe = explode("\n", base64_decode($avdb[1]));
$this->_FlexDBShe = explode("\n", base64_decode($avdb[2]));
$this->X_FlexDBShe = explode("\n", base64_decode($avdb[3]));
$this->XX_FlexDBShe = explode("\n", base64_decode($avdb[4]));
$this->_ExceptFlex = explode("\n", base64_decode($avdb[5]));
$this->_AdwareSig = explode("\n", base64_decode($avdb[6]));
$this->_PhishingSig = explode("\n", base64_decode($avdb[7]));
$this->_JSVirSig = explode("\n", base64_decode($avdb[8]));
$this->X_JSVirSig = explode("\n", base64_decode($avdb[9]));
$this->_SusDB = explode("\n", base64_decode($avdb[10]));
$this->_SusDBPrio = explode("\n", base64_decode($avdb[11]));
$this->_DeMapper = array_combine(explode("\n", base64_decode($avdb[12])), explode("\n", base64_decode($avdb[13])));
$this->_Mnemo = @array_flip(@array_combine(explode("\n", base64_decode($avdb[14])), explode("\n", base64_decode($avdb[15]))));
// get meta information
$avdb_meta_info = json_decode(base64_decode($avdb[16]), true);
$this->sig_db_meta_info['build-date'] = $avdb_meta_info ? $avdb_meta_info['build-date'] : 'n/a';
$this->sig_db_meta_info['version'] = $avdb_meta_info ? $avdb_meta_info['version'] : 'n/a';
$this->sig_db_meta_info['release-type'] = $avdb_meta_info ? $avdb_meta_info['release-type'] : 'n/a';
if (count($this->_DBShe) <= 1) {
$this->_DBShe = array();
}
if (count($this->X_DBShe) <= 1) {
$this->X_DBShe = array();
}
if (count($this->_FlexDBShe) <= 1) {
$this->_FlexDBShe = array();
}
if (count($this->X_FlexDBShe) <= 1) {
$this->X_FlexDBShe = array();
}
if (count($this->XX_FlexDBShe) <= 1) {
$this->XX_FlexDBShe = array();
}
if (count($this->_ExceptFlex) <= 1) {
$this->_ExceptFlex = array();
}
if (count($this->_AdwareSig) <= 1) {
$this->_AdwareSig = array();
}
if (count($this->_PhishingSig) <= 1) {
$this->_PhishingSig = array();
}
if (count($this->X_JSVirSig) <= 1) {
$this->X_JSVirSig = array();
}
if (count($this->_JSVirSig) <= 1) {
$this->_JSVirSig = array();
}
if (count($this->_SusDB) <= 1) {
$this->_SusDB = array();
}
if (count($this->_SusDBPrio) <= 1) {
$this->_SusDBPrio = array();
}
$this->result = self::SIGN_EXTERNAL;
} else {
InternalSignatures::init();
$this->_DBShe = InternalSignatures::$_DBShe;
$this->X_DBShe = InternalSignatures::$X_DBShe;
$this->_FlexDBShe = InternalSignatures::$_FlexDBShe;
$this->X_FlexDBShe = InternalSignatures::$X_FlexDBShe;
$this->XX_FlexDBShe = InternalSignatures::$XX_FlexDBShe;
$this->_ExceptFlex = InternalSignatures::$_ExceptFlex;
$this->_AdwareSig = InternalSignatures::$_AdwareSig;
$this->_PhishingSig = InternalSignatures::$_PhishingSig;
$this->_JSVirSig = InternalSignatures::$_JSVirSig;
$this->X_JSVirSig = InternalSignatures::$X_JSVirSig;
$this->_SusDB = InternalSignatures::$_SusDB;
$this->_SusDBPrio = InternalSignatures::$_SusDBPrio;
$this->_DeMapper = InternalSignatures::$_DeMapper;
$this->_Mnemo = InternalSignatures::$_Mnemo;
// get meta information
$avdb_meta_info = InternalSignatures::$db_meta_info;
$this->sig_db_meta_info['build-date'] = $avdb_meta_info ? $avdb_meta_info['build-date'] : 'n/a';
$this->sig_db_meta_info['version'] = $avdb_meta_info ? $avdb_meta_info['version'] : 'n/a';
$this->sig_db_meta_info['release-type'] = $avdb_meta_info ? $avdb_meta_info['release-type'] : 'n/a';
$this->result = self::SIGN_INTERNAL;
}
// use only basic signature subset
if ($mode < 2) {
$this->X_FlexDBShe = array();
$this->XX_FlexDBShe = array();
$this->X_JSVirSig = array();
}
// Load custom signatures
if (file_exists(__DIR__ . '/ai-bolit.sig')) {
try {
$s_file = new SplFileObject(__DIR__ . '/ai-bolit.sig');
$s_file->setFlags(SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);
foreach ($s_file as $line) {
$this->_FlexDBShe[] = preg_replace('#\G(?:[^~\\\\]+|\\\\.)*+\K~#', '\\~', $line); // escaping ~
}
$this->result = self::SIGN_IMPORT;
$s_file = null; // file handler is closed
}
catch (Exception $e) {
$this->result = self::SIGN_ERROR;
$this->last_error = $e->getMessage();
}
}
$this->count = count($this->_JSVirSig) + count($this->X_JSVirSig) + count($this->_DBShe) + count($this->X_DBShe) + count($this->_FlexDBShe) + count($this->X_FlexDBShe) + count($this->XX_FlexDBShe);
$this->count_susp = $this->count + count($this->_SusDB);
if (!$debug) {
$this->OptimizeSignatures();
}
$this->_DBShe = array_map('strtolower', $this->_DBShe);
$this->X_DBShe = array_map('strtolower', $this->X_DBShe);
}
private function OptimizeSignatures()
{
($this->mode == 2) && ($this->_FlexDBShe = array_merge($this->_FlexDBShe, $this->X_FlexDBShe, $this->XX_FlexDBShe));
($this->mode == 1) && ($this->_FlexDBShe = array_merge($this->_FlexDBShe, $this->X_FlexDBShe));
$this->X_FlexDBShe = $this->XX_FlexDBShe = array();
($this->mode == 2) && ($this->_JSVirSig = array_merge($this->_JSVirSig, $this->X_JSVirSig));
$this->X_JSVirSig = array();
$count = count($this->_FlexDBShe);
for ($i = 0; $i < $count; $i++) {
if ($this->_FlexDBShe[$i] == '[a-zA-Z0-9_]+?\(\s*[a-zA-Z0-9_]+?=\s*\)')
$this->_FlexDBShe[$i] = '\((?<=[a-zA-Z0-9_].)\s*[a-zA-Z0-9_]++=\s*\)';
if ($this->_FlexDBShe[$i] == '([^\?\s])\({0,1}\.[\+\*]\){0,1}\2[a-z]*e')
$this->_FlexDBShe[$i] = '(?J)\.[+*](?<=(?<d>[^\?\s])\(..|(?<d>[^\?\s])..)\)?\g{d}[a-z]*e';
if ($this->_FlexDBShe[$i] == '$[a-zA-Z0-9_]\{\d+\}\s*\.$[a-zA-Z0-9_]\{\d+\}\s*\.$[a-zA-Z0-9_]\{\d+\}\s*\.')
$this->_FlexDBShe[$i] = '\$[a-zA-Z0-9_]\{\d+\}\s*\.\$[a-zA-Z0-9_]\{\d+\}\s*\.\$[a-zA-Z0-9_]\{\d+\}\s*\.';
$this->_FlexDBShe[$i] = str_replace('http://.+?/.+?\.php\?a', 'http://[^?\s]++(?<=\.php)\?a', $this->_FlexDBShe[$i]);
$this->_FlexDBShe[$i] = preg_replace('~\[a-zA-Z0-9_\]\+\K\?~', '+', $this->_FlexDBShe[$i]);
$this->_FlexDBShe[$i] = preg_replace('~^\\\\[d]\+&@~', '&@(?<=\d..)', $this->_FlexDBShe[$i]);
$this->_FlexDBShe[$i] = str_replace('\s*[\'"]{0,1}.+?[\'"]{0,1}\s*', '.+?', $this->_FlexDBShe[$i]);
$this->_FlexDBShe[$i] = str_replace('[\'"]{0,1}.+?[\'"]{0,1}', '.+?', $this->_FlexDBShe[$i]);
$this->_FlexDBShe[$i] = preg_replace('~^\[\'"\]\{0,1\}\.?|^@\*|^\\\\s\*~', '', $this->_FlexDBShe[$i]);
}
$this->optSig($this->_FlexDBShe);
$this->optSig($this->_JSVirSig);
$this->optSig($this->_AdwareSig);
$this->optSig($this->_PhishingSig);
$this->optSig($this->_SusDB);
//optSig($g_SusDBPrio);
//optSig($g_ExceptFlex);
// convert exception rules
$cnt = count($this->_ExceptFlex);
for ($i = 0; $i < $cnt; $i++) {
$this->_ExceptFlex[$i] = trim(Normalization::normalize($this->_ExceptFlex[$i]));
if ($this->_ExceptFlex[$i] == '')
unset($this->_ExceptFlex[$i]);
}
$this->_ExceptFlex = array_values($this->_ExceptFlex);
}
private function optSig(&$sigs)
{
$sigs = array_unique($sigs);
// Add SigId
foreach ($sigs as &$s) {
$s .= '(?<X' . AibolitHelpers::myCheckSum($s) . '>)';
}
unset($s);
$fix = array(
'([^\?\s])\({0,1}\.[\+\*]\){0,1}\2[a-z]*e' => '(?J)\.[+*](?<=(?<d>[^\?\s])\(..|(?<d>[^\?\s])..)\)?\g{d}[a-z]*e',
'http://.+?/.+?\.php\?a' => 'http://[^?\s]++(?<=\.php)\?a',
'\s*[\'"]{0,1}.+?[\'"]{0,1}\s*' => '.+?',
'[\'"]{0,1}.+?[\'"]{0,1}' => '.+?'
);
$sigs = str_replace(array_keys($fix), array_values($fix), $sigs);
$fix = array(
'~^\\\\[d]\+&@~' => '&@(?<=\d..)',
'~^((\[\'"\]|\\\\s|@)(\{0,1\}\.?|[?*]))+~' => ''
);
$sigs = preg_replace(array_keys($fix), array_values($fix), $sigs);
$this->optSigCheck($sigs);
$tmp = array();
foreach ($sigs as $i => $s) {
if (!preg_match('~^(?>(?!\.[*+]|\\\\\d)(?:\\\\.|\[.+?\]|.))+$~', $s)) {
unset($sigs[$i]);
$tmp[] = $s;
}
}
usort($sigs, 'strcasecmp');
$txt = implode("\n", $sigs);
for ($i = 24; $i >= 1; ($i > 4) ? $i -= 4 : --$i) {
$txt = preg_replace_callback('#^((?>(?:\\\\.|\\[.+?\\]|[^(\n]|\((?:\\\\.|[^)(\n])++\))(?:[*?+]\+?|\{\d+(?:,\d*)?\}[+?]?|)){' . $i . ',})[^\n]*+(?:\\n\\1(?![{?*+]).+)+#im', [$this, 'optMergePrefixes'], $txt);
}
$sigs = array_merge(explode("\n", $txt), $tmp);
$this->optSigCheck($sigs);
}
private function optMergePrefixes($m)
{
$limit = 8000;
$prefix = $m[1];
$prefix_len = strlen($prefix);
$len = $prefix_len;
$r = array();
$suffixes = array();
foreach (explode("\n", $m[0]) as $line) {
if (strlen($line) > $limit) {
$r[] = $line;
continue;
}
$s = substr($line, $prefix_len);
$len += strlen($s);
if ($len > $limit) {
if (count($suffixes) == 1) {
$r[] = $prefix . $suffixes[0];
} else {
$r[] = $prefix . '(?:' . implode('|', $suffixes) . ')';
}
$suffixes = array();
$len = $prefix_len + strlen($s);
}
$suffixes[] = $s;
}
if (!empty($suffixes)) {
if (count($suffixes) == 1) {
$r[] = $prefix . $suffixes[0];
} else {
$r[] = $prefix . '(?:' . implode('|', $suffixes) . ')';
}
}
return implode("\n", $r);
}
private function optMergePrefixes_Old($m)
{
$prefix = $m[1];
$prefix_len = strlen($prefix);
$suffixes = array();
foreach (explode("\n", $m[0]) as $line) {
$suffixes[] = substr($line, $prefix_len);
}
return $prefix . '(?:' . implode('|', $suffixes) . ')';
}
/*
* Checking errors in pattern
*/
private function optSigCheck(&$sigs)
{
$result = true;
foreach ($sigs as $k => $sig) {
if (trim($sig) == "") {
if ($this->debug) {
echo ("************>>>>> EMPTY\n pattern: " . $sig . "\n");
}
unset($sigs[$k]);
$result = false;
}
if (@preg_match('~' . $sig . '~smiS', '') === false) {
$error = error_get_last();
if ($this->debug) {
echo ("************>>>>> " . $error['message'] . "\n pattern: " . $sig . "\n");
}
unset($sigs[$k]);
$result = false;
}
}
return $result;
}
public static function getSigId($l_Found)
{
foreach ($l_Found as $key => &$v) {
if (is_string($key) && $v[1] != -1 && strlen($key) == 9) {
return substr($key, 1);
}
}
return null;
}
public function getDBLocation()
{
return $this->sig_db_location;
}
public function getDB()
{
return $this->sig_db;
}
public function getDBMetaInfo()
{
return $this->sig_db_meta_info;
}
public function getDBMetaInfoVersion()
{
return $this->sig_db_meta_info['version'];
}
public function getDBCount()
{
return $this->count;
}
public function getDBCountWithSuspicious()
{
return $this->count_susp;
}
public function getResult()
{
return $this->result;
}
public function getLastError()
{
return $this->last_error;
}
}
class InternalSignatures
{
public static $_DBShe;
public static $X_DBShe;
public static $_FlexDBShe;
public static $X_FlexDBShe;
public static $XX_FlexDBShe;
public static $_ExceptFlex;
public static $_AdwareSig;
public static $_PhishingSig;
public static $_JSVirSig;
public static $X_JSVirSig;
public static $_SusDB;
public static $_SusDBPrio;
public static $_DeMapper;
public static $_Mnemo;
public static $db_meta_info;
public static function init()
{
//BEGIN_SIG 26/06/2020 12:52:35
self::$_DBShe = unserialize(gzinflate(/*1593165155*/base64_decode("S7QysKquBQA=")));
self::$X_DBShe = unserialize(gzinflate(/*1593165155*/base64_decode("S7QysKquBQA=")));
self::$_FlexDBShe = unserialize(gzinflate(/*1593165155*/base64_decode("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")));
self::$X_FlexDBShe = unserialize(gzinflate(/*1593165155*/base64_decode("S7QysKquBQA=")));
self::$XX_FlexDBShe = unserialize(gzinflate(/*1593165155*/base64_decode("S7QysKquBQA=")));
self::$_ExceptFlex = unserialize(gzinflate(/*1593165155*/base64_decode("S7QysKquBQA=")));
self::$_AdwareSig = unserialize(gzinflate(/*1593165155*/base64_decode("S7QysKquBQA=")));
self::$_PhishingSig = unserialize(gzinflate(/*1593165155*/base64_decode("S7QysKquBQA=")));
self::$_JSVirSig = unserialize(gzinflate(/*1593165155*/base64_decode("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")));
self::$X_JSVirSig = unserialize(gzinflate(/*1593165155*/base64_decode("S7QysKquBQA=")));
self::$_SusDB = unserialize(gzinflate(/*1593165155*/base64_decode("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")));
self::$_SusDBPrio = unserialize(gzinflate(/*1593165155*/base64_decode("S7QysKquBQA=")));
self::$_Mnemo = @array_flip(unserialize(gzinflate(/*1593165155*/base64_decode("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"))));
self::$_DeMapper = unserialize(base64_decode("YTo1OntzOjEwOiJ3aXphcmQucGhwIjtzOjM3OiJjbGFzcyBXZWxjb21lU3RlcCBleHRlbmRzIENXaXphcmRTdGVwIjtzOjE3OiJ1cGRhdGVfY2xpZW50LnBocCI7czozNzoieyBDVXBkYXRlQ2xpZW50OjpBZGRNZXNzYWdlMkxvZygiZXhlYyI7czoxMToiaW5jbHVkZS5waHAiO3M6NDg6IkdMT0JBTFNbIlVTRVIiXS0+SXNBdXRob3JpemVkKCkgJiYgJGFyQXV0aFJlc3VsdCI7czo5OiJzdGFydC5waHAiO3M6NjA6IkJYX1JPT1QuJy9tb2R1bGVzL21haW4vY2xhc3Nlcy9nZW5lcmFsL3VwZGF0ZV9kYl91cGRhdGVyLnBocCI7czoxMDoiaGVscGVyLnBocCI7czo1ODoiSlBsdWdpbkhlbHBlcjo6Z2V0UGx1Z2luKCJzeXN0ZW0iLCJvbmVjbGlja2NoZWNrb3V0X3ZtMyIpOyI7fQ=="));
self::$db_meta_info = unserialize(base64_decode("YTozOntzOjEwOiJidWlsZC1kYXRlIjtzOjEwOiIxNTkzMTY1MTA3IjtzOjc6InZlcnNpb24iO3M6MTM6IjIwMjAwNjI2LTMxNjAiO3M6MTI6InJlbGVhc2UtdHlwZSI7czoxMDoicHJvZHVjdGlvbiI7fQ=="));
//END_SIG
}
}
class CmsVersionDetector
{
const CMS_BITRIX = 'Bitrix';
const CMS_WORDPRESS = 'WordPress';
const CMS_JOOMLA = 'Joomla';
const CMS_DLE = 'Data Life Engine';
const CMS_IPB = 'Invision Power Board';
const CMS_WEBASYST = 'WebAsyst';
const CMS_OSCOMMERCE = 'OsCommerce';
const CMS_DRUPAL = 'Drupal';
const CMS_MODX = 'MODX';
const CMS_INSTANTCMS = 'Instant CMS';
const CMS_PHPBB = 'PhpBB';
const CMS_VBULLETIN = 'vBulletin';
const CMS_SHOPSCRIPT = 'PHP ShopScript Premium';
const CMS_VERSION_UNDEFINED = '0.0';
private $root_path;
private $versions;
private $types;
public function __construct($root_path = '.') {
$this->root_path = $root_path;
$this->versions = array();
$this->types = array();
$version = '';
$dir_list = $this->getDirList($root_path);
$dir_list[] = $root_path;
foreach ($dir_list as $dir) {
if ($this->checkBitrix($dir, $version)) {
$this->addCms(self::CMS_BITRIX, $version);
}
if ($this->checkWordpress($dir, $version)) {
$this->addCms(self::CMS_WORDPRESS, $version);
}
if ($this->checkJoomla($dir, $version)) {
$this->addCms(self::CMS_JOOMLA, $version);
}
if ($this->checkDle($dir, $version)) {
$this->addCms(self::CMS_DLE, $version);
}
if ($this->checkIpb($dir, $version)) {
$this->addCms(self::CMS_IPB, $version);
}
if ($this->checkWebAsyst($dir, $version)) {
$this->addCms(self::CMS_WEBASYST, $version);
}
if ($this->checkOsCommerce($dir, $version)) {
$this->addCms(self::CMS_OSCOMMERCE, $version);
}
if ($this->checkDrupal($dir, $version)) {
$this->addCms(self::CMS_DRUPAL, $version);
}
if ($this->checkMODX($dir, $version)) {
$this->addCms(self::CMS_MODX, $version);
}
if ($this->checkInstantCms($dir, $version)) {
$this->addCms(self::CMS_INSTANTCMS, $version);
}
if ($this->checkPhpBb($dir, $version)) {
$this->addCms(self::CMS_PHPBB, $version);
}
if ($this->checkVBulletin($dir, $version)) {
$this->addCms(self::CMS_VBULLETIN, $version);
}
if ($this->checkPhpShopScript($dir, $version)) {
$this->addCms(self::CMS_SHOPSCRIPT, $version);
}
}
}
function getDirList($target) {
$remove = array(
'.',
'..'
);
$directories = array_diff(scandir($target), $remove);
$res = array();
foreach ($directories as $value) {
if (is_dir($target . '/' . $value)) {
$res[] = $target . '/' . $value;
}
}
return $res;
}
function isCms($name, $version) {
for ($i = 0, $iMax = count($this->types); $i < $iMax; $i++) {
if ((strpos($this->types[$i], $name) !== false) && (strpos($this->versions[$i], $version) !== false)) {
return true;
}
}
return false;
}
function getCmsList() {
return $this->types;
}
function getCmsVersions() {
return $this->versions;
}
function getCmsNumber() {
return count($this->types);
}
function getCmsName($index = 0) {
return $this->types[$index];
}
function getCmsVersion($index = 0) {
return $this->versions[$index];
}
private function addCms($type, $version) {
$this->types[] = $type;
$this->versions[] = $version;
}
private function checkBitrix($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/bitrix')) {
$res = true;
$tmp_content = @file_get_contents($this->root_path . '/bitrix/modules/main/classes/general/version.php');
if (preg_match('|define\("SM_VERSION","(.+?)"\)|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
return $res;
}
private function checkWordpress($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/wp-admin')) {
$res = true;
$tmp_content = @file_get_contents($dir . '/wp-includes/version.php');
if (preg_match('|\$wp_version\s*=\s*\'(.+?)\'|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
return $res;
}
private function checkJoomla($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/libraries/joomla')) {
$res = true;
// for 1.5.x
$tmp_content = @file_get_contents($dir . '/libraries/joomla/version.php');
if (preg_match('|var\s+\$RELEASE\s*=\s*\'(.+?)\'|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
if (preg_match('|var\s+\$DEV_LEVEL\s*=\s*\'(.+?)\'|smi', $tmp_content, $tmp_ver)) {
$version .= '.' . $tmp_ver[1];
}
}
// for 1.7.x
$tmp_content = @file_get_contents($dir . '/includes/version.php');
if (preg_match('|public\s+\$RELEASE\s*=\s*\'(.+?)\'|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
if (preg_match('|public\s+\$DEV_LEVEL\s*=\s*\'(.+?)\'|smi', $tmp_content, $tmp_ver)) {
$version .= '.' . $tmp_ver[1];
}
}
// for 2.5.x and 3.x
$tmp_content = @file_get_contents($dir . '/libraries/cms/version/version.php');
if (preg_match('|const\s+RELEASE\s*=\s*\'(.+?)\'|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
if (preg_match('|const\s+DEV_LEVEL\s*=\s*\'(.+?)\'|smi', $tmp_content, $tmp_ver)) {
$version .= '.' . $tmp_ver[1];
}
}
}
return $res;
}
private function checkDle($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/engine/engine.php')) {
$res = true;
$tmp_content = @file_get_contents($dir . '/engine/data/config.php');
if (preg_match('|\'version_id\'\s*=>\s*"(.+?)"|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
$tmp_content = @file_get_contents($dir . '/install.php');
if (preg_match('|\'version_id\'\s*=>\s*"(.+?)"|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
return $res;
}
private function checkIpb($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/ips_kernel')) {
$res = true;
$tmp_content = @file_get_contents($dir . '/ips_kernel/class_xml.php');
if (preg_match('|IP.Board\s+v([0-9\.]+)|si', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
return $res;
}
private function checkWebAsyst($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/wbs/installer')) {
$res = true;
$tmp_content = @file_get_contents($dir . '/license.txt');
if (preg_match('|v([0-9\.]+)|si', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
return $res;
}
private function checkOsCommerce($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/includes/version.php')) {
$res = true;
$tmp_content = @file_get_contents($dir . '/includes/version.php');
if (preg_match('|([0-9\.]+)|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
return $res;
}
private function checkDrupal($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/sites/all')) {
$res = true;
$tmp_content = @file_get_contents($dir . '/CHANGELOG.txt');
if (preg_match('|Drupal\s+([0-9\.]+)|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
if (file_exists($dir . '/core/lib/Drupal.php')) {
$res = true;
$tmp_content = @file_get_contents($dir . '/core/lib/Drupal.php');
if (preg_match('|VERSION\s*=\s*\'(\d+\.\d+\.\d+)\'|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
if (file_exists($dir . 'modules/system/system.info')) {
$res = true;
$tmp_content = @file_get_contents($dir . 'modules/system/system.info');
if (preg_match('|version\s*=\s*"\d+\.\d+"|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
return $res;
}
private function checkMODX($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/manager/assets')) {
$res = true;
// no way to pick up version
}
return $res;
}
private function checkInstantCms($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/plugins/p_usertab')) {
$res = true;
$tmp_content = @file_get_contents($dir . '/index.php');
if (preg_match('|InstantCMS\s+v([0-9\.]+)|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
return $res;
}
private function checkPhpBb($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/includes/acp')) {
$res = true;
$tmp_content = @file_get_contents($dir . '/config.php');
if (preg_match('|phpBB\s+([0-9\.x]+)|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
return $res;
}
private function checkVBulletin($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
// removed dangerous code from here, see DEF-10390 for details
return $res;
}
private function checkPhpShopScript($dir, &$version) {
$version = self::CMS_VERSION_UNDEFINED;
$res = false;
if (file_exists($dir . '/install/consts.php')) {
$res = true;
$tmp_content = @file_get_contents($dir . '/install/consts.php');
if (preg_match('|STRING_VERSION\',\s*\'(.+?)\'|smi', $tmp_content, $tmp_ver)) {
$version = $tmp_ver[1];
}
}
return $res;
}
}
class CloudAssistedRequest
{
const API_URL = 'https://api.imunify360.com/api/hashes/check';
private $timeout = 60;
private $server_id = '';
public function __construct($server_id, $timeout = 60)
{
$this->server_id = $server_id;
$this->timeout = $timeout;
}
public function checkFilesByHash($list_of_hashes = array())
{
if (empty($list_of_hashes)) {
return array(
[],
[],
[],
'white' => [],
'black' => [],
'verdicts_black' => [],
);
}
$result = $this->request($list_of_hashes);
$white = isset($result['white']) ? $result['white'] : [];
$black = isset($result['black']) ? $result['black'] : [];
$verdicts_black = isset($result['verdicts_black']) ? $result['verdicts_black'] : [];
return [
$white,
$black,
$verdicts_black,
'white' => $white,
'black' => $black,
'verdicts_black' => $verdicts_black,
];
}
// /////////////////////////////////////////////////////////////////////////
private function request($list_of_hashes)
{
$url = self::API_URL . '?server_id=' . urlencode($this->server_id) . '&indexed=1';
$data = array(
'hashes' => $list_of_hashes,
);
$json_hashes = json_encode($data);
$info = [];
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL , $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST , 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST , false);
curl_setopt($ch, CURLOPT_TIMEOUT , $this->timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , $this->timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER , true);
curl_setopt($ch, CURLOPT_HTTPHEADER , array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POSTFIELDS , $json_hashes);
$response_data = curl_exec($ch);
$info = curl_getinfo($ch);
$errno = curl_errno($ch);
curl_close($ch);
}
catch (Exception $e) {
throw new Exception($e->getMessage());
}
$http_code = isset($info['http_code']) ? $info['http_code'] : 0;
if ($http_code !== 200) {
if ($errno == 28) {
throw new Exception('Reuqest timeout! Return code: ' . $http_code . ' Curl error num: ' . $errno);
}
throw new Exception('Invalid response from the Cloud Assisted server! Return code: ' . $http_code . ' Curl error num: ' . $errno);
}
$result = json_decode($response_data, true);
if (is_null($result)) {
throw new Exception('Invalid json format in the response!');
}
if (isset($result['error'])) {
throw new Exception('API server returned error!');
}
if (!isset($result['result'])) {
throw new Exception('API server returned error! Cannot find field "result".');
}
return $result['result'];
}
}
/**
* Class Report
*/
abstract class Report
{
const MAX_ROWS = 15000;
const AIBOLIT_MAX_NUMBER = 200;
/**
* Report constructor.
* @param $mnemo
* @param $path
* @param $db_location
* @param $db_meta_info_version
* @param $report_mask
* @param $extended_report
* @param $rapid_account_scan
* @param $ai_version
* @param $ai_hoster
* @param $ai_extra_warn
* @param $ai_expert
* @param $ai_smart
* @param $root_path
* @param $scan_all
* @param $specific_ext
* @param $pass
* @param $doublecheck
* @param $use_doublecheck
* @param $start
* @param $snum
* @param $max_size
* @param $add_prefix
* @param $no_prefix
* @param $small
* @param $file
* @param $echo
*/
public function __construct($mnemo, $path, $db_location, $db_meta_info_version, $report_mask, $extended_report,
$rapid_account_scan, $ai_version, $ai_hoster, $ai_extra_warn, $ai_expert, $ai_smart, $root_path, $scan_all,
$specific_ext, $pass, $doublecheck, $use_doublecheck, $start, $snum, $max_size, $add_prefix, $no_prefix, $small, $file, $echo)
{
}
/**
* Generate report
* @param $vars
* @param $scan_time
* @return mixed
*/
public function generateReport($vars, $scan_time)
{
}
/**
* Write report to file and return string to stdout after write attempt
* @return string
*/
public function write()
{
}
protected static function convertToUTF8($text)
{
if (function_exists('mb_convert_encoding')) {
$text = @mb_convert_encoding($text, 'utf-8', 'auto');
$text = @mb_convert_encoding($text, 'UTF-8', 'UTF-8');
}
return $text;
}
}
/**
* Class JSONReport report all data to JSON
*/
class JSONReport extends Report
{
const REPORT_MASK_DOORWAYS = 1<<2;
const REPORT_MASK_SUSP = 1<<3;
const REPORT_MASK_FULL = self::REPORT_MASK_DOORWAYS | self::REPORT_MASK_SUSP;
protected $raw_report;
private $extended_report;
private $rapid_account_scan;
private $ai_extra_warn;
private $ai_hoster;
private $report_mask;
private $noPrefix;
private $addPrefix;
private $mnemo;
private $small;
protected $file;
private $echo;
public function __construct($mnemo, $path, $db_location, $db_meta_info_version, $report_mask, $extended_report,
$rapid_account_scan, $ai_version, $ai_hoster, $ai_extra_warn, $ai_expert, $ai_smart, $root_path, $scan_all,
$specific_ext, $pass, $doublecheck, $use_doublecheck, $start, $snum, $max_size, $add_prefix, $no_prefix,
$small = false, $file = false, $echo = false)
{
$this->mnemo = $mnemo;
$this->ai_extra_warn = $ai_extra_warn;
$this->extended_report = $extended_report;
$this->rapid_account_scan = $rapid_account_scan;
$this->ai_hoster = $ai_hoster;
$this->report_mask = $report_mask;
$this->addPrefix = $add_prefix;
$this->noPrefix = $no_prefix;
$this->small = $small;
$this->echo = $echo;
$this->raw_report = [];
$this->raw_report['summary'] = array(
'scan_path' => $path,
'report_time' => time(),
'ai_version' => $ai_version,
'db_location' => $db_location,
'db_version' => $db_meta_info_version,
);
$this->file = $file;
if($this->file) {
@unlink($this->file);
@unlink($this->file . '.tmp');
}
}
public function generateReport($vars, $scan_time)
{
$tmp = clone $vars;
if (!$this->small) {
$tmp->criticalPHP = array_slice($tmp->criticalPHP, 0, self::MAX_ROWS);
$tmp->criticalJS = array_slice($tmp->criticalJS, 0, self::MAX_ROWS);
$tmp->notRead = array_slice($tmp->notRead, 0, self::AIBOLIT_MAX_NUMBER);
$tmp->symLinks = array_slice($tmp->symLinks, 0, self::AIBOLIT_MAX_NUMBER);
$tmp->warningPHP = array_slice($tmp->warningPHP, 0, self::AIBOLIT_MAX_NUMBER);
$tmp->bigFiles = array_slice($tmp->bigFiles, 0, self::AIBOLIT_MAX_NUMBER);
$tmp->doorway = array_slice($tmp->doorway, 0, self::AIBOLIT_MAX_NUMBER);
$this->generateJSONTables($tmp);
}
$this->generateSummary($tmp, $scan_time);
}
private function generateSummary($vars, $scan_time)
{
$summary_counters = array();
$summary_counters['redirect'] = count($vars->redirect);
$summary_counters['critical_php'] = count($vars->criticalPHP);
$summary_counters['critical_js'] = count($vars->criticalJS);
$summary_counters['cloudhash'] = count($vars->blackFiles);
$summary_counters['phishing'] = count($vars->phishing);
$summary_counters['unix_exec'] = 0; // count($g_UnixExec);
$summary_counters['iframes'] = 0; // count($g_Iframer);
$summary_counters['not_read'] = count($vars->notRead);
$summary_counters['base64'] = 0; // count($g_Base64);
$summary_counters['heuristics'] = 0; // count($g_HeuristicDetected);
$summary_counters['symlinks'] = count($vars->symLinks);
$summary_counters['big_files_skipped'] = count($vars->bigFiles);
$summary_counters['suspicious'] = count($vars->warningPHP);
$this->raw_report['summary']['counters'] = $summary_counters;
$this->raw_report['summary']['total_files'] = $vars->foundTotalFiles;
$this->raw_report['summary']['scan_time'] = $scan_time;
if ($this->extended_report && $this->rapid_account_scan) {
$this->raw_report['summary']['counters']['rescan_count'] = $vars->rescanCount;
}
}
private function generateJSONTables($vars)
{
$this->raw_report['vulners'] = $this->getRawJsonVuln($vars->vulnerable, $vars);
if (count($vars->criticalPHP) > 0) {
$this->raw_report['php_malware'] = $this->getRawJson($vars->criticalPHP, $vars, $vars->criticalPHPFragment, $vars->criticalPHPSig);
}
if (count($vars->blackFiles) > 0) {
$this->raw_report['cloudhash'] = $this->getRawBlackData($vars->blackFiles);
}
if (count($vars->criticalJS) > 0) {
$this->raw_report['js_malware'] = $this->getRawJson($vars->criticalJS, $vars, $vars->criticalJSFragment, $vars->criticalJSSig);
}
if (count($vars->notRead) > 0) {
$this->raw_report['not_read'] = $vars->notRead;
}
if ($this->ai_hoster) {
if (count($vars->phishing) > 0) {
$this->raw_report['phishing'] = $this->getRawJson($vars->phishing, $vars, $vars->phishingFragment, $vars->phishingSigFragment);
}
if (count($vars->redirect) > 0) {
$this->raw_report['redirect'] = $this->getRawJson($vars->redirect, $vars, $vars->redirectPHPFragment);
}
if (count($vars->symLinks) > 0) {
$this->raw_report['sym_links'] = $vars->symLinks;
}
}
else {
if (count($vars->adwareList) > 0) {
$this->raw_report['adware'] = $this->getRawJson($vars->adwareList, $vars, $vars->adwareListFragment);
}
if (count($vars->bigFiles) > 0) {
$this->raw_report['big_files'] = $this->getRawJson($vars->bigFiles, $vars);
}
if ((count($vars->doorway) > 0) && JSONReport::checkMask($this->report_mask, JSONReport::REPORT_MASK_DOORWAYS)) {
$this->raw_report['doorway'] = $this->getRawJson($vars->doorway, $vars);
}
if (count($vars->CMS) > 0) {
$this->raw_report['cms'] = $vars->CMS;
}
}
if ($this->ai_extra_warn) {
if ((count($vars->warningPHP) > 0) && JSONReport::checkMask($this->report_mask, JSONReport::REPORT_MASK_FULL)) {
$this->raw_report['suspicious'] = $this->getRawJson($vars->warningPHP, $vars, $vars->warningPHPFragment, $vars->warningPHPSig);
}
}
}
public static function checkMask($mask, $need)
{
return (($mask & $need) == $need);
}
public function write()
{
$ret = '';
$res = @json_encode($this->raw_report);
if ($this->file!== '.' && $l_FH = fopen($this->file . '.tmp', 'w')) {
fputs($l_FH, $res);
fclose($l_FH);
if (rename($this->file . '.tmp', $this->file)) {
$ret = "Report written to '$this->file'.";
} else {
$ret = "Cannot create '$this->file'.";
}
}
if ($this->echo) {
echo $res;
}
return $ret;
}
////////////////////////////////////////////////////////////////////////////
private function getRawJsonVuln($par_List, $vars)
{
$results = array();
$l_Src = array(
'"',
'<',
'>',
'&',
''',
'<' . '?php.'
);
$l_Dst = array(
'"',
'<',
'>',
'&',
'\'',
'<' . '?php '
);
for ($i = 0, $iMax = count($par_List); $i < $iMax; $i++) {
$l_Pos = $par_List[$i]['ndx'];
$fn = $this->addPrefix . str_replace($this->noPrefix, '', $vars->structure['n'][$l_Pos]);
if (ENCODE_FILENAMES_WITH_BASE64) {
$res['fn'] = base64_encode($fn);
} else {
$res['fn'] = self::convertToUTF8($fn);
}
$res['sig'] = $par_List[$i]['id'];
$res['ct'] = $vars->structure['c'][$l_Pos];
$res['mt'] = $vars->structure['m'][$l_Pos];
$res['et'] = $vars->structure['e'][$l_Pos];
$res['sz'] = $vars->structure['s'][$l_Pos];
$res['sigid'] = 'vuln_' . md5($vars->structure['n'][$l_Pos] . $par_List[$i]['id']);
$results[] = $res;
}
return $results;
}
private function getRawJson($par_List, $vars, $par_Details = null, $par_SigId = null)
{
$results = array();
$l_Src = array(
'"',
'<',
'>',
'&',
''',
'<' . '?php.'
);
$l_Dst = array(
'"',
'<',
'>',
'&',
'\'',
'<' . '?php '
);
for ($i = 0, $iMax = count($par_List); $i < $iMax; $i++) {
if ($par_SigId != null) {
$l_SigId = 'id_' . $par_SigId[$i];
} else {
$l_SigId = 'id_n' . rand(1000000, 9000000);
}
$l_Pos = $par_List[$i];
$fn = $this->addPrefix . str_replace($this->noPrefix, '', $vars->structure['n'][$l_Pos]);
if (ENCODE_FILENAMES_WITH_BASE64) {
$res['fn'] = base64_encode($fn);
} else {
$res['fn'] = self::convertToUTF8($fn);
}
if ($par_Details != null) {
$res['sig'] = preg_replace('|(L\d+).+__AI_MARKER__|smi', '[$1]: ...', $par_Details[$i]);
$res['sig'] = preg_replace('/[^\x20-\x7F]/', '.', $res['sig']);
$res['sig'] = preg_replace('/__AI_LINE1__(\d+)__AI_LINE2__/', '[$1] ', $res['sig']);
$res['sig'] = preg_replace('/__AI_MARKER__/', ' @!!!>', $res['sig']);
$res['sig'] = str_replace($l_Src, $l_Dst, $res['sig']);
}
$res['sig'] = self::convertToUTF8($res['sig']);
$res['ct'] = $vars->structure['c'][$l_Pos];
$res['mt'] = $vars->structure['m'][$l_Pos];
$res['sz'] = $vars->structure['s'][$l_Pos];
$res['et'] = $vars->structure['e'][$l_Pos];
$res['hash'] = $vars->structure['crc'][$l_Pos];
$res['sigid'] = $l_SigId;
if (isset($vars->structure['sha256'][$l_Pos])) {
$res['sha256'] = $vars->structure['sha256'][$l_Pos];
} else {
$res['sha256'] = '';
}
if (isset($par_SigId) && isset($this->mnemo[$par_SigId[$i]])) {
$res['sn'] = $this->mnemo[$par_SigId[$i]];
} else {
$res['sn'] = '';
}
$results[] = $res;
}
return $results;
}
private function getRawBlackData($black_list)
{
$result = array();
foreach ($black_list as $filename => $hash)
{
try {
$stat = stat($filename);
$sz = $stat['size'];
$ct = $stat['ctime'];
$mt = $stat['mtime'];
}
catch (Exception $e) {
continue;
}
$result[] = array(
'fn' => $filename,
'sig' => '',
'ct' => $ct,
'mt' => $mt,
'et' => $hash['ts'],
'sz' => $sz,
'hash' => $hash['h'],
'sigid' => crc32($filename),
'sn' => isset($hash['sn']) ? $hash['sn'] : 'cld',
);
}
return $result;
}
}
/**
* Class JSONReport report all data to JSON
*/
class PHPReport extends JSONReport
{
public function write()
{
$ret = '';
$res = @serialize($this->raw_report);
if ($l_FH = fopen($this->file . '.tmp', 'w')) {
fputs($l_FH, $res);
fclose($l_FH);
if (rename($this->file . '.tmp', $this->file)) {
$ret = "Report written to '$this->file'.";
} else {
$ret = "Cannot create '$this->file'.";
}
}
return $ret;
}
////////////////////////////////////////////////////////////////////////////
}
/**
* Class PlainReport report to text file
*/
class PlainReport extends Report
{
private $extended_report;
private $rapid_account_scan;
private $ai_extra_warn;
private $ai_hoster;
private $noPrefix;
private $addPrefix;
private $mnemo;
private $file;
private $raw_report;
public function __construct($mnemo, $path, $db_location, $db_meta_info_version, $report_mask, $extended_report,
$rapid_account_scan, $ai_version, $ai_hoster, $ai_extra_warn, $ai_expert, $ai_smart, $root_path, $scan_all,
$specific_ext, $pass, $doublecheck, $use_doublecheck, $start, $snum, $max_size, $add_prefix, $no_prefix,
$small = false, $file = false, $echo = false)
{
$this->mnemo = $mnemo;
$this->ai_extra_warn = $ai_extra_warn;
$this->extended_report = $extended_report;
$this->rapid_account_scan = $rapid_account_scan;
$this->ai_hoster = $ai_hoster;
$this->addPrefix = $add_prefix;
$this->noPrefix = $no_prefix;
$this->file = $file;
if($this->file) {
@unlink($this->file);
@unlink($this->file . '.tmp');
}
$this->raw_report = '';
if (function_exists("gethostname") && is_callable("gethostname")) {
$l_HostName = gethostname();
} else {
$l_HostName = '???';
}
$this->raw_report = "# Malware list detected by AI-Bolit (https://revisium.com/ai/) on " . date("d/m/Y H:i:s", time()) . " " . $l_HostName . "\n\n";
}
public function generateReport($vars, $scan_time = false)
{
if (!$this->ai_hoster) {
foreach ($vars->vulnerable as $l_Item) {
$this->raw_report .= '[VULNERABILITY] ' . $this->replacePathArray($vars->structure['n'][$l_Item['ndx']]) . ' - ' . $l_Item['id'] . "\n";
}
$this->raw_report .= "\n";
}
if (count($vars->criticalPHP) > 0) {
$this->raw_report .= '[SERVER MALWARE]' . "\n" . $this->printPlainList(array_slice($vars->criticalPHP, 0, self::MAX_ROWS), $vars, $vars->criticalPHPFragment) . "\n";
}
if (count($vars->criticalJS) > 0) {
$this->raw_report .= '[CLIENT MALWARE / JS]' . "\n" . $this->printPlainList(array_slice($vars->criticalJS, 0, self::MAX_ROWS), $vars, $vars->criticalJSFragment) . "\n";
}
if (count($vars->notRead) > 0) {
$this->raw_report .= '[SCAN ERROR / SKIPPED]' . "\n" . $this->printPlainList(array_slice($vars->notRead, 0, self::AIBOLIT_MAX_NUMBER), $vars) . "\n\n";
}
if (count($vars->symLinks) > 0) {
$this->raw_report .= '[SYMLINKS]' . "\n" . $this->printPlainList(array_slice($vars->symLinks, 0, self::AIBOLIT_MAX_NUMBER), $vars) . "\n\n";
}
if (!$this->ai_hoster) {
if (count($vars->phishing) > 0) {
$this->raw_report .= '[PHISHING]' . "\n" . $this->printPlainList($vars->phishing, $vars, $vars->phishingFragment) . "\n";
}
if (count($vars->redirect) > 0) {
$this->raw_report .= printList($vars->redirect, $vars, $vars->redirectPHPFragment);
}
}
if ($this->ai_extra_warn) {
if (count($vars->warningPHP) > 0) {
$this->raw_report .= '[SUSPICIOUS]' . "\n" . $this->printPlainList(array_slice($vars->warningPHP, 0, self::AIBOLIT_MAX_NUMBER), $vars, $vars->warningPHPFragment) . "\n";
}
}
if (!$this->ai_hoster) {
if (count($vars->adwareList) > 0) {
$this->raw_report .= '[ADWARE]' . "\n" . $this->printPlainList($vars->adwareList, $vars, $vars->adwareListFragment) . "\n";
}
if (count($vars->bigFiles) > 0) {
$this->raw_report .= '[BIG FILES / SKIPPED]' . "\n" . $this->printPlainList(array_slice($vars->bigFiles, 0, self::AIBOLIT_MAX_NUMBER), $vars) . "\n\n";
}
}
$this->raw_report = preg_replace('|__AI_LINE1__|smi', '[', $this->raw_report);
$this->raw_report = preg_replace('|__AI_LINE2__|smi', '] ', $this->raw_report);
$this->raw_report = preg_replace('|__AI_MARKER__|smi', ' %> ', $this->raw_report);
}
public function write()
{
$ret = '';
if ($l_FH = fopen($this->file . '.tmp', "w")) {
fputs($l_FH, $this->raw_report);
fclose($l_FH);
}
if (rename($this->file . '.tmp', $this->file)) {
$ret = "Report written to '$this->file'.";
} else {
$ret = "Cannot create '$this->file'.";
}
return $ret;
}
////////////////////////////////////////////////////////////////////////////
private function printPlainList($par_List, $vars, $par_Details = null) {
$l_Result = "";
$l_Src = array(
'"',
'<',
'>',
'&',
'''
);
$l_Dst = array(
'"',
'<',
'>',
'&',
'\''
);
for ($i = 0, $iMax = count($par_List); $i < $iMax; $i++) {
$l_Pos = $par_List[$i];
if ($par_Details != null) {
$l_Body = preg_replace('|(L\d+).+__AI_MARKER__|smi', '$1: ...', $par_Details[$i]);
$l_Body = preg_replace('/[^\x20-\x7F]/', '.', $l_Body);
$l_Body = str_replace($l_Src, $l_Dst, $l_Body);
} else {
$l_Body = '';
}
if (is_file($vars->structure['n'][$l_Pos])) {
$l_Result .= $this->addPrefix . str_replace($this->noPrefix, '', $vars->structure['n'][$l_Pos]) . "\t\t\t" . $l_Body . "\n";
} else {
$l_Result .= $this->addPrefix . str_replace($this->noPrefix, '', $vars->structure['n'][$par_List[$i]]) . "\n";
}
}
return $l_Result;
}
private function replacePathArray($par_Arr) {
array_walk($par_Arr, function(&$n) {
$n = $this->addPrefix . str_replace($this->noPrefix, '', $n);
});
return $par_Arr;
}
}
/**
* Class CSVReport report table data to CSV
*/
class CSVReport extends Report
{
const CRITICAL_PHP = 'p';
const CRITICAL_JS = 'j';
const SUSPICIOUS = 's';
const PHISHING = 'h';
const VULNERABLE = 'v';
const CLOUDHASH = 'c';
const BIG_FILES = 'b';
const NOT_READ = 'n';
const DOORWAY = 'd';
const SYMLINKS = 'm';
const ADWARE = 'a';
const CMS = 'e';
private $extended_report;
private $rapid_account_scan;
private $ai_extra_warn;
private $ai_hoster;
private $noPrefix;
private $addPrefix;
private $mnemo;
private $file;
public function __construct($mnemo, $path, $db_location, $db_meta_info_version, $report_mask, $extended_report,
$rapid_account_scan, $ai_version, $ai_hoster, $ai_extra_warn, $ai_expert, $ai_smart, $root_path, $scan_all,
$specific_ext, $pass, $doublecheck, $use_doublecheck, $start, $snum, $max_size, $add_prefix, $no_prefix,
$small = false, $file = false, $echo = false)
{
$this->mnemo = $mnemo;
$this->ai_extra_warn = $ai_extra_warn;
$this->extended_report = $extended_report;
$this->rapid_account_scan = $rapid_account_scan;
$this->ai_hoster = $ai_hoster;
$this->addPrefix = $add_prefix;
$this->noPrefix = $no_prefix;
$this->file = $file;
if($this->file) {
@unlink($this->file);
@unlink($this->file . '.tmp');
}
}
public function generateReport($vars, $scan_time = false)
{
$this->writeRawCSVVuln($vars->vulnerable, $vars);
if (count($vars->criticalPHP) > 0) {
$this->writeRawCSV($vars->criticalPHP, $vars, self::CRITICAL_PHP, $vars->criticalPHPFragment, $vars->criticalPHPSig);
}
if (count($vars->blackFiles) > 0) {
$this->writeRawBlackData($vars->blackFiles);
}
if (count($vars->criticalJS) > 0) {
$this->writeRawCSV($vars->criticalJS, $vars, self::CRITICAL_JS, $vars->criticalJSFragment, $vars->criticalJSSig);
}
if (count($vars->notRead) > 0) {
$this->writeListCSV(self::NOT_READ, $vars->notRead);
}
if ($this->ai_hoster) {
if (count($vars->phishing) > 0) {
$this->writeRawCSV($vars->phishing, $vars, self::PHISHING, $vars->phishingFragment, $vars->phishingSigFragment);
}
if (count($vars->symLinks) > 0) {
$this->writeListCSV(self::SYMLINKS, $vars->symLinks);
}
}
else {
if (count($vars->adwareList) > 0) {
$this->writeRawCSV($vars->adwareList, $vars, self::ADWARE, $vars->adwareListFragment);
}
if (count($vars->bigFiles) > 0) {
$this->writeRawCSV($vars->bigFiles, $vars, self::BIG_FILES);
}
if (count($vars->doorway) > 0) {
$this->writeRawCSV($vars->doorway, $vars, self::DOORWAY);
}
if (count($vars->CMS) > 0) {
$this->writeListCSV(self::CMS, $vars->CMS);
}
}
if ($this->ai_extra_warn) {
if (count($vars->warningPHP) > 0) {
$this->writeRawCSV($vars->warningPHP, $vars, self::SUSPICIOUS, $vars->warningPHPFragment, $vars->warningPHPSig);
}
}
}
public function write()
{
$ret = '';
if ($this->file) {
if (rename($this->file . '.tmp', $this->file)) {
$ret = "Report written to '$this->file'.";
} else {
$ret = "Cannot create '$this->file'.";
}
}
return $ret;
}
////////////////////////////////////////////////////////////////////////////
private function writeRawCSVVuln($par_List, $vars)
{
if (count($par_List) === 0) {
return;
}
$fh = fopen($this->file . '.tmp', "a+");
for ($i = 0, $iMax = count($par_List); $i < $iMax; $i++) {
$res = [];
$l_Pos = $par_List[$i]['ndx'];
$res[] = self::VULNERABLE;
$fn = $this->addPrefix . str_replace($this->noPrefix, '', $vars->structure['n'][$l_Pos]);
if (ENCODE_FILENAMES_WITH_BASE64) {
$res[] = base64_encode($fn);
} else {
$res[] = self::convertToUTF8($fn);
}
$res[] = $par_List[$i]['id'];
$res[] = $vars->structure['c'][$l_Pos];
$res[] = $vars->structure['m'][$l_Pos];
$res[] = $vars->structure['s'][$l_Pos];
$res[] = $vars->structure['e'][$l_Pos];
$res[] = 'vuln_' . md5($vars->structure['n'][$l_Pos] . $par_List[$i]['id']);
$res[] = '';
$res[] = '';
$res[] = '';
fputcsv($fh, $res);
}
fflush($fh);
fclose($fh);
}
private function writeListCSV($section, $list)
{
if (count($list) === 0) {
return;
}
$fh = fopen($this->file . '.tmp', "a+");
for ($i = 0, $iMax = count($list); $i < $iMax; $i++) {
$res = [];
$res[] = $section;
$res[] = $list[$i];
$res[] = '';
$res[] = '';
$res[] = '';
$res[] = '';
$res[] = '';
$res[] = '';
$res[] = '';
$res[] = '';
$res[] = '';
fputcsv($fh, $res);
}
fflush($fh);
fclose($fh);
}
private function writeRawCSV($par_List, $vars, $section = '', $par_Details = null, $par_SigId = null)
{
if (count($par_List) === 0) {
return;
}
$fh = fopen($this->file . '.tmp', "a+");
$l_Src = array(
'"',
'<',
'>',
'&',
''',
'<' . '?php.',
'\\'
);
$l_Dst = array(
'"',
'<',
'>',
'&',
'\'',
'<' . '?php ',
''
);
for ($i = 0, $iMax = count($par_List); $i < $iMax; $i++) {
$res = [];
$res[] = $section;
if ($par_SigId != null) {
$l_SigId = 'id_' . $par_SigId[$i];
} else {
$l_SigId = 'id_n' . rand(1000000, 9000000);
}
$l_Pos = $par_List[$i];
$fn = $this->addPrefix . str_replace($this->noPrefix, '', $vars->structure['n'][$l_Pos]);
if (ENCODE_FILENAMES_WITH_BASE64) {
$res[] = base64_encode($fn);
} else {
$res[] = self::convertToUTF8($fn);
}
if ($par_Details != null) {
$sig = preg_replace('|(L\d+).+__AI_MARKER__|smi', '[$1]: ...', $par_Details[$i]);
$sig = preg_replace('/[^\x20-\x7F]/', '.', $sig);
$sig = preg_replace('/__AI_LINE1__(\d+)__AI_LINE2__/', '[$1] ', $sig);
$sig = preg_replace('/__AI_MARKER__/', ' @!!!>', $sig);
$sig = str_replace($l_Src, $l_Dst, $sig);
$sig = self::convertToUTF8($sig);
}
$res[] = $sig;
$res[] = $vars->structure['c'][$l_Pos];
$res[] = $vars->structure['m'][$l_Pos];
$res[] = $vars->structure['s'][$l_Pos];
$res[] = $vars->structure['e'][$l_Pos];
$res[] = $l_SigId;
$res[] = $vars->structure['crc'][$l_Pos];
if (isset($par_SigId) && isset($this->mnemo[$par_SigId[$i]])) {
$res[] = $this->mnemo[$par_SigId[$i]];
} else {
$res[] = '';
}
if (isset($vars->structure['sha256'][$l_Pos])) {
$res[] = $vars->structure['sha256'][$l_Pos];
} else {
$res[] = '';
}
fputcsv($fh, $res);
}
fflush($fh);
fclose($fh);
}
private function writeRawBlackData($black_list)
{
if (count($black_list) === 0) {
return;
}
$fh = fopen($this->file . '.tmp', "a+");
foreach ($black_list as $filename => $hash)
{
$res = [];
try {
$stat = stat($filename);
$sz = $stat['size'];
$ct = $stat['ctime'];
$mt = $stat['mtime'];
}
catch (Exception $e) {
continue;
}
$res[] = self::CLOUDHASH;
$res[] = $filename;
$res[] = '';
$res[] = $ct;
$res[] = $mt;
$res[] = $sz;
$res[] = $hash['ts'];
$res[] = crc32($filename);
$res[] = $hash['h'];
$res[] = isset($hash['sn']) ? $hash['sn'] : 'cld';
$res[] = '';
fputcsv($fh, $res);
}
fflush($fh);
fclose($fh);
}
}
/**
* Class DoublecheckReport generate doublecheck file
*/
class DoublecheckReport extends Report
{
private $raw_report;
private $skip = false;
private $file = false;
private $res = '';
public function __construct($mnemo, $path, $db_location, $db_meta_info_version, $report_mask, $extended_report,
$rapid_account_scan, $ai_version, $ai_hoster, $ai_extra_warn, $ai_expert, $ai_smart, $root_path, $scan_all,
$specific_ext, $pass, $doublecheck, $use_doublecheck, $start, $snum, $max_size, $add_prefix, $no_prefix,
$small = false, $file = false, $echo = false)
{
$this->raw_report = [];
$this->file = $file;
if(file_exists($this->file)) {
$this->skip = true;
$this->res .= $this->file . ' already exists.' . PHP_EOL;
} else if ($l_FH = fopen($this->file . '.tmp', 'w')) {
fputs($l_FH, '<?php die("Forbidden"); ?>' . "\n");
fclose($l_FH);
} else {
$this->skip = true;
$this->res .= 'Error! Cannot create ' . $this->file . PHP_EOL;
}
}
public function generateReport($vars, $scan_time)
{
if ($this->skip) {
return;
}
$l_CurrPath = dirname(__FILE__);
if (!isset($vars->criticalPHP)) {
$vars->criticalPHP = array();
}
if (!isset($vars->criticalJS)) {
$vars->criticalJS = array();
}
if (!isset($vars->phishing)) {
$vars->phishing = array();
}
if (!isset($vars->adwareList)) {
$vars->adwareList = array();
}
if (!isset($vars->redirect)) {
$vars->redirect = array();
}
$this->raw_report = array_merge($vars->criticalPHP, $vars->criticalJS, $vars->phishing, $vars->adwareList, $vars->redirect);
$this->raw_report = array_values(array_unique($this->raw_report));
for ($i = 0, $iMax = count($this->raw_report); $i < $iMax; $i++) {
$this->raw_report[$i] = str_replace($l_CurrPath, '.', $vars->structure['n'][$this->raw_report[$i]]);
}
$this->raw_report = array_values(array_unique($this->raw_report));
if (count($this->raw_report) === 0) {
$this->skip = true;
unlink($this->file . '.tmp');
}
}
public function write()
{
$ret = '';
if ($this->skip) {
return $this->res;
}
$fh = fopen($this->file . '.tmp', "a+");
for ($i = 0, $iMax = count($this->raw_report); $i < $iMax; $i++) {
fputs($fh, $this->raw_report[$i] . "\n");
}
fclose($fh);
if (rename($this->file . '.tmp', $this->file)) {
$ret = "Report written to '$this->file'.";
} else {
$ret = "Cannot create '$this->file'.";
}
return $ret;
}
}
/**
* Class HTMLReport report all data to HTML
*/
class HTMLReport extends Report
{
const REPORT_MASK_DOORWAYS = 1<<2;
const REPORT_MASK_SUSP = 1<<3;
const REPORT_MASK_FULL = self::REPORT_MASK_DOORWAYS | self::REPORT_MASK_SUSP;
private $raw_report;
private $extended_report;
private $rapid_account_scan;
private $ai_extra_warn;
private $ai_hoster;
private $report_mask;
private $noPrefix;
private $addPrefix;
private $mnemo;
private $small;
private $file;
private $echo;
private $template;
private $max_size;
private $start;
private $doublecheck;
public function __construct($mnemo, $path, $db_location, $db_meta_info_version, $report_mask, $extended_report,
$rapid_account_scan, $ai_version, $ai_hoster, $ai_extra_warn, $ai_expert, $ai_smart, $root_path, $scan_all,
$specific_ext, $pass, $doublecheck, $use_doublecheck, $start, $snum, $max_size, $add_prefix, $no_prefix,
$small = false, $file = false, $echo = false)
{
$this->mnemo = $mnemo;
$this->ai_extra_warn = $ai_extra_warn;
$this->extended_report = $extended_report;
$this->rapid_account_scan = $rapid_account_scan;
$this->ai_hoster = $ai_hoster;
$this->report_mask = $report_mask;
$this->addPrefix = $add_prefix;
$this->noPrefix = $no_prefix;
$this->small = $small;
$this->echo = $echo;
$this->max_size = $max_size;
$this->start = $start;
$this->doublecheck = $doublecheck;
$this->raw_report = '';
$this->file = $file;
if($this->file) {
@unlink($this->file);
@unlink($this->file . '.tmp');
}
if (file_exists(dirname(__FILE__) . '/ai-design.html')) {
$this->template = Template::create(file_get_contents(dirname(__FILE__) . '/ai-design.html'));
} else {
$this->template = Template::create(TemplateList::MAIN_PAGE);
$this->template->set('msg1', Translate::getStr('data_table.length_menu'));
$this->template->set('msg2', Translate::getStr('data_table.zero_records'));
$this->template->set('msg3', Translate::getStr('data_table.info'));
$this->template->set('msg4', Translate::getStr('data_table.info_empty'));
$this->template->set('msg5', Translate::getStr('data_table.info_filtered'));
$this->template->set('msg6', Translate::getStr('data_table.search'));
$this->template->set('msg7', Translate::getStr('data_table.paginate.first'));
$this->template->set('msg8', Translate::getStr('data_table.paginate.previous'));
$this->template->set('msg9', Translate::getStr('data_table.paginate.next'));
$this->template->set('msg10', Translate::getStr('data_table.paginate.last'));
$this->template->set('msg11', Translate::getStr('data_table.aria.sort_ascending'));
$this->template->set('msg12', Translate::getStr('data_table.aria.sort_descending'));
}
$this->template->set('MAIN_TITLE', Translate::getStr('header.scan_report_title'));
$this->template->set('MODE', $ai_expert . '/' . $ai_smart);
if (AI_EXPERT == 0) {
$this->raw_report .= '<div class="rep">' . Translate::getStr('scan.offer_modes_after_express') . '</div>';
}
$this->template->set('HEAD_TITLE', Translate::getStr('report_for') . $this->addPrefix . str_replace($this->noPrefix, '', $root_path));
$this->template->set('SERVICE_INFO', htmlspecialchars("[" . @ini_get('mbstring.internal_encoding') . "][" . $snum . "]"));
$this->template->set('PATH_URL', (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $this->addPrefix . str_replace($this->noPrefix, '', $this->addSlash($root_path))));
$this->template->set('VERSION', $ai_version);
$this->template->set('WARN_QUICK', (($scan_all || $specific_ext) ? '' : Translate::getStr('notice.scan_express', [$pass, $pass, $doublecheck])));
if ($use_doublecheck) {
if (Translate::getStr('file.scanned_manual', [$this->doublecheck, $this->doublecheck]) != '') {
$this->raw_report .= '<div class="rep">' . Translate::getStr('file.scanned_manual', [$this->doublecheck, $this->doublecheck]) . '</div>';
}
}
}
public function generateReport($vars, $scan_time)
{
$l_ShowOffer = false;
$this->template->set('SCANNED', Translate::getStr('info.files_checked', [$vars->totalFolder, $vars->totalFiles]));
$l_Summary = '<div class="title">' . Translate::getStr('report.summary') . '</div>';
$l_Summary .= '<table cellspacing=0 border=0>';
if (count($vars->redirect) > 0) {
$l_Summary .= $this->makeSummary(Translate::getStr('mobile_redirects'), count($vars->redirect), 'crit');
}
if (count($vars->criticalPHP) > 0) {
$l_Summary .= $this->makeSummary(Translate::getStr('malware'), count($vars->criticalPHP), "crit");
}
if (count($vars->criticalJS) > 0) {
$l_Summary .= $this->makeSummary(Translate::getStr('js_virused'), count($vars->criticalJS), "crit");
}
if (count($vars->phishing) > 0) {
$l_Summary .= $this->makeSummary(Translate::getStr('phishing_pages'), count($vars->phishing), "crit");
}
if (count($vars->notRead) > 0) {
$l_Summary .= $this->makeSummary(Translate::getStr('error.read_file'), count($vars->notRead), "crit");
}
if (count($vars->warningPHP) > 0) {
$l_Summary .= $this->makeSummary(Translate::getStr('suspicious'), count($vars->warningPHP), "warn");
}
if (count($vars->bigFiles) > 0) {
$l_Summary .= $this->makeSummary(Translate::getStr('skipped_large_file'), count($vars->bigFiles), "warn");
}
if (count($vars->symLinks) > 0) {
$l_Summary .= $this->makeSummary(Translate::getStr('link.symbolic'), count($vars->symLinks), "warn");
}
$l_Summary .= "</table>";
$l_ArraySummary = array();
$l_ArraySummary["redirect"] = count($vars->redirect);
$l_ArraySummary["critical_php"] = count($vars->criticalPHP);
$l_ArraySummary["critical_js"] = count($vars->criticalJS);
$l_ArraySummary["phishing"] = count($vars->phishing);
$l_ArraySummary["unix_exec"] = 0; // count($g_UnixExec);
$l_ArraySummary["iframes"] = 0; // count($g_Iframer);
$l_ArraySummary["not_read"] = count($vars->notRead);
$l_ArraySummary["base64"] = 0; // count($g_Base64);
$l_ArraySummary["heuristics"] = 0; // count($g_HeuristicDetected);
$l_ArraySummary["symlinks"] = count($vars->symLinks);
$l_ArraySummary["big_files_skipped"] = count($vars->bigFiles);
$l_ArraySummary["suspicious"] = count($vars->warningPHP);
if (function_exists('json_encode')) {
$l_Summary .= "<!--[json]" . json_encode($l_ArraySummary) . "[/json]-->";
}
$l_Summary .= "<div class=details style=\"margin: 20px 20px 20px 0\">" . Translate::getStr('notice.files_may_not_malicious') . "</div>\n";
$this->template->set('SUMMARY', $l_Summary);
$this->raw_report .= Translate::getStr('critical.title');
if(!$this->ai_hoster) {
if (count($vars->vulnerable) > 0) {
$this->raw_report .= '<div class="note_vir">' . Translate::getStr('script.vulnerable') . ' (' . count($vars->vulnerable) . ')</div><div class="crit">';
foreach ($vars->vulnerable as $l_Item) {
$this->raw_report .= '<li>' . AibolitHelpers::makeSafeFn($vars->structure['n'][$l_Item['ndx']], $this->addPrefix, $this->noPrefix, true) . ' - ' . $l_Item['id'] . '</li>';
}
$this->raw_report .= '</div><p>' . PHP_EOL;
}
}
if (count($vars->criticalPHP) > 0) {
$criticalPHP = array_slice($vars->criticalPHP, 0, self::MAX_ROWS);
$this->raw_report .= '<div class="note_vir">' . Translate::getStr('detected.shell_scripts') . ' (' . count($criticalPHP) . ')</div><div class="crit">';
$this->raw_report .= $this->printList($criticalPHP, $vars, $vars->criticalPHPFragment, $vars->criticalPHPSig, 'table_crit');
$this->raw_report .= '</div>' . PHP_EOL;
$l_ShowOffer = true;
} else {
$this->raw_report .= '<div class="ok"><b>' . Translate::getStr('not_detected.shell_scripts') . '</b></div>';
}
if (count($vars->criticalJS) > 0) {
$criticalJS = array_slice($vars->criticalJS, 0, self::MAX_ROWS);
$this->raw_report .= '<div class="note_vir">' . Translate::getStr('detected.javascript') . ' (' . count($criticalJS) . ')</div><div class="crit">';
$this->raw_report .= $this->printList($criticalJS, $vars, $vars->criticalJSFragment, $vars->criticalJSSig, 'table_vir');
$this->raw_report .= "</div>" . PHP_EOL;
$l_ShowOffer = true;
}
if (count($vars->notRead) > 0) {
$notRead = array_slice($vars->notRead, 0, self::AIBOLIT_MAX_NUMBER);
$this->raw_report .= '<div class="note_vir">' . Translate::getStr('warning.reading_error') . ' (' . count($notRead) . ')</div><div class="crit">';
$this->raw_report .= $this->printList($notRead, $vars);
$this->raw_report .= "</div><div class=\"spacer\"></div>" . PHP_EOL;
}
if (!$this->ai_hoster) {
if (count($vars->phishing) > 0) {
$this->raw_report .= '<div class="note_vir">' . Translate::getStr('detected.phishing_pages') . ' (' . count($vars->phishing) . ')</div><div class="crit">';
$this->raw_report .= $this->printList($vars->phishing, $vars, $vars->phishingFragment, $vars->phishingSigFragment, 'table_vir');
$this->raw_report .= "</div>" . PHP_EOL;
$l_ShowOffer = true;
}
if (count($vars->redirect) > 0) {
$l_ShowOffer = true;
$this->raw_report .= '<div class="note_vir">' . Translate::getStr('suspicion.htaccess') . ' (' . count($vars->redirect) . ')</div><div class="crit">';
$this->raw_report .= "</div>" . PHP_EOL;
}
if (count($vars->symLinks) > 0) {
$symLinks = array_slice($vars->symLinks, 0, self::AIBOLIT_MAX_NUMBER);
$this->raw_report .= '<div class="note_vir">' . Translate::getStr('symlinks') . ' (' . count($symLinks) . ')</div><div class="crit">';
$this->raw_report .= nl2br(AibolitHelpers::makeSafeFn(implode("\n", $symLinks), $this->addPrefix, $this->noPrefix, true));
$this->raw_report .= "</div><div class=\"spacer\"></div>";
}
}
if ($this->ai_extra_warn) {
$l_WarningsNum = count($vars->warningPHP);
if ($l_WarningsNum > 0) {
$this->raw_report .= "<div style=\"margin-top: 20px\" class=\"title\">" . Translate::getStr('warnings') . "</div>";
}
if ($l_WarningsNum > 0) {
$warningPHP = array_slice($vars->warningPHP, 0, self::AIBOLIT_MAX_NUMBER);
$this->raw_report .= '<div class="note_warn">' . Translate::getStr('suspicion.code') . ' (' . count($warningPHP) . ')</div><div class="warn">';
$this->raw_report .= $this->printList($warningPHP, $vars, $vars->warningPHPFragment, $vars->warningPHPSig, 'table_warn');
$this->raw_report .= '</div>' . PHP_EOL;
}
}
if (!$this->ai_hoster) {
$l_WarningsNum = count($vars->bigFiles) + count($vars->adwareList) + count($vars->doorway) + count($vars->warningPHP) + count($vars->skippedFolders);
if ($l_WarningsNum > 0) {
$this->raw_report .= "<div style=\"margin-top: 20px\" class=\"title\">" . Translate::getStr('warnings') . "</div>";
}
if (count($vars->adwareList) > 0) {
$this->raw_report .= '<div class="note_warn">' . Translate::getStr('detected.bad_links') . '</div><div class="warn">';
$this->raw_report .= $this->printList($vars->adwareList, $vars, $vars->adwareListFragment);
$this->raw_report .= "</div>" . PHP_EOL;
}
if (count($vars->bigFiles) > 0) {
$bigFiles = array_slice($vars->bigFiles, 0, self::AIBOLIT_MAX_NUMBER);
$this->raw_report .= "<div class=\"note_warn\">" . Translate::getStr('skipped.large_file', [$this->max_size]) . '</div><div class="warn">';
$this->raw_report .= $this->printList($bigFiles, $vars);
$this->raw_report .= "</div>";
}
if (count($vars->doorway) > 0) {
$doorway = array_slice($vars->doorway, 0, self::AIBOLIT_MAX_NUMBER);
$this->raw_report .= '<div class="note_warn">' . Translate::getStr('suspicion.doorway') . '</div><div class="warn">';
$this->raw_report .= nl2br(AibolitHelpers::makeSafeFn(implode("\n", $doorway), $this->addPrefix, $this->noPrefix, true));
$this->raw_report .= "</div>" . PHP_EOL;
}
if (count($vars->CMS) > 0) {
$this->raw_report .= "<div class=\"note_warn\">" . Translate::getStr('founded_CMS') . "<br/>";
$this->raw_report .= nl2br(AibolitHelpers::makeSafeFn(implode("\n", $vars->CMS), $this->addPrefix, $this->noPrefix));
$this->raw_report .= "</div>";
}
}
if (function_exists('memory_get_peak_usage')) {
$this->template->set('MEMORY', Translate::getStr('memory_used') . AibolitHelpers::bytes2Human(memory_get_peak_usage()));
}
if ($l_ShowOffer) {
$this->template->set('OFFER', Translate::getStr('offer.when_has_critical'));
} else {
$this->template->set('OFFER', Translate::getStr('offer.when_no_critical'));
}
$this->template->set('OFFER_OUR_PRODUCTS', Translate::getStr('offer_our_products'));
$this->template->set('CAUTION', Translate::getStr('сaution.aibolit_file'));
$this->template->set('CREDITS', Translate::getStr('info.non_commercial_use'));
$this->template->set('FOOTER', Translate::getStr('footer'));
$this->template->set('STAT', Translate::getStr('info.time_elapsed', [$scan_time, date('d-m-Y в H:i:s', floor($this->start)), date('d-m-Y в H:i:s')]));
////////////////////////////////////////////////////////////////////////////
$this->template->set('MAIN_CONTENT', $this->raw_report);
}
public function write()
{
$ret = '';
$res = $this->template->render();
if ($l_FH = fopen($this->file . '.tmp', "w")) {
fputs($l_FH, $res);
fclose($l_FH);
}
if (rename($this->file . '.tmp', $this->file)) {
$ret = "Report written to '$this->file'.";
} else {
$ret = "Cannot create '$this->file'.";
}
return $ret;
}
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
private function makeSummary($par_Str, $par_Number, $par_Style)
{
return '<tr><td class="' . $par_Style . '" width=400>' . $par_Str . '</td><td class="' . $par_Style . '">' . $par_Number . '</td></tr>';
}
private function printList($par_List, $vars, $par_Details = null, $par_SigId = null, $par_TableName = null)
{
$i = 0;
if ($par_TableName == null) {
$par_TableName = 'table_' . rand(1000000, 9000000);
}
$l_Result = '';
$l_Result .= "<div class=\"flist\"><table cellspacing=1 cellpadding=4 border=0 id=\"" . $par_TableName . "\">";
$l_Result .= "<thead><tr class=\"tbgh" . ($i % 2) . "\">";
$l_Result .= "<th width=70%>" . Translate::getStr('path') . "</th>";
$l_Result .= "<th>" . Translate::getStr('property_change') . "</th>";
$l_Result .= "<th>" . Translate::getStr('content_change') . "</th>";
$l_Result .= "<th width=90>" . Translate::getStr('size') . "</th>";
$l_Result .= "<th width=0 class=\"hidd\">CRC32</th>";
$l_Result .= "<th width=0 class=\"hidd\"></th>";
$l_Result .= "<th width=0 class=\"hidd\"></th>";
$l_Result .= "<th width=0 class=\"hidd\"></th>";
$l_Result .= "</tr></thead><tbody>";
for ($i = 0, $iMax = count($par_List); $i < $iMax; $i++) {
if ($par_SigId != null) {
$l_SigId = 'id_' . $par_SigId[$i];
} else {
$l_SigId = 'id_z' . rand(1000000, 9000000);
}
$l_Pos = $par_List[$i];
$l_Creat = $vars->structure['c'][$l_Pos] > 0 ? date("d/m/Y H:i:s", $vars->structure['c'][$l_Pos]) : '-';
$l_Modif = $vars->structure['m'][$l_Pos] > 0 ? date("d/m/Y H:i:s", $vars->structure['m'][$l_Pos]) : '-';
$l_Size = $vars->structure['s'][$l_Pos] > 0 ? AibolitHelpers::bytes2Human($vars->structure['s'][$l_Pos]) : '-';
if ($par_Details != null) {
$l_WithMarker = preg_replace('|__AI_MARKER__|smi', '<span class="marker"> </span>', $par_Details[$i]);
$l_WithMarker = preg_replace('|__AI_LINE1__|smi', '<span class="line_no">', $l_WithMarker);
$l_WithMarker = preg_replace('|__AI_LINE2__|smi', '</span>', $l_WithMarker);
$l_Body = '<div class="details">';
if ($par_SigId != null) {
$l_Body .= '<a href="#" onclick="return hsig(\'' . $l_SigId . '\')">[x]</a> ';
}
$l_Body .= $l_WithMarker . '</div>';
} else {
$l_Body = '';
}
$l_Result .= '<tr class="tbg' . ($i % 2) . '" o="' . $l_SigId . '">';
if (is_file($vars->structure['n'][$l_Pos])) {
$l_Result .= '<td><div class="it"><a class="it">' . AibolitHelpers::makeSafeFn($this->addPrefix . str_replace($this->noPrefix, '', $vars->structure['n'][$l_Pos]), $this->addPrefix, $this->noPrefix) . '</a></div>' . $l_Body . '</td>';
} else {
$l_Result .= '<td><div class="it"><a class="it">' . AibolitHelpers::makeSafeFn($this->addPrefix . str_replace($this->noPrefix, '', $vars->structure['n'][$par_List[$i]]), $this->addPrefix, $this->noPrefix) . '</a></div></td>';
}
$l_Result .= '<td align=center><div class="ctd">' . $l_Creat . '</div></td>';
$l_Result .= '<td align=center><div class="ctd">' . $l_Modif . '</div></td>';
$l_Result .= '<td align=center><div class="ctd">' . $l_Size . '</div></td>';
$l_Result .= '<td class="hidd"><div class="hidd">' . $vars->structure['crc'][$l_Pos] . '</div></td>';
$l_Result .= '<td class="hidd"><div class="hidd">' . 'x' . '</div></td>';
$l_Result .= '<td class="hidd"><div class="hidd">' . $vars->structure['m'][$l_Pos] . '</div></td>';
$l_Result .= '<td class="hidd"><div class="hidd">' . $l_SigId . '</div></td>';
$l_Result .= '</tr>';
}
$l_Result .= "</tbody></table></div><div class=clear style=\"margin: 20px 0 0 0\"></div>";
return $l_Result;
}
private function addSlash($dir)
{
return rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
}
}
class CloudAssistedFiles
{
private $white = [];
private $black = [];
public function __construct(CloudAssistedRequest $car, $file_list, $vars)
{
$list_of_hash = [];
$list_of_filepath = [];
foreach ($file_list as $index => $filepath)
{
if (!file_exists($filepath) || !is_readable($filepath) || is_dir($filepath)) {
continue;
}
try {
$list_of_hash[] = hash('sha256', file_get_contents($filepath));
$list_of_filepath[] = $filepath;
}
catch (Exception $e) {
}
}
unset($file_list);
if ($vars->hashtable !== null) {
$vars->hashtable->add($list_of_filepath, $list_of_hash);
}
try {
list($white_raw, $black_raw, $verdicts_black_raw) = $car->checkFilesByHash($list_of_hash);
}
catch (Exception $e) {
throw $e;
}
$this->white = $this->getListOfFile($white_raw, $list_of_hash, $list_of_filepath);
$this->black = $this->getListOfFile($black_raw, $list_of_hash, $list_of_filepath, $verdicts_black_raw);
unset($white_raw, $black_raw, $verdicts_black_raw, $list_of_hash, $list_of_filepath);
}
public function getWhiteList()
{
return $this->white;
}
public function getBlackList()
{
return $this->black;
}
// =========================================================================
private function getListOfFile($data_raw, $list_of_hash, $list_of_filepath, $verdicts = [])
{
$result = [];
foreach ($data_raw as $index => $hash_index)
{
if (!isset($list_of_hash[$hash_index])) {
continue;
}
$hash_result = [
'h' => $list_of_hash[$hash_index],
'ts' => time(),
];
if ($verdicts) {
if (!isset($verdicts[$index])) {
throw new Exception('Wrong CloudAssisted format. List of verdicts has structure different from main list.');
}
$hash_result['sn'] = $verdicts[$index];
}
$result[$list_of_filepath[$hash_index]] = $hash_result;
}
return $result;
}
}
class DetachedMode
{
protected $workdir;
protected $scan_id;
protected $pid_file;
protected $report_file;
protected $csvreport_file;
protected $done_file;
protected $vars;
protected $start_time;
protected $json_report;
protected $sock_file;
protected $reports;
protected $finder;
protected $debug;
public function __construct($finder, $debug, $scan_id, $vars, $start_time, $json_report, $basedir = '/var/imunify360/aibolit/run', $sock_file = '/var/run/defence360agent/generic_sensor.sock.2')
{
$this->scan_id = $scan_id;
$this->vars = $vars;
$this->setWorkDir($basedir, $scan_id);
$this->pid_file = $this->workdir . '/pid';
$this->report_file = $this->workdir . '/report.json';
$this->csvreport_file = $this->workdir . '/report.csv';
$this->done_file = $this->workdir . '/done';
$this->start_time = $start_time;
$this->json_report = $json_report;
$this->setSocketFile($sock_file);
$this->savePid();
$this->checkWorkDir($this->workdir);
if (isset($vars->options['json_report']) && !empty($vars->options['json_report']) && $vars->options['json_report'] !== '.') {
$this->report_file = $vars->options['json_report'];
}
if (isset($vars->options['csv_report']) && !empty($vars->options['csv_report']) && $vars->options['csv_report'] !== '.') {
$this->csvreport_file = $vars->options['csv_report'];
$this->reports[CSVReport::class] = $this->csvreport_file;
}
$this->reports[JSONReport::class] = $this->report_file;
$this->finder = $finder;
$this->debug = $debug;
}
public function scanListing($listing, $use_base64)
{
$this->checkList($listing);
$this->scanFilesFromListingFile($listing, $use_base64);
$this->writeReport();
$this->complete();
}
public function scanDirectories($dir)
{
file_exists(QUEUE_FILENAME) && unlink(QUEUE_FILENAME);
$scan = new Scanner($this->finder, $this->vars);
if (method_exists($scan, 'QCR_ScanDirectories')) {
$scan->QCR_ScanDirectories($dir);
}
$this->scanFilesFromListingFile(QUEUE_FILENAME, true);
file_exists(QUEUE_FILENAME) && unlink(QUEUE_FILENAME);
$this->writeReport();
$this->complete();
unset($scan);
}
// /////////////////////////////////////////////////////////////////////////
protected function scanFilesFromListingFile($list_filepath, $use_base64 = false)
{
if (!is_file($list_filepath) || !is_readable($list_filepath)) {
$this->vars->foundTotalFiles = 0;
return;
}
$s_file = new SplFileObject($list_filepath);
$s_file->setFlags(SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);
$s_file->seek($s_file->getSize());
$this->vars->foundTotalFiles = $s_file->key();
$s_file->seek(0);
$scan = new Scanner($this->finder, $this->vars);
if (method_exists($scan, 'QCR_GoScan')) {
$scan->QCR_GoScan($s_file, null, $use_base64, false);
$scan->whitelisting();
}
unset($scan);
unset($s_file);
}
protected function checkWorkDir($workdir)
{
if (!file_exists($workdir) && !mkdir($workdir) && !is_dir($workdir)) {
die('Error! Cannot create workdir ' . $workdir . ' for detached scan.');
} elseif (file_exists($workdir) && !is_writable($workdir)) {
die('Error! Workdir ' . $workdir . ' is not writable.');
}
}
protected function checkList($listing)
{
if (!file_exists($listing) || !is_readable($listing)) {
die('Error! Listing file ' . $listing . ' not exists or not readable');
}
}
protected function savePid()
{
file_put_contents($this->pid_file, strval(getmypid()));
}
protected function writeReport()
{
$scan_time = round(microtime(true) - $this->start_time, 1);
foreach($this->json_report->call($this, $this->reports) as $json_report) {
$json_report->generateReport($this->vars, $scan_time);
$json_report->write();
}
}
protected function complete()
{
@touch($this->done_file);
$complete = array(
'method' => 'MALWARE_SCAN_COMPLETE',
'scan_id' => $this->scan_id,
);
$json_complete = json_encode($complete) . "\n";
$socket = fsockopen('unix://' . $this->sock_file);
stream_set_blocking($socket, false);
fwrite($socket, $json_complete);
fclose($socket);
}
protected function setWorkDir($dir, $scan_id)
{
$this->workdir = $dir . '/' . $scan_id;
}
protected function setSocketFile($sock)
{
$this->sock_file = $sock;
}
}
/**
* Class ResidentMode used to stay aibolit alive in memory and wait for a job.
*/
class ResidentMode
{
/**
* parent dir for all resident aibolit related
* @var string
*/
protected $resident_dir;
/**
* directory for all jobs to be processed by aibolit
* @var string
*/
protected $resident_in_dir;
/**
* directory with all the malicious files reports to be processed by imunify
* @var string
*/
protected $resident_out_dir;
/**
* resident aibolit pid
* @var string
*/
protected $aibolit_pid;
/**
* file lock used to make sure we start only one aibolit
* @var string
*/
protected $aibolit_start_lock;
/**
* status file used to make sure aibolit didn't get stuck
* @var string
*/
protected $aibolit_status_file;
/**
* number of seconds while aibolit will stay alive, while not receiving any work
* @var int
*/
protected $stay_alive;
/**
* maximum number of seconds without updating ABOLIT_STATUS_FILE,
* used to track if AIBOLIT is stuck, should be killed
* @var int
*/
protected $stuck_timeout;
/**
* number of seconds scripts would wait for aibolit to finish / send signal
* @var int
*/
protected $upload_timeout;
/**
* max number of files to pick
* @var int
*/
protected $max_files_per_notify_scan;
/**
* timestamp of last scan
* @var int
*/
protected $last_scan_time;
/**
* time to sleep between lifecycle iterations in microseconds
*/
protected $sleep_time;
protected $scannedNotify = 0;
protected $report;
protected $logger;
protected $resident_in_dir_notify;
protected $resident_in_dir_upload;
protected $blacklist;
protected $watchdog_socket;
protected $activation_socket;
protected $systemd = false;
protected $interval = 0;
protected $lastKeepAlive = 0;
protected $maxMinUid = array();
protected $signs;
protected $finder;
const JOB_UPLOAD = 'upload';
const JOB_NOTIFY = 'notify';
protected $upload_jobs = [];
protected $notify_jobs = [];
/**
* ResidentMode constructor.
*
* @param $finder
* @param $debug
* @param Closure $report
* @param $signs
* @param null $blacklist
* @param Logger|null $logger
* @param array $maxMinUid
* @param string $resident_dir
* @param int $stay_alive
* @param int $stuck_timeout
* @param int $upload_timeout
* @param int $max_files_per_notify_scan
* @param int $sleep_time
*/
public function __construct(
$finder,
$debug,
Closure $report,
$signs,
$blacklist = null,
Logger $logger = null,
$maxMinUid = array(),
$resident_dir = '/var/imunify360/aibolit/resident',
$stay_alive = 30,
$stuck_timeout = 5,
$upload_timeout = 10,
$max_files_per_notify_scan = 500,
$sleep_time = 100000
) {
$this->signs = $signs;
$this->setResidentDir($resident_dir);
$this->resident_in_dir = $this->resident_dir . '/in';
$this->resident_in_dir_upload = $this->resident_in_dir . '/upload-jobs';
$this->resident_in_dir_notify = $this->resident_in_dir . '/notify-jobs';
$this->resident_out_dir = $this->resident_dir . '/out';
$this->aibolit_pid = $this->resident_dir . '/aibolit.pid';
$this->aibolit_start_lock = $this->resident_dir . '/start.lock';
$this->aibolit_status_file = $this->resident_dir . '/aibolit.status';
$this->stay_alive = $stay_alive;
$this->stuck_timeout = $stuck_timeout;
$this->upload_timeout = $upload_timeout;
if (!empty($max_files_per_notify_scan)) {
$this->max_files_per_notify_scan = $max_files_per_notify_scan;
}
$this->sleep_time = $sleep_time;
$this->report = $report;
$this->blacklist = $blacklist;
$this->logger = $logger;
$this->maxMinUid = $maxMinUid;
umask(0);
if (!file_exists($this->resident_dir)) {
if (!mkdir($this->resident_dir, 0777, true) && !is_dir($this->resident_dir)) {
throw new Exception(sprintf('Directory "%s" was not created', $this->resident_dir));
}
}
if (!file_exists($this->resident_in_dir)) {
if (!mkdir($this->resident_in_dir, 0755) && !is_dir($this->resident_in_dir)) {
throw new Exception(sprintf('Directory "%s" was not created', $this->resident_in_dir));
}
}
if (!file_exists($this->resident_out_dir)) {
if (!mkdir($this->resident_out_dir, 0755) && !is_dir($this->resident_out_dir)) {
throw new Exception(sprintf('Directory "%s" was not created', $this->resident_out_dir));
}
}
if (!file_exists($this->resident_in_dir_notify)) {
if (!mkdir($this->resident_in_dir_notify, 0700) && !is_dir($this->resident_in_dir_notify)) {
throw new Exception(sprintf('Directory "%s" was not created', $this->resident_in_dir_notify));
}
}
if (!file_exists($this->resident_in_dir_upload)) {
if (!mkdir($this->resident_in_dir_upload, 01777) && !is_dir($this->resident_in_dir_upload)) {
throw new Exception(sprintf('Directory "%s" was not created', $this->resident_in_dir_upload));
}
}
$this->checkSpecs();
$addr = getenv('NOTIFY_SOCKET');
if ($addr[0] == '@') {
$addr = "\0";
}
if ($addr) {
$this->systemd = true;
}
if ($this->systemd) {
$this->watchdog_socket = fsockopen('udg://' . $addr);
stream_set_blocking($this->watchdog_socket, false);
$this->activation_socket = fopen('php://fd/3', 'r');
if ($this->activation_socket === false) {
die("Something went wrong with activation socket.");
}
stream_set_blocking($this->activation_socket, false);
if (getenv('WATCHDOG_USEC') !== false) {
$this->interval = intval(getenv('WATCHDOG_USEC'));
} else {
$this->interval = 1000000;
}
}
$this->finder = $finder;
$this->debug = isset($debug) ? $debug : null;
$this->lifeCycle();
}
protected function isRootWriteable($folder)
{
if (!file_exists($folder) || !is_dir($folder)) {
return false;
}
$owner_id = (int)fileowner($folder);
if (function_exists('posix_getpwuid')) {
$owner = posix_getpwuid($owner_id);
if (!isset($owner['name']) || $owner['name'] !== 'root') {
return false;
}
} elseif ($owner_id != 0) {
return false;
}
$perms = fileperms($folder);
if (($perms & 0x0100) // owner r
&& ($perms & 0x0080) // owner w
&& ($perms & 0x0040) && !($perms & 0x0800) // owner x
&& !($perms & 0x0010) // group without w
&& !($perms & 0x0002) // other without w
) {
return true;
}
return false;
}
protected function isWorldWriteable($folder)
{
if (!file_exists($folder) || !is_dir($folder)) {
return false;
}
$perms = fileperms($folder);
if (($perms & 0x0004) // other r
&& ($perms & 0x0002) // other w
&& ($perms & 0x0200) // sticky bit
) {
return true;
}
return false;
}
protected function checkSpecs()
{
if (!extension_loaded('posix')) {
die('Error! For resident scan need posix extension.');
} elseif (!$this->isRootWriteable($this->resident_in_dir_notify)) {
die('Error! Notify in dir ' . $this->resident_in_dir_notify . ' must be root writeable.');
} elseif (!$this->isWorldWriteable($this->resident_in_dir_upload)) {
die('Error! Upload in dir ' . $this->resident_in_dir_upload . ' must be world writeable.');
}
}
protected function setResidentDir($dir)
{
$this->resident_dir = $dir;
}
protected function writeReport($vars, $scan_time, $type, $file)
{
$file = basename($file);
$critPHP = count($vars->criticalPHP);
$critJS = count($vars->criticalJS);
$black = count($vars->blackFiles);
$warning = count($vars->warningPHP);
$malware = ($critPHP > 0)
|| ($critJS > 0)
|| ($black > 0)
|| ($warning > 0);
if ($malware) {
$this->debugLog("Job {$file}: Found malware. PHP: {$critPHP}; JS: {$critJS}; Black: {$black}; SUS: {$warning}");
} else {
$this->debugLog("Job {$file}: No malware found.");
}
if ($type == 'upload') {
$pid = (int)basename($file, '.upload_job');
if ($malware) {
$this->debugLog("Job {$file}: Sending SIGUSR1 to {$pid}");
posix_kill($pid, SIGUSR1);
} else {
$this->debugLog("Job {$file}: Sending SIGUSR2 to {$pid}");
posix_kill($pid, SIGUSR2);
}
} elseif ($type == 'notify' && $malware) {
$filename = basename($file, '.notify_job');
$reports[JSONReport::class] = $this->resident_out_dir . '/' . $filename . '.report';
foreach($this->report->call($this, $reports) as $report) {
$report->generateReport($vars, $scan_time);
$this->debugLog("Job {$file}: Creating report for job in {$filename}.report");
$report->write();
}
unset($reports);
}
}
/**
* @param string $pattern
* @param string $type
*
* @return bool
*/
protected function isJobFileExists($pattern, $type)
{
if ($type === self::JOB_UPLOAD) {
if (empty($this->upload_jobs)) {
$this->upload_jobs = glob($this->resident_in_dir . $pattern);
if (!empty($this->upload_jobs)) {
return true;
}
} else {
return true;
}
}
if ($type === self::JOB_NOTIFY) {
if (empty($this->notify_jobs)) {
$this->notify_jobs = glob($this->resident_in_dir . $pattern);
if (!empty($this->notify_jobs)) {
return true;
}
} else {
return true;
}
}
return false;
}
protected function isUploadJob()
{
if ($this->isJobFileExists('/upload-jobs/*.upload_job', self::JOB_UPLOAD)) {
return true;
}
return false;
}
protected function scanJob($job_file, $type)
{
$start_time = microtime(true);
$vars = new Variables();
$vars->blacklist = $this->blacklist;
$vars->maxMinUid = $type == 'notify' ? $this->maxMinUid : [];
$vars->signs = $this->signs;
$files_to_scan = array();
$count = 0;
$job = json_decode(file_get_contents($job_file));
$file = basename($job_file);
$this->debugLog("Job {$file} received from queue.");
if ($type == 'notify') {
$files_to_scan = $job->files;
$count = count($files_to_scan);
$this->debugLog("Job {$file}: notify. {$count} files to be scanned");
if ($count > $this->max_files_per_notify_scan) {
$this->debugLog("Job {$file}: Too many files to scan. Job skipped.");
// TODO: show a warning: too many files to scan, the job was skipped
return true;
}
if ($this->scannedNotify + $count > $this->max_files_per_notify_scan) {
$this->scannedNotify = 0;
unset($vars, $files_to_scan);
return false;
} else {
$this->scannedNotify += $count;
}
} elseif ($type == 'upload') {
$files_to_scan = $job->files;
$count = count($files_to_scan);
$this->debugLog("Job {$file}: upload. {$count} files to be scanned");
if ($count > 1) {
$this->debugLog("Job {$file}: Too many files to scan. Job skipped.");
// TODO: show a warning: too many files to scan, the job was skipped
return true;
}
}
$vars->foundTotalFiles = $count;
$scan = new Scanner($this->finder, $vars, $this->debug);
if (method_exists($scan, 'QCR_GoScan')) {
if ($this->systemd) {
$scan->QCR_GoScan($files_to_scan, array($this, 'keepAlive'), true, false);
} else {
$scan->QCR_GoScan($files_to_scan, null, true, false);
}
$scan->whitelisting();
}
$scan_time = round(microtime(true) - $start_time, 1);
$this->last_scan_time = time();
$this->writeReport($vars, $scan_time, $type, $job_file);
unset($vars, $files_to_scan, $scan);
if (defined('PROGRESS_LOG_FILE') && file_exists(PROGRESS_LOG_FILE)) {
@unlink(PROGRESS_LOG_FILE);
}
if (defined('CREATE_SHARED_MEMORY') && CREATE_SHARED_MEMORY) {
shmop_delete(SHARED_MEMORY);
}
if (defined('SHARED_MEMORY')) {
shmop_close(SHARED_MEMORY);
}
return true;
}
protected function isNotifyJob()
{
if ($this->isJobFileExists('/notify-jobs/*.notify_job', self::JOB_NOTIFY)) {
return true;
}
return false;
}
protected function scanUploadJob()
{
if (!empty($this->upload_jobs)) {
foreach ($this->upload_jobs as $index => $upload_job) {
$this->scanJob($upload_job, 'upload');
$file = basename($upload_job);
$this->debugLog("Job {$file}: Removing job.");
unlink($upload_job);
unset($this->upload_jobs[$index]);
}
}
}
protected function scanNotifyJob()
{
if (!empty($this->notify_jobs)) {
foreach ($this->notify_jobs as $index => $job) {
$res = $this->scanJob($job, 'notify');
if ($res) {
$file = basename($job);
$this->debugLog("Job {$file}: Removing job.");
unlink($job);
unset($this->notify_jobs[$index]);
} else {
break;
}
}
}
}
public function keepAlive()
{
if ((int)((microtime(true) - $this->lastKeepAlive) * 1000000) > $this->interval / 2) {
stream_get_contents($this->activation_socket);
fwrite($this->watchdog_socket, 'WATCHDOG=1');
$this->lastKeepAlive = microtime(true);
}
}
protected function lifeCycle()
{
$this->debugLog("Starting resident-mode loop.");
$this->last_scan_time = time();
while (true) {
if ($this->systemd) {
$this->keepAlive();
}
while ($this->isUploadJob()) {
$this->scanUploadJob();
}
while ($this->isNotifyJob() && !$this->isUploadJob()) {
$this->scanNotifyJob();
}
if ($this->last_scan_time + $this->stay_alive < time()) {
$this->debugLog("No more jobs. Shutting down.");
break;
}
touch($this->aibolit_status_file);
usleep($this->sleep_time); // 1/10 of second by default
}
if ($this->systemd) {
fclose($this->watchdog_socket);
fclose($this->activation_socket);
}
unlink($this->aibolit_status_file);
}
protected function debugLog($message)
{
if ($this->logger === null) {
return;
}
$this->logger->debug($message);
}
}
class DebugMode
{
private $debugMode = false;
private $debugPerfomance = false;
private $perfomance_stats = [];
public function __construct($debugMode, $debugPerfomance)
{
$this->debugMode = $debugMode;
$this->debugPerfomance = $debugPerfomance;
}
public function QCR_Debug($par_Str = "")
{
if ($this->debugMode) {
return;
}
$l_MemInfo = ' ';
if (function_exists('memory_get_usage')) {
$l_MemInfo .= ' curmem=' . AibolitHelpers::bytes2Human(memory_get_usage());
}
if (function_exists('memory_get_peak_usage')) {
$l_MemInfo .= ' maxmem=' . AibolitHelpers::bytes2Human(memory_get_peak_usage());
}
stdOut("\n" . date('H:i:s') . ': ' . $par_Str . $l_MemInfo . "\n");
}
public function getDebugMode()
{
return $this->debugMode;
}
public function getDebugPerfomance()
{
return $this->debugPerfomance;
}
public function addPerfomanceItem($item, $time)
{
$this->perfomance_stats[$item] = isset($this->perfomance_stats[$item]) ? $this->perfomance_stats[$item] + $time : 0;
}
public function printPerfomanceStats()
{
$keys = array_keys($this->perfomance_stats);
for ($i = 0, $iMax = count($keys); $i < $iMax; $i++) {
$this->perfomance_stats[$keys[$i]] = round($this->perfomance_stats[$keys[$i]] * 1000000);
}
arsort($this->perfomance_stats);
foreach ($this->perfomance_stats as $r => $v) {
echo $v . "\t\t" . $r . "\n";
}
}
}
class FileInfo
{
private $index = 0;
private $inode = 0;
private $filename = '';
private $size = 0;
private $created = 0;
private $modified = 0;
private $hash = 0;
private $sha256 = 0;
private $sha1file = 0;
private $content = '';
private $norm_content = '';
private $is_binary = 0;
private $hashtable = null;
/**
* @return int|string
*/
public function getSha1file()
{
if ($this->sha1file == 0) {
$this->sha1file = sha1_file($this->filename);
}
return $this->sha1file;
}
public function __construct($filename, $index, $hashtable = null)
{
$this->index = $index;
$this->filename = $filename;
$this->hashtable = $hashtable;
}
/**
* @return bool
*/
public function isBinary()
{
$header = '';
if ($this->is_binary === 0) {
if ($this->content == '') {
$header = @file_get_contents($this->filename, false, null, 0, 4);
} else {
$header = substr($this->content, 0, 4);
}
if ($header === chr(127) . 'ELF') {
$this->is_binary = true;
} else {
$this->is_binary = false;
}
unset($header);
}
return $this->is_binary;
}
/**
* @return false|mixed|string
*/
public function getContent()
{
if ($this->content == '') {
$this->content = @file_get_contents($this->filename);
}
return $this->content;
}
/**
* @return string
*/
public function getContentWithoutSpaces($max_size = false)
{
if($this->norm_content !== '') {
return $this->norm_content;
}
if (!$max_size) {
$this->norm_content = Normalization::strip_whitespace($this->getContent());
} else if(is_numeric($max_size)) {
$this->norm_content = Normalization::strip_whitespace($this->getContentBytes($max_size));
}
return $this->norm_content;
}
public function getContentBytes($max_bytes)
{
if ($this->content == '') {
$this->content = @file_get_contents($this->filename, false, null, 0, $max_bytes);
}
return $this->content;
}
/**
* @param $text
* @return string
*/
private function _hash_($text)
{
static $r;
if (empty($r)) {
for ($i = 0; $i < 256; $i++) {
if ($i < 33 or $i > 127) {
$r[chr($i)] = '';
}
}
}
return sha1(strtr($text, $r));
}
/**
* @return integer
*/
public function getIndex()
{
return $this->index;
}
/**
* @return string
*/
public function getFilename()
{
return $this->filename;
}
private function _setStat()
{
$info = stat($this->filename);
$this->size = $info['size'];
$this->created = $info['ctime'];
$this->modified = $info['mtime'];
$this->inode = $info['ino'];
}
/**
* @return int|mixed
*/
public function getSize()
{
if ($this->size == 0) {
$this->_setStat();
}
return $this->size;
}
/**
* @return int|mixed
*/
public function getInode()
{
if ($this->inode == 0) {
$this->_setStat();
}
return $this->inode;
}
/**
* @return int|mixed
*/
public function getCreated()
{
if ($this->created == 0) {
$this->_setStat();
}
return $this->created;
}
/**
* @return int|mixed
*/
public function getModified()
{
if ($this->modified == 0) {
$this->_setStat();
}
return $this->modified;
}
/**
* @return int|string
*/
public function getHash()
{
if ($this->hash == 0) {
$this->hash = $this->_hash_($this->getContentWithoutSpaces());
}
return $this->hash;
}
/**
* @return int|string
*/
public function getSha256()
{
if ($this->hashtable !== null && $this->hashtable->get($this->filename) !== false) {
$this->sha256 = $this->hashtable->get($this->filename);
}
if ($this->sha256 == 0) {
$this->sha256 = hash('sha256', $this->getContent());
}
return $this->sha256;
}
}
class HashTable
{
private $hashes = [];
public function add($paths, $hashes)
{
$this->hashes[0] = $paths;
$this->hashes[1] = $hashes;
}
public function get($filename)
{
$index = array_search($filename, $this->hashes[0]);
if ($index === false) {
return false;
}
return $this->hashes[1][$index];
}
}
class Finder
{
const LOG_AND_MAIL_PATTERN = [
'/sess\_\w*$',
'/stat/usage\_\w+\.html',
'/stat/site\_\w+\.html',
'/webstat/awstats.*\.txt',
'/awstats/awstats.*\.txt',
'/awstats/.{1,80}\.pl',
'/awstats/.{1,80}\.html',
'/logs/error\_log\..*',
'/logs/xferlog\..*',
'/logs/access\_log\..*',
'/domlogs/.+',
'/logs/cron\..*',
'/logs/exceptions/.+\.log(?:\.\d)?(?:\.gz)?$',
'/mail(?:/[^/]+)*/[^,]+,S=[^,]+,W=.+',
'/mail(?:/[^/]+)*/[^,]+,S=.+',
'/mail(?:/[^/]+)*/storage/u\.[0-9]+',
'/mail(?:/[^/]+)*/storage/m\.[0-9]+',
'/Maildir(?:/[^/]+)*/[^,]+,S=[^,]+,W=.+',
'/Maildir(?:/[^/]+)*/[^,]+,S=.+',
'^/var/ossec/.*',
];
const IMUNIFY_LOG_PATTERN = [
'/var/log/imunify360/acronis-installer\.log$',
'/var/log/imunify360/console\.log(?:\.\d)?(?:\.gz)?$',
'/var/log/imunify360/debug\.log$',
'/var/log/imunify360/error\.log$',
'/var/log/install-mod\_remoteip\.log(?:\.\d{1.4})?(?:\.pid)?r$',
'/var/log/imunify360/malware\_scan\_\d{10}\.log$',
'/var/log/imunify360/network\.log$',
'/var/log/imunify360/process\_message\.log$',
'/var/log/imunify360-webshield/access.log(?:-\d{8})?(?:.gz)?$',
'/var/log/imunify360-webshield/error.log(?:-\d{8})?(?:.gz)?$',
'/.revisium_antivirus_cache/.revisium\d+/',
'/admin/plib/modules/revisium-antivirus/library/externals/',
];
const IMUNIFY_DIRS = [
'/etc/cagefs/conf.d/ai-bolit.cfg',
'/etc/cagefs/conf.d/clamav.cfg',
'/etc/cagefs/exclude/imunify360',
'/etc/chkserv.d/imunify-antivirus',
'/etc/chkserv.d/imunify360-agent',
'/etc/cron.daily/imunify-antivirus.cron',
'/etc/cron.daily/imunify360.cron',
'/etc/imunify360-webshield',
'/etc/imunify360',
'/etc/logrotate.d/imunify360',
'/etc/nginx/conf.d/i360.remoteip.conf',
'/etc/sysconfig/imunify360',
'/opt/ai-bolit',
'/opt/alt/python35/bin/imunify360-agent',
'/opt/alt/python35/bin/imunify360-command-wrapper',
'/opt/alt/python35/lib/python3.5/site-packages/defence360agent',
'/opt/alt/python35/share/imunify360',
'/run/chkservd/imunify360-webshield',
'/run/chkservd/restart_track/imunify360-webshield',
'/run/imunify360-webshield.pid',
'/usr/bin/imunify-antivirus',
'/usr/bin/imunify360-agent',
'/usr/bin/imunify360-command-wrapper',
'/usr/lib/systemd/system/imunify-antivirus.service',
'/usr/lib/systemd/system/imunify360-pure.service',
'/usr/lib/systemd/system/imunify360-webshield',
'/usr/lib/systemd/system/imunify360.service',
'/usr/local/cpanel/base/frontend/paper_lantern/imunify',
'/usr/local/directadmin/plugins/Imunify',
'/usr/sbin/imunify360-webshield',
'/var/cache/imunify360-webshield',
'/var/cpanel/apps',
'/var/imunify360',
'/var/log/cloudlinux-backup-util'
];
const SHORT_LIST_EXT = [
'php',
'php3',
'php4',
'php5',
'php7',
'pht',
'html',
'htm',
'phtml',
'shtml',
'khtml',
'',
'ico',
'txt'
];
const SUSPICIOUS_EXT = [
'cgi',
'pl',
'o',
'so',
'py',
'sh',
'phtml',
'php3',
'php4',
'php5',
'php6',
'php7',
'pht',
'shtml'
];
private $sensitiveExt = [
'php',
'js',
'json',
'htaccess',
'html',
'htm',
'tpl',
'inc',
'css',
'txt',
'sql',
'ico',
'',
'susp',
'suspected',
'zip',
'tar'
];
const SKIP_SMART_MASK = [
'/template_\w{32}.css',
'/cache/templates/.{1,150}\.tpl\.php',
'/system/cache/templates_c/\w{1,40}\.php',
'/assets/cache/rss/\w{1,60}',
'/cache/minify/minify_\w{32}',
'/cache/page/\w{32}\.php',
'/cache/object/\w{1,10}/\w{1,10}/\w{1,10}/\w{32}\.php',
'/cache/wp-cache-\d{32}\.php',
'/cache/page/\w{32}\.php_expire',
'/cache/page/\w{32}-cache-page-\w{32}\.php',
'\w{32}-cache-com_content-\w{32}\.php',
'\w{32}-cache-mod_custom-\w{32}\.php',
'\w{32}-cache-mod_templates-\w{32}\.php',
'\w{32}-cache-_system-\w{32}\.php',
'/cache/twig/\w{1,32}/\d+/\w{1,100}\.php',
'/autoptimize/js/autoptimize_\w{32}\.js',
'/bitrix/cache/\w{32}\.php',
'/bitrix/cache/.{1,200}/\w{32}\.php',
'/bitrix/cache/iblock_find/',
'/bitrix/managed_cache/MYSQL/user_option/[^/]+/',
'/bitrix/cache/s1/bitrix/catalog\.section/',
'/bitrix/cache/s1/bitrix/catalog\.element/',
'/bitrix/cache/s1/bitrix/menu/',
'/catalog.element/[^/]+/[^/]+/\w{32}\.php',
'/bitrix/managed\_cache/.{1,150}/\.\w{32}\.php',
'/core/cache/mgr/smarty/default/.{1,100}\.tpl\.php',
'/core/cache/resource/web/resources/[0-9]{1,50}\.cache\.php',
'/smarty/compiled/SC/.{1,100}/%%.{1,200}\.php',
'/smarty/.{1,150}\.tpl\.php',
'/smarty/compile/.{1,150}\.tpl\.cache\.php',
'/files/templates_c/.{1,150}\.html\.php',
'/uploads/javascript_global/.{1,150}\.js',
'/assets/cache/rss/\w{32}',
'сore/cache/resource/web/resources/\d+\.cache\.php',
'/assets/cache/docid_\d+_\w{32}\.pageCache\.php',
'/t3-assets/dev/t3/.{1,150}-cache-\w{1,20}-.{1,150}\.php',
'/t3-assets/js/js-\w{1,30}\.js',
'/temp/cache/SC/.{1,100}/\.cache\..{1,100}\.php',
'/tmp/sess\_\w{32}$',
'/assets/cache/docid\_.{1,100}\.pageCache\.php',
'/stat/usage\_\w{1,100}\.html',
'/stat/site\_\w{1,100}\.html',
'/gallery/item/list/\w{1,100}\.cache\.php',
'/core/cache/registry/.{1,100}/ext-.{1,100}\.php',
'/core/cache/resource/shk\_/\w{1,50}\.cache\.php',
'/cache/\w{1,40}/\w+-cache-\w+-\w{32,40}\.php',
'/webstat/awstats.{1,150}\.txt',
'/awstats/awstats.{1,150}\.txt',
'/awstats/.{1,80}\.pl',
'/awstats/.{1,80}\.html',
'/inc/min/styles_\w+\.min\.css',
'/inc/min/styles_\w+\.min\.js',
'/logs/error\_log\.', '/logs/xferlog\.',
'/logs/access_log\.',
'/logs/cron\.',
'/logs/exceptions/.{1,200}\.log$',
'/hyper-cache/[^/]{1,50}/[^/]{1,50}/[^/]{1,50}/index\.html',
'/mail/new/[^,]+,S=[^,]+,W=',
'/mail/new/[^,]=,S=',
'/application/logs/\d+/\d+/\d+\.php',
'/sites/default/files/js/js_\w{32}\.js',
'/yt-assets/\w{32}\.css',
'/wp-content/cache/object/\w{1,5}/\w{1,5}/\w{32}\.php',
'/catalog\.section/\w{1,5}/\w{1,5}/\w{32}\.php',
'/simpla/design/compiled/[\w\.]{40,60}\.php',
'/compile/\w{2}/\w{2}/\w{2}/[\w.]{40,80}\.php',
'/sys-temp/static-cache/[^/]{1,60}/userCache/[\w\./]{40,100}\.php',
'/session/sess_\w{32}',
'/webstat/awstats\.[\w\./]{3,100}\.html',
'/stat/webalizer\.current',
'/stat/usage_\d+\.html'
];
const MAX_ALLOWED_PHP_HTML_IN_DIR = 600;
private $ignoreExt = [];
private $ignoreListPatterns = [];
private $ignoreList = null;
private $ignoreFilenameByRegexp = null;
private $onlyFilepathRegexp = null;
private $skipFilesOlder = null;
private $initialDir = null;
private $file_checkers = [];
private $dir_checkers = [];
private $checked_hashes = [];
private $excludes = [];
private $sym_links = [];
private $skipped_folders = [];
private $doorways = [];
private $total_dir_counter = 0;
private $total_files_counter = 0;
private $check_is_not_root;
private $check_is_not_system;
private $check_is_file;
private $ignore_quar;
private $check_file_older;
private $check_ignore_file;
private $check_ignore_filename_template;
private $check_only_filepath_template;
private $check_scope;
private $check_ext;
private $ignore_ext;
private $check_short_ext;
private $ignore_path_pattern;
private $skipRootOwner = false;
private $skipSystemOwner = false;
private $followSymlink = false;
private $ignoreQuarantine = false;
private $scanAllExt = false;
private $smartScan = false;
private $imunify_filters = false;
private $ignored_av_admin = false;
private $ignored_av_internal = false;
private $admin_watched = false;
private $ignore_symlink = true;
private $match_patterns = [];
private $no_match_patterns = [];
private $ignored_av_admin_file = '/etc/sysconfig/imunify360/malware-filters-admin-conf/processed/ignored/av-admin.txt';
private $ignored_av_internal_file = '/etc/sysconfig/imunify360/malware-filters-admin-conf/processed/ignored/av-internal.txt';
private $admin_watched_file = '/etc/sysconfig/imunify360/malware-filters-admin-conf/admin/watched.txt';
private $basedirs_file = '/etc/sysconfig/imunify360/malware-filters-admin-conf/processed/basedirs-list.txt';
private function getIgnoredAVAdmin()
{
if (!$this->ignored_av_admin) {
$this->ignored_av_admin = trim(file_get_contents($this->ignored_av_admin_file));
}
return $this->ignored_av_admin;
}
private function getIgnoredAVInternal()
{
if (!$this->ignored_av_internal) {
$this->ignored_av_internal = trim(file_get_contents($this->ignored_av_internal_file));
}
return $this->ignored_av_internal;
}
private function getBaseDirs()
{
return file($this->basedirs_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
}
private function fixTrailingSlash($path)
{
if ($path[0] !== '/') {
$path = '/' . $path;
}
return $path;
}
private function resolveBaseDirs($basedirs, $path)
{
$result = [];
$tmp = substr($path, 1);
$tmp = $this->fixTrailingSlash($tmp);
foreach ($basedirs as $dir) {
$result [] = $dir . $tmp;
}
return $result;
}
private function processWatchedItems($basedirs, $paths)
{
$result = [];
foreach ($paths as $item) {
$item = trim($item);
if ($item[0] === '#') {
continue;
} else if ($item[0] === '+') {
$result = array_merge($result, $this->resolveBaseDirs($basedirs, $item));
} else {
$result[] = $item;
}
}
return $result;
}
private function getAdminWatched()
{
if (!$this->admin_watched) {
$this->admin_watched = [];
$basedirs = $this->getBaseDirs();
$paths = file($this->admin_watched_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$this->admin_watched = $this->processWatchedItems($basedirs, $paths);
}
return $this->admin_watched;
}
public function setSmartScan()
{
$this->smartScan = true;
}
public function setImunifyFilters()
{
$this->imunify_filters = true;
}
public function setScanAll()
{
$this->scanAllExt = true;
}
public function setIgnoreExt($ext_list)
{
if (!$ext_list) {
return;
}
$this->ignoreExt = explode(',', $ext_list);
for ($i = 0, $iMax = count($this->ignoreExt); $i < $iMax; $i++) {
$this->ignoreExt[$i] = trim($this->ignoreExt[$i]);
}
$this->ignoreExt = array_flip($this->ignoreExt);
}
public function setSensitiveExt($ext_list)
{
if (!$ext_list) {
return;
}
$this->sensitiveExt = explode(",", $ext_list);
for ($i = 0, $iMax = count($this->sensitiveExt); $i < $iMax; $i++) {
if ($this->sensitiveExt[$i] == '.') {
$this->sensitiveExt[$i] = '';
}
}
$this->sensitiveExt = array_flip($this->sensitiveExt);
}
public function getSensitiveExt()
{
return array_flip($this->sensitiveExt);
}
public function setIgnoreListPatterns($filepath)
{
if (!file_exists($filepath) || !is_file($filepath) || !is_readable($filepath)) {
return;
}
$this->ignoreListPatterns = [];
$content = file_get_contents($filepath);
$list = explode("\n", $content);
foreach ($list as $pattern) {
if (trim($pattern) == '') {
continue;
}
$this->ignoreListPatterns[] = $pattern;
}
}
public function __construct()
{
$this->sensitiveExt = array_merge($this->sensitiveExt, self::SUSPICIOUS_EXT);
$this->sensitiveExt = array_flip($this->sensitiveExt);
$this->ignore_quar = function ($file) {
if (strpos($file, '/.imunify.quarantined') !== false) {
$st = stat($file);
if (!$st) {
return false;
}
return $st['uid'] !== 0;
}
return true;
};
$this->ignore_excludes = function ($file) {
$tree = $this->getTree($file);
if ($this->pathRelatesTo($tree, $this->excludes)) {
return false;
}
return true;
};
$this->check_file_older = function ($file) {
return (@filemtime($file) > $this->skipFilesOlder) || (@filectime($file) > $this->skipFilesOlder);
};
$this->check_ignore_file = function ($file) {
$tree = $this->getTree($file);
if ($this->pathRelatesTo($tree, $this->ignoreList, true)) {
return false;
}
return true;
};
$this->check_ignore_filename_template = function ($file) {
return !preg_match($this->ignoreFilenameByRegexp, basename($file));
};
$this->check_only_filepath_template = function ($file) {
return preg_match($this->onlyFilepathRegexp, $file);
};
$this->check_is_not_root = function ($file) {
$stat = stat($file);
return $stat['gid'] !== 0 && $stat['uid'] !== 0;
};
$this->check_is_not_system = function ($file) {
$stat = stat($file);
return ($stat['uid'] >= $this->skipSystemOwner[0] && $stat['uid'] <= $this->skipSystemOwner[1]);
};
$this->check_is_file = function ($file) {
return is_file($file);
};
$this->check_file_patterns = function ($file) {
foreach($this->match_patterns as $pattern) {
$match = fnmatch($pattern, $file);
if ($match) {
return $match;
}
}
return false;
};
$this->check_file_not_patterns = function ($file) {
foreach($this->no_match_patterns as $pattern) {
$match = fnmatch($pattern, $file);
if ($match) {
return !$match;
}
}
return true;
};
$this->ignore_symlink = function ($file) {
return !is_link($file);
};
$this->check_scope = function ($file) {
return strpos($file, $this->initialDir) === 0;
};
$this->ignore_dots = function ($file) {
return !($file == '.' || $file == '..');
};
$this->check_ext = function ($file) {
if ($this->scanAllExt) {
return true;
}
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
return isset($this->sensitiveExt[$ext]);
};
$this->ignore_ext = function ($file) {
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
return !isset($this->ignoreExt[$ext]);
};
$this->check_short_ext = function ($file) {
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
return in_array($ext, self::SHORT_LIST_EXT);
};
$this->ignore_path_pattern = function ($file) {
foreach ($this->ignoreListPatterns as $pattern) {
if (($pattern != '') && preg_match('#' . $pattern . '#', $file)) {
return false;
}
}
return true;
};
$this->imunify_filter = function ($file) {
if (preg_match('~' . $this->getIgnoredAVAdmin() . '~msi', $file)) {
return false;
}
if (preg_match('~' . $this->getIgnoredAVInternal() . '~msi', $file)) {
foreach ($this->getAdminWatched() as $rec_watched) {
if (fnmatch($rec_watched, $file)) {
return true;
}
}
return false;
}
return true;
};
$this->excludes = array_flip(self::IMUNIFY_DIRS);
$this->file_checkers[] = $this->ignore_path_pattern;
$this->file_checkers[] = $this->check_is_file;
$this->file_checkers[] = $this->check_ext;
$this->file_checkers[] = $this->ignore_excludes;
$this->dir_checkers[] = $this->ignore_path_pattern;
$this->dir_checkers[] = $this->ignore_excludes;
$this->dir_checkers[] = $this->ignore_dots;
}
public function setIgnoreListFile($filepath)
{
if (!file_exists($filepath) || !is_file($filepath) || !is_readable($filepath)) {
return;
}
$this->ignoreList = [];
$content = file_get_contents($filepath);
$list = explode("\n", $content);
foreach ($list as $base64_filepath) {
if ($base64_filepath !== '') {
$this->ignoreList[$base64_filepath] = '';
}
}
}
public function setIgnoreFilenames($templates)
{
if (!$templates) {
return;
}
$this->no_match_patterns = explode(',', $templates);
for ($i = 0, $iMax = count($this->no_match_patterns); $i < $iMax; $i++) {
$this->no_match_patterns[$i] = trim($this->no_match_patterns[$i]);
}
}
public function setOnlyFilepaths($templates)
{
if (empty($templates)) {
return;
}
$this->match_patterns = explode(',', $templates);
for ($i = 0, $iMax = count($this->match_patterns); $i < $iMax; $i++) {
$this->match_patterns[$i] = trim($this->match_patterns[$i]);
}
}
public function setSkipFilesOlder($unix_timestamp)
{
$this->skipFilesOlder = $unix_timestamp;
}
public function setSkipRootOwner()
{
$this->skipRootOwner = true;
}
public function setSkipSystemOwner($min_max_uid)
{
if (is_array($min_max_uid)) {
$this->skipSystemOwner = $min_max_uid;
}
}
public function setFollowSymlink()
{
$this->followSymlink = true;
}
public function isFollowSymlink()
{
return $this->followSymlink;
}
public function setIgnoreQuarantine()
{
$this->ignoreQuarantine = true;
}
private function generateCheckers()
{
$file_checkers = $this->file_checkers;
if ($this->match_patterns) {
$file_checkers[] = $this->check_file_patterns;
}
if ($this->no_match_patterns) {
$file_checkers[] = $this->check_file_not_patterns;
}
if ($this->skipRootOwner) {
$file_checkers[] = $this->check_is_not_root;
}
if ($this->skipSystemOwner && is_array($this->skipSystemOwner)) {
$file_checkers[] = $this->check_is_not_system;
}
$dir_checkers = $this->dir_checkers;
if(!$this->followSymlink) {
$dir_checkers[] = $this->ignore_symlink;
}
if ($this->ignoreQuarantine) {
$dir_checkers[] = $this->ignore_quar;
}
if ($this->skipFilesOlder) {
$file_checkers[] = $this->check_file_older;
}
if ($this->ignoreFilenameByRegexp) {
$file_checkers[] = $this->check_ignore_filename_template;
}
if (!empty($this->ignoreList)) {
$file_checkers[] = $this->check_ignore_file;
$dir_checkers[] = $this->check_ignore_file;
}
if ($this->onlyFilepathRegexp) {
$file_checkers[] = $this->check_only_filepath_template;
}
if (!empty($this->ignoreExt)) {
$file_checkers[] = $this->ignore_ext;
}
if ($this->imunify_filters) {
$file_checkers[] = $this->imunify_filter;
}
return [$file_checkers, $dir_checkers];
}
private function linkResolve($path)
{
return realpath($path);
}
private function resolve($path, $follow_symlinks)
{
if (!$follow_symlinks || !is_link($path)) {
return $path;
}
return $this->linkResolve($path);
}
private function check($file, $where, $stat = false)
{
if (!$file) {
return false;
}
if (!$stat) {
$stat = stat($file);
}
foreach ($where as $func) {
if(empty($func)) {
continue;
}
if (!$func($file, $stat)) {
return false;
}
}
return true;
}
private function needToScan($file, $file_checkers, $dir_checkers, $follow_symlinks, $stat = false)
{
if (!$file) {
return false;
}
if ($follow_symlinks) {
$file_hash = crc32($file);
if (isset($this->checked_hashes[$file_hash])) {
return false;
}
$this->checked_hashes[$file_hash] = '';
}
if (!$stat) {
$stat = @stat($file);
if (!$stat) {
return false;
}
}
if (!$this->check($file, $file_checkers, $stat)) {
return false;
}
if (!$this->check($file, $dir_checkers, $stat)) {
return false;
}
return true;
}
private function walk($path, $file_checkers, $dir_checkers, $follow_symlinks)
{
$l_DirCounter = 0;
$l_DoorwayFilesCounter = 0;
$l_SkipSample = [];
if ($follow_symlinks) {
$root_hash = crc32($path);
if (isset($this->checked_hashes[$root_hash])) {
return;
}
$this->checked_hashes[$root_hash] = '';
}
# will not iterate dir, if it should be ignored
if (!$this->check($path, $dir_checkers)) {
$this->skipped_folders[] = $path;
return;
}
$dirh = @opendir($path);
if ($dirh === false) {
return;
}
while (($entry = readdir($dirh)) !== false) {
if ($entry == '.' || $entry == '..') {
continue;
}
$entry = $path . DIRECTORY_SEPARATOR . $entry;
if (is_link($entry)) {
$this->sym_links[] = $entry;
if (!$follow_symlinks) {
continue;
}
$real_path = $this->resolve($entry, true);
} else {
$real_path = $entry;
}
if (is_dir($entry)) {
$l_DirCounter++;
if ($l_DirCounter > self::MAX_ALLOWED_PHP_HTML_IN_DIR) {
$this->doorways[] = $path;
$l_DirCounter = -655360;
}
$this->total_dir_counter++;
yield from $this->walk($real_path, $file_checkers, $dir_checkers, $follow_symlinks);
} else if (is_file($entry)) {
$stat = stat($entry);
if (!$stat) {
continue;
}
if ($this->check_short_ext->call($this, $entry)) {
$l_DoorwayFilesCounter++;
if ($l_DoorwayFilesCounter > self::MAX_ALLOWED_PHP_HTML_IN_DIR) {
$this->doorways[] = $path;
$l_DoorwayFilesCounter = -655360;
}
}
$need_to_scan = $this->needToScan($real_path, $file_checkers, $dir_checkers, $follow_symlinks, $stat);
if ($need_to_scan) {
$this->total_files_counter++;
yield $real_path;
}
}
}
closedir($dirh);
}
private function expandPath($path, $file_checkers, $dir_checkers, $follow_symlinks)
{
if ($path) {
if (is_dir($path)) {
yield from $this->walk($path, $file_checkers, $dir_checkers, $follow_symlinks);
} else {
$need_to_scan = $this->needToScan($path, $file_checkers, $dir_checkers, $follow_symlinks);
if ($need_to_scan) {
yield $path;
}
}
}
}
public function find($target)
{
if (is_string($target) && substr($target, -1) == DIRECTORY_SEPARATOR) {
$target = substr($target, 0, -1);
}
$this->ignoreListPatterns = array_merge($this->ignoreListPatterns, self::IMUNIFY_LOG_PATTERN, self::LOG_AND_MAIL_PATTERN);
if($this->smartScan) {
$this->ignoreListPatterns = array_merge($this->ignoreListPatterns, self::SKIP_SMART_MASK);
}
# We shouldn't use iglob for list of paths,
# cause they cannot contain * or regexp
# but can contain invalid sequence e.g. [9-0]
list($file_checkers, $dir_checkers) = $this->generateCheckers();
$paths = is_array($target) ? $target : new GlobIterator($target, FilesystemIterator::CURRENT_AS_PATHNAME);
foreach ($paths as $path) {
$this->initialDir = realpath($path);
$path = $this->linkResolve($path);
yield from $this->expandPath($path, $file_checkers, $dir_checkers, $this->followSymlink);
}
}
private function convertTemplatesToRegexp($templates)
{
return '~(' . str_replace([',', '.', '*'], ['|', '\\.', '.*'], $templates) . ')~i';
}
private function getTree($file)
{
$tree = [];
$path = $file;
$i = 1;
while ($path !== '.' && $path !== '/') {
$path = dirname($path, $i);
$tree[] = $path;
$i++;
}
$tree[] = $file;
return $tree;
}
private function pathRelatesTo($tree, $pathes, $base64 = false)
{
foreach ($tree as $path) {
if ($base64) {
$path = base64_encode($path);
}
if (isset($pathes[$path])) {
return true;
}
}
return false;
}
public function getSymlinks()
{
return $this->sym_links;
}
public function getDoorways()
{
return $this->doorways;
}
public function skippedDirs()
{
return $this->skipped_folders;
}
public function getTotalDirs()
{
return $this->total_dir_counter;
}
public function getTotalFiles()
{
return $this->total_files_counter;
}
}
class Scanner
{
private $addPrefix;
private $noPrefix;
private $finder;
private $vars;
private $debug;
public function __construct($finder, $vars, $debug = null)
{
$this->addPrefix = isset($vars->options['addprefix']) ? $vars->options['addprefix'] : '';
$this->noPrefix = isset($vars->options['noprefix']) ? $vars->options['noprefix'] : '';;
$this->finder = $finder;
$this->vars = $vars;
$this->suspicious = isset($vars->options['with-suspicious']);
$this->debug = $debug;
}
private function CloudAssitedFilter($files_list)
{
$black_files = [];
$white_files = [];
try {
$car = Factory::instance()->create(CloudAssistedRequest::class, [CLOUD_ASSIST_TOKEN]);
$cloud_assist_files = new CloudAssistedFiles($car, $files_list, $this->vars);
$white_files = $cloud_assist_files->getWhiteList();
$black_files = $cloud_assist_files->getBlackList();
unset($cloud_assist_files);
}
catch (\Exception $e) {
if (isset($this->debug)) {
$this->debug->QCR_Debug($e->getMessage());
}
}
$this->vars->blackFiles = array_diff_assoc(array_merge($this->vars->blackFiles, $black_files), $white_files);
return array_diff($files_list, array_keys($black_files), array_keys($white_files));
}
public function QCR_ScanDirectories($l_RootDir)
{
static $l_Buffer = '';
if (isset($this->debug)) {
$this->debug->QCR_Debug('Scan ' . $l_RootDir);
}
$listFiles = $this->finder->find($l_RootDir);
foreach ($listFiles as $l_FileName) {
if (ONE_PASS) {
$this->QCR_ScanFile($l_FileName, $this->vars, null, $this->vars->counter++);
} else {
$l_Buffer .= FilepathEscaper::encodeFilepathByBase64($l_FileName) . "\n";
}
$this->vars->counter++;
if (strlen($l_Buffer) > 32000) {
file_put_contents(QUEUE_FILENAME, $l_Buffer, FILE_APPEND) || die2("Cannot write to file " . QUEUE_FILENAME);
$l_Buffer = '';
}
}
$this->vars->symLinks = $this->finder->getSymlinks();
$this->vars->doorway = $this->finder->getDoorways();
$this->vars->foundTotalDirs = $this->finder->getTotalDirs();
$this->vars->foundTotalFiles = $this->finder->getTotalFiles();
if (!empty($l_Buffer)
&& (isset($this->vars->options['use-template-in-path'])
|| $l_RootDir == ROOT_PATH
)
) {
file_put_contents(QUEUE_FILENAME, $l_Buffer, FILE_APPEND) || die2("Cannot write to file " . QUEUE_FILENAME);
$l_Buffer = '';
}
unset($listFiles);
}
public function QCR_GoScan($s_file, $callback = null, $base64_encoded = true, $skip_first_line = false)
{
if (isset($this->debug)) {
$this->debug->QCR_Debug('QCR_GoScan ');
}
try {
$i = 0;
$filesForCloudAssistedScan = [];
foreach ($s_file as $index => $filepath_encoded) {
if ($skip_first_line && $index == 0) {
$i = 1;
continue;
}
$filepath = $base64_encoded ? FilepathEscaper::decodeFilepathByBase64($filepath_encoded) : $filepath_encoded;
if (!file_exists($filepath) || !is_file($filepath) || !is_readable($filepath)) {
continue;
}
if (!empty($this->vars->maxMinUid)) {
$stat = stat($filepath);
if (!($stat['uid'] >= $this->vars->maxMinUid[0] && $this->stat['uid'] <= $this->vars->maxMinUid[1])) {
continue;
}
}
$filesize = filesize($filepath);
if ($filesize > MAX_FILE_SIZE_FOR_CHECK || $filesize < MIN_FILE_SIZE_FOR_CHECK) {
continue;
}
if (substr($filepath, -1) == DIR_SEPARATOR || !defined('CLOUD_ASSIST_TOKEN')) {
$this->QCR_ScanFile($filepath, $this->vars, $callback, $i++);
continue;
}
if ($this->isFileTooBigForCloudscan($filesize)) {
$this->QCR_ScanFile($filepath, $this->vars, $callback, $i++);
continue;
}
// collecting files to scan with Cloud Assistant
$filesForCloudAssistedScan[] = $filepath;
}
if (count($filesForCloudAssistedScan) == 0) {
return;
}
if (defined('RAPID_ACCOUNT_SCAN')) {
$cloud_assited_storage = Factory::instance()->create(CloudAssistedStorage::class, [RAPID_ACCOUNT_SCAN]);
$storage = Factory::instance()->create(RapidScanStorage::class, [RAPID_ACCOUNT_SCAN]);
/** @var RapidAccountScan $scanner */
$scanner = Factory::instance()->create(RapidAccountScan::class, [$this, $storage, $cloud_assited_storage, &$this->vars, $i]);
$scanner->scan($filesForCloudAssistedScan, $this->vars, constant('RapidAccountScan::RESCAN_' . RAPID_ACCOUNT_SCAN_TYPE));
if ($scanner->getStrError()) {
if (isset($this->debug)) {
$this->debug->QCR_Debug('Rapid scan log: ' . $scanner->getStrError());
}
}
$this->vars->rescanCount += $scanner->getRescanCount();
} else {
$scan_bufer_files = function ($files_list, &$i) use ($callback) {
$this->vars->hashtable = new HashTable();
$files_to_scan = $this->CloudAssitedFilter($files_list);
foreach ($files_to_scan as $filepath) {
$this->QCR_ScanFile($filepath, $this->vars, $callback, $i++);
}
$this->vars->hashtable = null;
};
$files_bufer = [];
foreach ($filesForCloudAssistedScan as $l_Filename) {
$files_bufer[] = $l_Filename;
if (count($files_bufer) >= CLOUD_ASSIST_LIMIT) {
$scan_bufer_files($files_bufer, $i);
$files_bufer = [];
}
}
if (count($files_bufer)) {
$scan_bufer_files($files_bufer, $i);
}
unset($files_bufer);
}
} catch (Exception $e) {
if (isset($this->debug)) {
$this->debug->QCR_Debug($e->getMessage());
}
}
}
public function QCR_ScanFile($l_Filename, $vars, $callback = null, $i = 0, $show_progress = true)
{
$return = array(RapidScanStorageRecord::RX_GOOD, '', '');
$g_SkipNextCheck = false;
/** @var CriticalFileSpecification $criticalFileSpecification */
$criticalFileSpecification = Factory::instance()->create(CriticalFileSpecification::class);
if ($vars->fileinfo !== null) {
if($l_Filename !== $vars->fileinfo->getFilename()) {
unset($file);
$vars->fileinfo = null;
}
}
if ($vars->fileinfo == null) {
$file = new FileInfo($l_Filename, $i, $vars->hashtable);
$vars->fileinfo = $file;
}
$file = $vars->fileinfo;
$vars->crc = 0;
$l_CriticalDetected = false;
if (substr($l_Filename, -1) == DIR_SEPARATOR) {
// FOLDER
$vars->structure['n'][$i] = $l_Filename;
$vars->totalFolder++;
printProgress($vars->files_and_ignored, $l_Filename, $vars);
unset($file);
$vars->fileinfo = null;
return null;
}
if (isset($this->debug)) {
$this->debug->QCR_Debug('Scan file ' . $l_Filename);
}
if ($show_progress) {
printProgress(++$vars->files_and_ignored, $l_Filename, $vars);
}
$l_Ext = strtolower(pathinfo($l_Filename, PATHINFO_EXTENSION));
$l_Content = '';
if ($file->isBinary()) {
if(defined('USE_HEURISTICS') || defined('USE_HEURISTICS_SUSPICIOUS')) {
$vars->crc = $file->getSha1file();
$this->AddResult($file, $i, $vars);
if (defined('USE_HEURISTICS')) {
$vars->criticalPHP[] = $i;
$vars->criticalPHPFragment[] = 'SMW-HEUR-ELF';
$vars->criticalPHPSig[] = 'SMW-HEUR-ELF';
}
if (defined('USE_HEURISTICS_SUSPICIOUS')) {
$vars->warningPHP[] = $i;
$vars->warningPHPFragment[] = 'SMW-HEUR-ELF';
$vars->warningPHPSig[] = 'SMW-HEUR-ELF';
}
$return = array(RapidScanStorageRecord::HEURISTIC, 'SMW-HEUR-ELF', 'SMW-HEUR-ELF');
unset($file);
$vars->fileinfo = null;
return $return;
}
unset($file);
$vars->fileinfo = null;
return null;
}
// FILE
$is_too_big = $this->isFileTooBigForScanWithSignatures($file->getSize());
$hash = $file->getSha1file();
$l_TSStartScan = microtime(true);
if ($this->check_binmalware($hash)) {
$vars->totalFiles++;
$vars->crc = $hash;
$this->AddResult($file, $i, $vars);
$vars->criticalPHP[] = $i;
$vars->criticalPHPFragment[] = "BIN-" . $vars->crc;
$vars->criticalPHPSig[] = "bin_" . $vars->crc;
$return = array(RapidScanStorageRecord::RX_MALWARE, "bin_" . $vars->crc, "BIN-" . $vars->crc);
} elseif (!MAX_SIZE_SCAN_BYTES && $is_too_big) {
$vars->bigFiles[] = $i;
if (function_exists('aibolit_onBigFile')) {
aibolit_onBigFile($l_Filename);
}
$this->AddResult($file, $i, $vars);
if ((!AI_HOSTER) && $criticalFileSpecification->satisfiedBy($l_Ext, 'extensions')) {
$vars->criticalPHP[] = $i;
$vars->criticalPHPFragment[] = "BIG FILE. SKIPPED.";
$vars->criticalPHPSig[] = "big_1";
}
} else {
$vars->totalFiles++;
$file_type = filetype($l_Filename);
if ($file_type == 'file' || (isset($vars->options['follow-symlink']) && $file_type == 'link')) {
if ($is_too_big && MAX_SIZE_SCAN_BYTES) {
$l_Content = $file->getContentBytes(MAX_SIZE_SCAN_BYTES);
} else {
$l_Content = $file->getContent();
}
$l_Unwrapped = $file->getContentWithoutSpaces(MAX_SIZE_SCAN_BYTES);
}
if (($l_Content == '' || $l_Unwrapped == '') && $file->getSize() > 0) {
$vars->notRead[] = $i;
if (function_exists('aibolit_onReadError')) {
aibolit_onReadError($l_Filename, 'io');
}
$return = array(RapidScanStorageRecord::CONFLICT, 'notread','');
$this->AddResult('[io] ' . $l_Filename, $i, $vars);
unset($file);
$vars->fileinfo = null;
return $return;
}
// ignore itself
if (strpos($l_Content, '7b5179740edc2306bb88dffea8c82fcd') !== false) {
unset($file);
$vars->fileinfo = null;
return false;
}
$vars->crc = $file->getHash();
$l_UnicodeContent = Encoding::detectUTFEncoding($l_Content);
//$l_Unwrapped = $l_Content;
// check vulnerability in files
$l_CriticalDetected = $this->CheckVulnerability($l_Filename, $i, $l_Content, $vars);
if ($l_UnicodeContent !== false) {
if (Encoding::iconvSupported()) {
$l_Unwrapped = Encoding::convertToCp1251($l_UnicodeContent, $l_Unwrapped);
} else {
$vars->notRead[] = $i;
if (function_exists('aibolit_onReadError')) {
aibolit_onReadError($l_Filename, 'ec');
}
$return = array(RapidScanStorageRecord::CONFLICT, 'no_iconv', '');
$this->AddResult('[ec] ' . $l_Filename, $i, $vars);
}
}
// critical
$g_SkipNextCheck = false;
if ((!AI_HOSTER) || AI_DEOBFUSCATE) {
$l_DeobfObj = new Deobfuscator($l_Unwrapped, $l_Content);
$l_DeobfType = $l_DeobfObj->getObfuscateType($l_Unwrapped);
}
if ($l_DeobfType != '') {
$l_Unwrapped = $l_DeobfObj->deobfuscate();
$g_SkipNextCheck = $this->checkFalsePositives($l_Filename, $l_Unwrapped, $l_DeobfType, $vars);
} else {
if (DEBUG_MODE) {
stdOut("\n...... NOT OBFUSCATED\n");
}
}
$l_Unwrapped = Normalization::normalize($l_Unwrapped);
$precheck = function ($type, $content) use ($l_Ext, $criticalFileSpecification) {
$critical_params = [
'CriticalPHP' => ['extensions', 'critical_content'],
'CriticalPHP_2' => ['extensions', 'critical_content'],
'CriticalPHP_3' => ['extensions', 'critical_content'],
'CriticalPHP_4' => ['extensions', 'critical_content'],
'CriticalPHP_5' => ['extensions', 'critical_content'],
'CriticalPHPGIF' => ['extensions', 'critical_content'],
'CriticalPHPUploader' => ['extensions', 'critical_content'],
'CriticalJS' => ['js_extensions', 'critical_js_content'],
'CriticalJS_PARA' => ['js_extensions', 'critical_js_content'],
'Phishing' => ['phish_extensions', 'critical_phish_content'],
];
if (!SMART_SCAN || !isset($critical_params[$type])) {
return true;
}
if (isset($check_params[$type])) {
$this->satisfiedBySmartScan($criticalFileSpecification, $l_Ext, $content, $check_params[$type][0], $check_params[$type][1]);
}
};
$processResult = function ($checker, $content, $l_Pos, $l_SigId, &$return) use (&$vars, $l_Ext, $i) {
$checkers = [
'CriticalPHP' => ['criticalPHP', 'criticalPHPFragment', 'criticalPHPSig'],
'CriticalPHP_2' => ['criticalPHP', 'criticalPHPFragment', 'criticalPHPSig'],
'CriticalPHP_3' => ['criticalPHP', 'criticalPHPFragment', 'criticalPHPSig'],
'CriticalPHP_4' => ['criticalPHP', 'criticalPHPFragment', 'criticalPHPSig'],
'CriticalPHP_5' => ['criticalPHP', 'criticalPHPFragment', 'criticalPHPSig'],
'CriticalPHPGIF' => ['criticalPHP', 'criticalPHPFragment', 'criticalPHPSig'],
'CriticalPHPUploader' => ['criticalPHP', 'criticalPHPFragment', 'criticalPHPSig'],
'CriticalJS' => ['criticalJS', 'criticalJSFragment', 'criticalJSSig'],
'CriticalJS_PARA' => ['criticalJS', 'criticalJSFragment', 'criticalJSSig'],
'WarningPHP' => ['warningPHP', 'warningPHPFragment', 'warningPHPSig'],
'Phishing' => ['phishing', 'phishingFragment', 'phishingSigFragment'],
'Adware' => ['adwareList', 'adwareListFragment'],
];
if (strpos($checker, 'Critical') !== false) {
if ($l_Ext == 'js') {
$checker = 'CriticalJS';
}
$return = array(RapidScanStorageRecord::RX_MALWARE, $l_SigId, $this->getFragment($content, $l_Pos));
}
if ($checker == 'WarningPHP' || $checker == 'Phishing') {
$return = array(RapidScanStorageRecord::RX_SUSPICIOUS, $l_SigId, $this->getFragment($content, $l_Pos));
}
$vars->{$checkers[$checker][0]}[] = $i;
$vars->{$checkers[$checker][1]}[] = $this->getFragment($content, $l_Pos);
if (isset($checkers[$checker][2])) {
$vars->{$checkers[$checker][2]}[] = $l_SigId;
}
};
$l_Pos = 0;
$l_SigId = '';
if (!$g_SkipNextCheck) {
$checkers['CriticalPHP'] = true;
if (AI_EXPERT_MODE > 0) {
$checkers['CriticalPHP_3'] = true;
}
if (AI_EXPERT_MODE > 1) {
$checkers['CriticalPHP_2'] = true;
}
$checkers['CriticalPHP_4'] = true;
if (AI_EXPERT_MODE > 0) {
$checkers['CriticalPHP_5'] = true;
}
if (!AI-HOSTER && AI_EXPERT > 0 && $l_Ext == 'php') {
$checkers['CriticalPHPGIF'] = true;
}
if (!AI-HOSTER && AI_EXPERT > 1 && strpos($l_Ext, 'ph') !== false) {
$checkers['CriticalPHPUploader'] = true;
}
$checkers['CriticalJS'] = false;
if (AI_EXPERT_MODE > 1) {
$checkers['CriticalJS_PARA'] = false;
}
if ($this->suspicious) {
$checkers['WarningPHP'] = false;
$checkers['Phishing'] = true;
$checkers['Adware'] = false;
}
$g_SkipNextCheck = ScanUnit::QCR_ScanContent($checkers, $l_Unwrapped, $l_Content, $vars->signs, $this->debug, $precheck,
$processResult, $return);
}
if (!$g_SkipNextCheck && isset($checkers['Adware'])) {
// articles
if (stripos($l_Filename, 'article_index')) {
$vars->adwareList[] = $i;
$l_CriticalDetected = true;
}
}
} // end of if (!$g_SkipNextCheck) {
//printProgress(++$_files_and_ignored, $l_Filename);
$this->delayWithCallback(SCAN_DELAY, $callback);
$l_TSEndScan = microtime(true);
if ($l_TSEndScan - $l_TSStartScan >= 0.5) {
$this->delayWithCallback(SCAN_DELAY, $callback);
}
if ($g_SkipNextCheck || $l_CriticalDetected) {
$this->AddResult($file, $i, $vars);
}
unset($file);
$vars->fileinfo = null;
unset($l_Unwrapped);
unset($l_Content);
return $return;
}
private function callCallback($callback)
{
if ($callback !== null) {
call_user_func([$this, $callback]);
}
}
private function delayWithCallback($delay, $callback)
{
$delay *= 1000;
$this->callCallback($callback);
while ($delay > 500000) {
$delay -= 500000;
usleep(500000);
$this->callCallback($callback);
}
usleep($delay);
$this->callCallback($callback);
}
public function AddResult($file, $i, $vars)
{
if (is_string($file)) {
$vars->structure['n'][$i] = $file;
return;
}
$vars->structure['n'][$i] = $file->getFilename();
$vars->structure['s'][$i] = $file->getSize();
$vars->structure['c'][$i] = $file->getCreated();
$vars->structure['m'][$i] = $file->getModified();
$vars->structure['e'][$i] = time();
$vars->structure['crc'][$i] = $vars->crc;
if (!$this->isFileTooBigForScanWithSignatures($file->getSize())) {
$vars->structure['sha256'][$i] = $file->getSha256();
}
}
private function satisfiedBySmartScan($fs, $ext, $content, $ext_table, $content_table)
{
$skip = $fs->satisfiedBy($ext, $ext_table) && $fs->satisfiedByContent($content, $content_table);
if ($skip && DEBUG_MODE) {
echo "Skipped file, not critical.\n";
}
return $skip;
}
///////////////////////////////////////////////////////////////////////////
private function CheckVulnerability($par_Filename, $par_Index, $par_Content, $vars)
{
global $g_CmsListDetector, $defaults;
$use_cms_detector = ($g_CmsListDetector instanceof CmsVersionDetector);
if (!$use_cms_detector && !$defaults['use_template_in_path']) {
return false;
}
$l_Vuln = array();
$par_Filename = strtolower($par_Filename);
if ((strpos($par_Filename, 'libraries/joomla/session/session.php') !== false) && (strpos($par_Content, '&& filter_var($_SERVER[\'HTTP_X_FORWARDED_FOR') === false)) {
$l_Vuln['id'] = 'RCE : https://docs.joomla.org/Security_hotfixes_for_Joomla_EOL_versions';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
if ($use_cms_detector
&& (strpos($par_Filename, 'administrator/components/com_media/helpers/media.php') !== false)
&& (strpos($par_Content, '$format == \'\' || $format == false ||') === false)
) {
if ($g_CmsListDetector->isCms(CmsVersionDetector::CMS_JOOMLA, '1.5')) {
$l_Vuln['id'] = 'AFU : https://docs.joomla.org/Security_hotfixes_for_Joomla_EOL_versions';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if ($use_cms_detector
&& (strpos($par_Filename, 'joomla/filesystem/file.php') !== false)
&& (strpos($par_Content, '$file = rtrim($file, \'.\');') === false)
) {
if ($g_CmsListDetector->isCms(CmsVersionDetector::CMS_JOOMLA, '1.5')) {
$l_Vuln['id'] = 'AFU : https://docs.joomla.org/Security_hotfixes_for_Joomla_EOL_versions';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if ((strpos($par_Filename, 'editor/filemanager/upload/test.html') !== false) || (stripos($par_Filename, 'editor/filemanager/browser/default/connectors/php/') !== false) || (stripos($par_Filename, 'editor/filemanager/connectors/uploadtest.html') !== false) || (strpos($par_Filename, 'editor/filemanager/browser/default/connectors/test.html') !== false)) {
$l_Vuln['id'] = 'AFU : FCKEDITOR : http://www.exploit-db.com/exploits/17644/ & /exploit/249';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
if ((strpos($par_Filename, 'inc_php/image_view.class.php') !== false) || (strpos($par_Filename, '/inc_php/framework/image_view.class.php') !== false)) {
if (strpos($par_Content, 'showImageByID') === false) {
$l_Vuln['id'] = 'AFU : REVSLIDER : http://www.exploit-db.com/exploits/35385/';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if (strpos($par_Filename, 'includes/database/database.inc') !== false) {
if (strpos($par_Content, 'foreach ($data as $i => $value)') !== false) {
$l_Vuln['id'] = 'SQLI : DRUPAL : CVE-2014-3704';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if (strpos($par_Filename, 'engine/classes/min/index.php') !== false) {
if (strpos($par_Content, 'tr_replace(chr(0)') === false) {
$l_Vuln['id'] = 'AFD : MINIFY : CVE-2013-6619';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if ((strpos($par_Filename, 'timthumb.php') !== false) || (strpos($par_Filename, 'thumb.php') !== false) || (strpos($par_Filename, 'cache.php') !== false) || (strpos($par_Filename, '_img.php') !== false)) {
if (strpos($par_Content, 'code.google.com/p/timthumb') !== false && strpos($par_Content, '2.8.14') === false) {
$l_Vuln['id'] = 'RCE : TIMTHUMB : CVE-2011-4106,CVE-2014-4663';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if (strpos($par_Filename, 'components/com_rsform/helpers/rsform.php') !== false) {
if (preg_match('~define\s*\(\s*\'_rsform_version\'\s*,\s*\'([^\']+)\'\s*\)\s*;~msi', $par_Content, $version)) {
$version = $version[1];
if (version_compare($version, '1.5.2') !== 1) {
$l_Vuln['id'] = 'RCE : RSFORM : rsform.php, LINE 1605';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
}
return false;
}
if (strpos($par_Filename, 'fancybox-for-wordpress/fancybox.php') !== false) {
if (strpos($par_Content, '\'reset\' == $_REQUEST[\'action\']') !== false) {
$l_Vuln['id'] = 'CODE INJECTION : FANCYBOX';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if (strpos($par_Filename, 'cherry-plugin/admin/import-export/upload.php') !== false) {
if (strpos($par_Content, 'verify nonce') === false) {
$l_Vuln['id'] = 'AFU : Cherry Plugin';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if (strpos($par_Filename, 'tiny_mce/plugins/tinybrowser/tinybrowser.php') !== false) {
$l_Vuln['id'] = 'AFU : TINYMCE : http://www.exploit-db.com/exploits/9296/';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
if (strpos($par_Filename, '/bx_1c_import.php') !== false) {
if (strpos($par_Content, '$_GET[\'action\']=="getfiles"') !== false) {
$l_Vuln['id'] = 'AFD : https://habrahabr.ru/company/dsec/blog/326166/';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
}
if (strpos($par_Filename, 'scripts/setup.php') !== false) {
if (strpos($par_Content, 'PMA_Config') !== false) {
$l_Vuln['id'] = 'CODE INJECTION : PHPMYADMIN : http://1337day.com/exploit/5334';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if (strpos($par_Filename, '/uploadify.php') !== false) {
if (strpos($par_Content, 'move_uploaded_file($tempFile,$targetFile') !== false) {
$l_Vuln['id'] = 'AFU : UPLOADIFY : CVE: 2012-1153';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if (strpos($par_Filename, 'com_adsmanager/controller.php') !== false) {
if (strpos($par_Content, 'move_uploaded_file($file[\'tmp_name\'], $tempPath.\'/\'.basename($file[') !== false) {
$l_Vuln['id'] = 'AFU : https://revisium.com/ru/blog/adsmanager_afu.html';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if (strpos($par_Filename, 'wp-content/plugins/wp-mobile-detector/resize.php') !== false) {
if (strpos($par_Content, 'file_put_contents($path, file_get_contents($_REQUEST[\'src\']));') !== false) {
$l_Vuln['id'] = 'AFU : https://www.pluginvulnerabilities.com/2016/05/31/aribitrary-file-upload-vulnerability-in-wp-mobile-detector/';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if (strpos($par_Filename, 'core/lib/drupal.php') !== false) {
$version = '';
if (preg_match('|VERSION\s*=\s*\'(8\.\d+\.\d+)\'|smi', $par_Content, $tmp_ver)) {
$version = $tmp_ver[1];
}
if (($version !== '') && (version_compare($version, '8.5.1', '<'))) {
$l_Vuln['id'] = 'Drupageddon 2 : SA-CORE-2018–002';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if (strpos($par_Filename, 'changelog.txt') !== false) {
$version = '';
if (preg_match('|Drupal\s+(7\.\d+),|smi', $par_Content, $tmp_ver)) {
$version = $tmp_ver[1];
}
if (($version !== '') && (version_compare($version, '7.58', '<'))) {
$l_Vuln['id'] = 'Drupageddon 2 : SA-CORE-2018–002';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
return false;
}
if (strpos($par_Filename, 'phpmailer.php') !== false) {
$l_Detect = false;
if (strpos($par_Content, 'PHPMailer') !== false) {
$l_Found = preg_match('~Version:\s*(\d+)\.(\d+)\.(\d+)~', $par_Content, $l_Match);
if ($l_Found) {
$l_Version = $l_Match[1] * 1000 + $l_Match[2] * 100 + $l_Match[3];
if ($l_Version < 2520) {
$l_Detect = true;
}
}
if (!$l_Found) {
$l_Found = preg_match('~Version\s*=\s*\'(\d+)\.*(\d+)\.(\d+)~i', $par_Content, $l_Match);
if ($l_Found) {
$l_Version = $l_Match[1] * 1000 + $l_Match[2] * 100 + $l_Match[3];
if ($l_Version < 5220) {
$l_Detect = true;
}
}
}
if ($l_Detect) {
$l_Vuln['id'] = 'RCE : CVE-2016-10045, CVE-2016-10031';
$l_Vuln['ndx'] = $par_Index;
$vars->vulnerable[] = $l_Vuln;
return true;
}
}
return false;
}
}
private function checkFalsePositives($l_Filename, $l_Unwrapped, $l_DeobfType, $vars)
{
if ($l_DeobfType != '') {
if (DEBUG_MODE) {
stdOut("\n-----------------------------------------------------------------------------\n");
stdOut("[DEBUG]" . $l_Filename . "\n");
stdOut("\n...... $l_DeobfType ...........\n");
var_dump($l_Unwrapped);
stdOut("\n");
}
switch ($l_DeobfType) {
case 'Bitrix':
foreach ($vars->signs->_DeMapper as $fkey => $fvalue) {
if (DEBUG_MODE) {
stdOut("[$fkey] => [$fvalue]\n");
}
if ((strpos($l_Filename, $fkey) !== false) && (strpos($l_Unwrapped, $fvalue) !== false)) {
if (DEBUG_MODE) {
stdOut("\n[DEBUG] *** SKIP: False Positive\n");
}
return true;
}
}
break;
}
return false;
}
}
private function getFragment($par_Content, $par_Pos)
{
$l_MaxChars = MAX_PREVIEW_LEN;
$par_Content = preg_replace('/[\x00-\x1F\x80-\xFF]/', '~', $par_Content);
$l_MaxLen = strlen($par_Content);
$l_RightPos = min($par_Pos + $l_MaxChars, $l_MaxLen);
$l_MinPos = max(0, $par_Pos - $l_MaxChars);
$l_FoundStart = substr($par_Content, 0, $par_Pos);
$l_FoundStart = str_replace("\r", '', $l_FoundStart);
$l_LineNo = strlen($l_FoundStart) - strlen(str_replace("\n", '', $l_FoundStart)) + 1;
$l_Res = '__AI_LINE1__' . $l_LineNo . "__AI_LINE2__ " . ($l_MinPos > 0 ? '…' : '') . substr($par_Content, $l_MinPos, $par_Pos - $l_MinPos) . '__AI_MARKER__' . substr($par_Content, $par_Pos, $l_RightPos - $par_Pos - 1);
$l_Res = AibolitHelpers::makeSafeFn(Normalization::normalize($l_Res), $this->addPrefix, $this->noPrefix);
$l_Res = str_replace('~', ' ', $l_Res);
$l_Res = preg_replace('~[\s\t]+~', ' ', $l_Res);
$l_Res = str_replace('' . '?php', '' . '?php ', $l_Res);
return $l_Res;
}
/**
* @return array
*/
public function whitelisting()
{
// whitelist
$snum = 0;
$list = $this->check_whitelist($this->vars->structure['crc'], $snum);
$keys = array(
'criticalPHP',
'criticalJS',
'g_Iframer',
'g_Base64',
'phishing',
'adwareList',
'g_Redirect',
'warningPHP'
);
foreach ($keys as $p) {
if (empty($this->vars->{$p})) {
continue;
}
$p_Fragment = $p . 'Fragment';
$p_Sig = $p . 'Sig';
if ($p == 'g_Redirect') {
$p_Fragment = $p . 'PHPFragment';
}
elseif ($p == 'g_Phishing') {
$p_Sig = $p . 'SigFragment';
}
$count = count($this->vars->{$p});
for ($i = 0; $i < $count; $i++) {
$id = $this->vars->{$p}[$i];
if ($this->vars->structure['crc'][$id] !== 0 && in_array($this->vars->structure['crc'][$id], $list)) {
unset($this->vars->{$p}[$i], $this->vars->{$p_Sig}[$i], $this->vars->{$p_Fragment}[$i]);
}
}
$this->vars->{$p} = array_values($this->vars->{$p});
$this->vars->{$p_Fragment} = array_values($this->vars->{$p_Fragment});
if (!empty($this->vars->{$p_Sig})) {
$this->vars->{$p_Sig} = array_values($this->vars->{$p_Sig});
}
}
return array($snum, $i);
}
public function check_whitelist($list, &$snum)
{
if (empty($list)) {
return array();
}
$avdb = '';
$file = dirname(__FILE__) . '/AIBOLIT-WHITELIST.db';
if ((isset($this->vars->options['avdb']) && !empty($this->vars->options['avdb']) && ($avdb = $this->vars->options['avdb'])) || (isset($this->vars->options['c']) && !empty($this->vars->options['c']) && ($avdb = $this->vars->options['c']))) {
if (file_exists($avdb)) {
$file = dirname($avdb) . '/AIBOLIT-WHITELIST.db';
}
}
try {
$db = FileHashMemoryDb::open($file);
} catch (Exception $e) {
stdOut("\nAn error occurred while loading the white list database from " . $file . "\n");
return array();
}
$snum = $db->count();
stdOut("\nLoaded " . ceil($snum) . " known files from " . $file . "\n");
return $db->find($list);
}
private function check_binmalware($hash)
{
if (isset($this->vars->blacklist)) {
return count($this->vars->blacklist->find(array($hash))) > 0;
}
return false;
}
///////////////////////////////////////////////////////////////////////////
private function isFileTooBigForScanWithSignatures($filesize)
{
return (MAX_SIZE_TO_SCAN > 0 && $filesize > MAX_SIZE_TO_SCAN) || ($filesize < 0);
}
private function isFileTooBigForCloudscan($filesize)
{
return (MAX_SIZE_TO_CLOUDSCAN > 0 && $filesize > MAX_SIZE_TO_CLOUDSCAN) || ($filesize < 0);
}
}
class ScanUnit
{
public static function QCR_ScanContent($checkers, $l_Unwrapped, $l_Content, $signs, $debug = null, $precheck = null, $processResult = null, &$return = null)
{
foreach ($checkers as $checker => $full) {
$l_pos = 0;
$l_SignId = '';
if (isset($precheck) && is_callable($precheck)) {
if (!$precheck($checker, $l_Unwrapped) || ($full && !$precheck($checker, $l_Content))) {
continue;
}
}
$flag = ScanCheckers::{$checker}($l_Unwrapped, $l_pos, $l_SignId, $signs, $debug);
if ($flag && isset($processResult) && is_callable($processResult)) {
$processResult($checker, $l_Unwrapped, $l_pos, $l_SignId, $return);
}
if (!$flag && $full) {
$flag = ScanCheckers::{$checker}($l_Content, $l_pos, $l_SignId, $signs, $debug);
if ($flag && isset($processResult) && is_callable($processResult)) {
$processResult($checker, $l_Content, $l_pos, $l_SignId, $return);
}
}
if ($flag) {
return true;
}
}
return false;
}
}
class ScanCheckers
{
public static function WarningPHP($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
foreach ($signs->_SusDB as $l_Item) {
if (preg_match('~' . $l_Item . '~smiS', $l_Content, $l_Found, PREG_OFFSET_CAPTURE)) {
if (!self::CheckException($l_Content, $l_Found, $signs)) {
$l_Pos = $l_Found[0][1];
$l_SigId = LoadSignaturesForScan::getSigId($l_Found);
return true;
}
}
}
return false;
}
///////////////////////////////////////////////////////////////////////////
public static function Adware($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
$l_Res = false;
foreach ($signs->_AdwareSig as $l_Item) {
$offset = 0;
while (preg_match('~' . $l_Item . '~smi', $l_Content, $l_Found, PREG_OFFSET_CAPTURE, $offset)) {
if (!self::CheckException($l_Content, $l_Found, $signs)) {
$l_Pos = $l_Found[0][1];
$l_SigId = 'adware';
return true;
}
$offset = $l_Found[0][1] + 1;
}
}
return $l_Res;
}
///////////////////////////////////////////////////////////////////////////
public static function CheckException(&$l_Content, &$l_Found, $signs, $debug = null)
{
$l_FoundStrPlus = substr($l_Content, max($l_Found[0][1] - 10, 0), 70);
foreach ($signs->_ExceptFlex as $l_ExceptItem) {
if (@preg_match('~' . $l_ExceptItem . '~smi', $l_FoundStrPlus, $l_Detected)) {
return true;
}
}
return false;
}
///////////////////////////////////////////////////////////////////////////
public static function Phishing($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
$l_Res = false;
foreach ($signs->_PhishingSig as $l_Item) {
$offset = 0;
while (preg_match('~' . $l_Item . '~smi', $l_Content, $l_Found, PREG_OFFSET_CAPTURE, $offset)) {
if (!self::CheckException($l_Content, $l_Found, $signs)) {
$l_Pos = $l_Found[0][1];
$l_SigId = LoadSignaturesForScan::getSigId($l_Found);
if (is_object($debug) && $debug->getDebugMode() == true) {
echo "Phis: $l_Content matched [$l_Item] in $l_Pos\n";
}
return $l_Pos;
}
$offset = $l_Found[0][1] + 1;
}
}
return $l_Res;
}
///////////////////////////////////////////////////////////////////////////
public static function CriticalJS($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
$l_Res = false;
foreach ($signs->_JSVirSig as $l_Item) {
$offset = 0;
if (is_object($debug) && $debug->getDebugPerfomance() == true) {
$stat_start = microtime(true);
}
while (preg_match('~' . $l_Item . '~smi', $l_Content, $l_Found, PREG_OFFSET_CAPTURE, $offset)) {
if (!self::CheckException($l_Content, $l_Found, $signs)) {
$l_Pos = $l_Found[0][1];
$l_SigId = LoadSignaturesForScan::getSigId($l_Found);
if (is_object($debug) && $debug->getDebugMode() == true) {
echo "JS: $l_Content matched [$l_Item] in $l_Pos\n";
}
$l_Res = true;
break;
}
$offset = $l_Found[0][1] + 1;
}
if (is_object($debug) && $debug->getDebugPerfomance() == true) {
$stat_stop = microtime(true);
$debug->addPerfomanceItem($l_Item, $stat_stop - $stat_start);
}
}
return $l_Res;
}
public static function CriticalJS_PARA($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
foreach ($signs->X_JSVirSig as $l_Item) {
if (is_object($debug) && $debug->getDebugPerfomance() == true) {
$stat_start = microtime(true);
}
if (preg_match('~' . $l_Item . '~smi', $l_Content, $l_Found, PREG_OFFSET_CAPTURE)) {
if (!self::CheckException($l_Content, $l_Found, $signs)) {
$l_Pos = $l_Found[0][1];
//$l_SigId = myCheckSum($l_Item);
$l_SigId = LoadSignaturesForScan::getSigId($l_Found);
if (is_object($debug) && $debug->getDebugMode() == true) {
echo "JS PARA: $l_Content matched [$l_Item] in $l_Pos\n";
}
return true;
}
}
if (is_object($debug) && $debug->getDebugPerfomance() == true) {
$stat_stop = microtime(true);
$debug->addPerfomanceItem($l_Item, $stat_stop - $stat_start);
}
}
return false;
}
///////////////////////////////////////////////////////////////////////////
public static function CriticalPHPGIF($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
if (strpos($l_Content, 'GIF89') === 0) {
$l_Pos = 0;
$l_SigId = 'GIF';
if (is_object($debug) && $debug->getDebugMode() == true) {
echo "CRIT 6: $l_Content matched [GIF] in $l_Pos\n";
}
return true;
}
return false;
}
public static function CriticalPHPUploader($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
// detect uploaders / droppers
$l_Found = null;
if ((strlen($l_Content) < 2048) && ((($l_Pos = strpos($l_Content, 'multipart/form-data')) > 0) || (($l_Pos = strpos($l_Content, '$_FILE[') > 0)) || (($l_Pos = strpos($l_Content, 'move_uploaded_file')) > 0) || (preg_match('|\bcopy\s*\(|smi', $l_Content, $l_Found, PREG_OFFSET_CAPTURE)))) {
if ($l_Found != null) {
$l_Pos = $l_Found[0][1];
$l_SigId = 'uploader';
}
if (is_object($debug) && $debug->getDebugMode() == true) {
echo "CRIT 7: $l_Content matched [uploader] in $l_Pos\n";
}
return true;
}
}
public static function CriticalPHP_3($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
foreach ($signs->X_FlexDBShe as $l_Item) {
if (is_object($debug) && $debug->getDebugPerfomance() == true) {
$stat_start = microtime(true);
}
if (preg_match('~' . $l_Item . '~smiS', $l_Content, $l_Found, PREG_OFFSET_CAPTURE)) {
if (!self::CheckException($l_Content, $l_Found, $signs)) {
$l_Pos = $l_Found[0][1];
$l_SigId = LoadSignaturesForScan::getSigId($l_Found);
if (is_object($debug) && $debug->getDebugMode() == true) {
echo "CRIT 3: $l_Content matched [$l_Item] in $l_Pos\n";
}
return true;
}
}
if (is_object($debug) && $debug->getDebugPerfomance() == true) {
$stat_stop = microtime(true);
$debug->addPerfomanceItem($l_Item, $stat_stop - $stat_start);
}
}
return false;
}
public static function CriticalPHP_2($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
foreach ($signs->XX_FlexDBShe as $l_Item) {
if (is_object($debug) && $debug->getDebugPerfomance() == true) {
$stat_start = microtime(true);
}
if (preg_match('~' . $l_Item . '~smiS', $l_Content, $l_Found, PREG_OFFSET_CAPTURE)) {
if (!self::CheckException($l_Content, $l_Found, $signs)) {
$l_Pos = $l_Found[0][1];
$l_SigId = LoadSignaturesForScan::getSigId($l_Found);
if (is_object($debug) && $debug->getDebugMode() == true) {
echo "CRIT 2: $l_Content matched [$l_Item] in $l_Pos\n";
}
return true;
}
}
if (is_object($debug) && $debug->getDebugPerfomance() == true) {
$stat_stop = microtime(true);
$debug->addPerfomanceItem($l_Item, $stat_stop - $stat_start);
}
}
return false;
}
public static function CriticalPHP_4($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
$l_Content_lo = strtolower($l_Content);
foreach ($signs->_DBShe as $l_Item) {
$l_Pos = strpos($l_Content_lo, $l_Item);
if ($l_Pos !== false) {
$l_SigId = AibolitHelpers::myCheckSum($l_Item);
if (is_object($debug) && $debug->getDebugMode() == true) {
echo "CRIT 4: $l_Content matched [$l_Item] in $l_Pos\n";
}
return true;
}
}
return false;
}
public static function CriticalPHP_5($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
$l_Content_lo = strtolower($l_Content);
foreach ($signs->X_DBShe as $l_Item) {
$l_Pos = strpos($l_Content_lo, $l_Item);
if ($l_Pos !== false) {
$l_SigId = AibolitHelpers::myCheckSum($l_Item);
if (is_object($debug) && $debug->getDebugMode() == true) {
echo "CRIT 5: $l_Content matched [$l_Item] in $l_Pos\n";
}
return true;
}
}
return false;
}
public static function CriticalPHP($l_Content, &$l_Pos, &$l_SigId, $signs, $debug = null)
{
foreach ($signs->_FlexDBShe as $l_Item) {
$offset = 0;
if (is_object($debug) && $debug->getDebugPerfomance() == true) {
$stat_start = microtime(true);
}
while (preg_match('~' . $l_Item . '~smiS', $l_Content, $l_Found, PREG_OFFSET_CAPTURE, $offset)) {
if (!self::CheckException($l_Content, $l_Found, $signs)) {
$l_Pos = $l_Found[0][1];
//$l_SigId = myCheckSum($l_Item);
$l_SigId = LoadSignaturesForScan::getSigId($l_Found);
if (is_object($debug) && $debug->getDebugMode() == true) {
echo "CRIT 1: $l_Content matched [$l_Item] in $l_Pos\n";
}
return true;
}
$offset = $l_Found[0][1] + 1;
}
if (is_object($debug) && $debug->getDebugPerfomance() == true) {
$stat_stop = microtime(true);
$debug->addPerfomanceItem($l_Item, $stat_stop - $stat_start);
}
}
return false;
}
}
class TemplateList
{
/**
* #############
* # MAIN_PAGE #
* #############
*/
const MAIN_PAGE = <<<MAIN_PAGE
<html>
<head>
<!-- revisium.com/ai/ -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<META NAME="ROBOTS" CONTENT="NOINDEX,NOFOLLOW">
<title>@@HEAD_TITLE@@</title>
<style type="text/css" title="currentStyle">
@import "https://cdn.revisium.com/ai/media/css/demo_page2.css";
@import "https://cdn.revisium.com/ai/media/css/jquery.dataTables2.css";
</style>
<script type="text/javascript" language="javascript" src="https://cdn.revisium.com/ai/jquery.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.revisium.com/ai/datatables.min.js"></script>
<style>
body {
font-family: Tahoma, sans-serif;
color: #5a5a5a;
background: #FFFFFF;
font-size: 14px;
margin: 20px;
padding: 0;
}
.header {
font-size: 34px;
margin: 0 0 10px 0;
}
.hidd {
display: none;
}
.ok {
color: green;
}
.line_no {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
background: #DAF2C1;
padding: 2px 5px 2px 5px;
margin: 0 5px 0 5px;
}
.credits_header {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
background: #F2F2F2;
padding: 10px;
font-size: 11px;
margin: 0 0 10px 0;
}
.marker {
color: #FF0090;
font-weight: 100;
background: #FF0090;
padding: 2px 0 2px 0;
width: 2px;
}
.title {
font-size: 24px;
margin: 20px 0 10px 0;
color: #9CA9D1;
}
.summary {
float: left;
width: 500px;
}
.summary TD {
font-size: 12px;
border-bottom: 1px solid #F0F0F0;
font-weight: 700;
padding: 10px 0 10px 0;
}
.crit, .vir {
color: #D84B55;
}
.intitem {
color: #4a6975;
}
.spacer {
margin: 0 0 50px 0;
clear: both;
}
.warn {
color: #F6B700;
}
.clear {
clear: both;
}
.offer {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
width: 500px;
background: #F2F2F2;
color: #747474;
font-family: Helvetica, Arial, sans-serif;
padding: 30px;
margin: 20px 0 0 550px;
font-size: 14px;
}
.offer-our-products {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
width: 500px;
background: #f6f5e0;
color: #747474;
font-family: Helvetica, Arial, sans-serif;
padding: 30px;
margin: 20px 0 0 550px;
font-size: 14px;
}
HR {
margin-top: 15px;
margin-bottom: 15px;
opacity: .2;
}
.flist {
font-family: Henvetica, Arial, sans-serif;
}
.flist TD {
font-size: 11px;
padding: 5px;
}
.flist TH {
font-size: 12px;
height: 30px;
padding: 5px;
background: #CEE9EF;
}
.it {
font-size: 14px;
font-weight: 100;
margin-top: 10px;
}
.crit .it A {
color: #E50931;
line-height: 25px;
text-decoration: none;
}
.warn .it A {
color: #F2C900;
line-height: 25px;
text-decoration: none;
}
.details {
font-family: Calibri, sans-serif;
font-size: 12px;
margin: 10px 10px 10px 0;
}
.crit .details {
color: #A08080;
}
.warn .details {
color: #808080;
}
.details A {
color: #FFF;
font-weight: 700;
text-decoration: none;
padding: 2px;
background: #E5CEDE;
-webkit-border-radius: 7px;
-moz-border-radius: 7px;
border-radius: 7px;
}
.details A:hover {
background: #A0909B;
}
.ctd {
margin: 10px 0 10px 0;
align: center;
}
.ctd A {
color: #0D9922;
}
.disclaimer {
color: darkgreen;
margin: 10px 10px 10px 0;
}
.note_vir {
margin: 10px 0 10px 0;
/ / padding: 10 px;
color: #FF4F4F;
font-size: 15px;
font-weight: 700;
clear: both;
}
.note_warn {
margin: 10px 0 10px 0;
color: #F6B700;
font-size: 15px;
font-weight: 700;
clear: both;
}
.note_int {
margin: 10px 0 10px 0;
color: #60b5d6;
font-size: 15px;
font-weight: 700;
clear: both;
}
.updateinfo {
color: #FFF;
text-decoration: none;
background: #E5CEDE;
-webkit-border-radius: 7px;
-moz-border-radius: 7px;
border-radius: 7px;
margin: 10px 0 10px 0;
padding: 10px;
}
.caution {
color: #EF7B75;
text-decoration: none;
margin: 20px 0 0 0;
font-size: 12px;
}
.footer {
color: #303030;
text-decoration: none;
background: #F4F4F4;
-webkit-border-radius: 7px;
-moz-border-radius: 7px;
border-radius: 7px;
margin: 80px 0 10px 0px;
padding: 10px;
}
.rep {
color: #303030;
text-decoration: none;
background: #94DDDB;
-webkit-border-radius: 7px;
-moz-border-radius: 7px;
border-radius: 7px;
margin: 10px 0 10px 0;
padding: 10px;
font-size: 12px;
}
</style>
</head>
<body>
<div class="header">@@MAIN_TITLE@@ @@PATH_URL@@ (@@MODE@@)</div>
<div class="credits_header">@@CREDITS@@</div>
<div class="details_header">
@@STAT@@<br/>
@@SCANNED@@ @@MEMORY@@.
</div>
@@WARN_QUICK@@
<div class="summary">
@@SUMMARY@@
</div>
<div class="offer">
@@OFFER@@
</div>
<div class="offer-our-products">
@@OFFER_OUR_PRODUCTS@@
</div>
<div class="clear"></div>
@@MAIN_CONTENT@@
<div class="footer">
@@FOOTER@@
</div>
<script language="javascript">
function hsig(id) {
var divs = document.getElementsByTagName("tr");
for(var i = 0; i < divs.length; i++){
if (divs[i].getAttribute('o') == id) {
divs[i].innerHTML = '';
}
}
return false;
}
$(document).ready(function(){
$('#table_crit').dataTable({
"aLengthMenu": [[100 , 500, -1], [100, 500, "All"]],
"aoColumns": [
{"iDataSort": 7, "width":"70%"},
{"iDataSort": 5},
{"iDataSort": 6},
{"bSortable": true},
{"bVisible": false},
{"bVisible": false},
{"bVisible": false},
{"bVisible": false}
],
"paging": true,
"iDisplayLength": 500,
"oLanguage": {
"sLengthMenu": "@@msg1@@",
"sZeroRecords": "@@msg2@@",
"sInfo": "@@msg3@@",
"sInfoEmpty": "@@msg4@@",
"sInfoFiltered": "@@msg5@@",
"sSearch": "@@msg6@@",
"sUrl": "",
"oPaginate": {
"sFirst": "@@msg7@@",
"sPrevious": "@@msg8@@",
"sNext": "@@msg9@@",
"sLast": "@@msg10@@"
},
"oAria": {
"sSortAscending": "@@msg11@@",
"sSortDescending": "@@msg12@@"
}
}
} );
});
$(document).ready(function(){
$('#table_vir').dataTable({
"aLengthMenu": [[100 , 500, -1], [100, 500, "All"]],
"paging": true,
"aoColumns": [
{"iDataSort": 7, "width":"70%"},
{"iDataSort": 5},
{"iDataSort": 6},
{"bSortable": true},
{"bVisible": false},
{"bVisible": false},
{"bVisible": false},
{"bVisible": false}
],
"iDisplayLength": 500,
"oLanguage": {
"sLengthMenu": "@@msg1@@",
"sZeroRecords": "@@msg2@@",
"sInfo": "@@msg3@@",
"sInfoEmpty": "@@msg4@@",
"sInfoFiltered": "@@msg5@@",
"sSearch": "@@msg6@@",
"sUrl": "",
"oPaginate": {
"sFirst": "@@msg7@@",
"sPrevious": "@@msg8@@",
"sNext": "@@msg9@@",
"sLast": "@@msg10@@"
},
"oAria": {
"sSortAscending": "@@msg11@@",
"sSortDescending": "@@msg12@@"
}
},
} );
});
if ($('#table_warn0')) {
$('#table_warn0').dataTable({
"aLengthMenu": [[100 , 500, -1], [100, 500, "All"]],
"paging": true,
"aoColumns": [
{"iDataSort": 7, "width":"70%"},
{"iDataSort": 5},
{"iDataSort": 6},
{"bSortable": true},
{"bVisible": false},
{"bVisible": false},
{"bVisible": false},
{"bVisible": false}
],
"iDisplayLength": 500,
"oLanguage": {
"sLengthMenu": "@@msg1@@",
"sZeroRecords": "@@msg2@@",
"sInfo": "@@msg3@@",
"sInfoEmpty": "@@msg4@@",
"sInfoFiltered": "@@msg5@@",
"sSearch": "@@msg6@@",
"sUrl": "",
"oPaginate": {
"sFirst": "@@msg7@@",
"sPrevious": "@@msg8@@",
"sNext": "@@msg9@@",
"sLast": "@@msg10@@"
},
"oAria": {
"sSortAscending": "@@msg11@@",
"sSortDescending": "@@msg12@@"
}
}
} );
}
if ($('#table_warn1')) {
$('#table_warn1').dataTable({
"aLengthMenu": [[100 , 500, -1], [100, 500, "All"]],
"paging": true,
"aoColumns": [
{"iDataSort": 7, "width":"70%"},
{"iDataSort": 5},
{"iDataSort": 6},
{"bSortable": true},
{"bVisible": false},
{"bVisible": false},
{"bVisible": false},
{"bVisible": false}
],
"iDisplayLength": 500,
"oLanguage": {
"sLengthMenu": "@@msg1@@",
"sZeroRecords": "@@msg2@@",
"sInfo": "@@msg3@@",
"sInfoEmpty": "@@msg4@@",
"sInfoFiltered": "@@msg5@@",
"sSearch": "@@msg6@@",
"sUrl": "",
"oPaginate": {
"sFirst": "@@msg7@@",
"sPrevious": "@@msg8@@",
"sNext": "@@msg9@@",
"sLast": "@@msg10@@"
},
"oAria": {
"sSortAscending": "@@msg11@@",
"sSortDescending": "@@msg12@@"
}
}
} );
}
</script>
<!-- @@SERVICE_INFO@@ -->
</body>
</html>
MAIN_PAGE;
#region templates ru
/**
* #############
* # FOOTER_RU #
* #############
*/
const FOOTER_RU = <<<FOOTER
<div class="disclaimer"><span class="vir">[!]</span> Отказ от гарантий: невозможно гарантировать обнаружение всех вредоносных скриптов. Поэтому разработчик сканера не несет ответственности за возможные последствия работы сканера AI-Bolit или неоправданные ожидания пользователей относительно функциональности и возможностей.
</div>
<div class="thanx">
Мы будем чрезвычайно благодарны за любые упоминания сканера AI-Bolit на вашем сайте, в блоге, среди друзей, знакомых и клиентов. <br/>Ссылку можно поставить на страницу <a href="https://revisium.com/ai/">https://revisium.com/ai/</a>.<br/>
</div>
FOOTER;
/**
* ###########################
* # OFFER_RU #
* ###########################
*/
const OFFER_RU = <<<OFFER_ON_VIRUS_FOUND
<div>
<div class="crit" style="font-size: 17px; margin-bottom: 20px"><b>Внимание! Наш сканер обнаружил подозрительный или вредоносный код</b>.</div>
<p>Возможно, ваш сайт был взломан. Рекомендуем срочно <a href="https://revisium.com/ru/order/#fform" target=_blank>проконсультироваться со специалистами</a> по данному отчету.</p>
<p><hr size=1></p>
<p>Рекомендуем также проверить сайт бесплатным <b><a href="https://rescan.pro/?utm=aibolit" target=_blank>онлайн-сканером ReScan.Pro</a></b>.</p>
<p><hr size=1></p>
<div class="caution">@@CAUTION@@</div>
</div>
OFFER_ON_VIRUS_FOUND;
/**
* #########################
* # OFFER_OUR_PRODUCTS_RU #
* #########################
*/
const OFFER_OUR_PRODUCTS_RU = <<<OFFER_OUR_PRODUCTS
<b>Наши продукты:</b><br/>
<ul>
<li style="margin-top: 10px"><font color=red><sup>[new]</sup></font><b><a href="https://revisium.com/ru/products/antivirus_for_ispmanager/" target=_blank>Антивирус для ISPmanager Lite</a></b> — сканирование и лечение сайтов прямо в панели хостинга</li>
<li style="margin-top: 10px"><b><a href="https://revisium.com/ru/blog/revisium-antivirus-for-plesk.html" target=_blank>Антивирус для Plesk</a> Onyx 17.x</b> — сканирование и лечение сайтов прямо в панели хостинга</li>
<li style="margin-top: 10px"><b><a href="https://cloudscan.pro/ru/" target=_blank>Облачный антивирус CloudScan.Pro</a> для веб-специалистов</b> — лечение сайтов в один клик</li>
<li style="margin-top: 10px"><b><a href="https://revisium.com/ru/antivirus-server/" target=_blank>Антивирус для сервера</a></b> — для хостинг-компаний, веб-студий и агентств.</li>
</ul>
</div>
OFFER_OUR_PRODUCTS;
#endregion
#region templates eng
/**
* #############
* # FOOTER_EN #
* #############
*/
const FOOTER_EN = <<<FOOTER
<div class="disclaimer"><span class="vir">[!]</span> Disclaimer: We're not liable to you for any damages, including general, special, incidental or consequential damages arising out of the use or inability to use the script (including but not limited to loss of data or report being rendered inaccurate or failure of the script). There's no warranty for the program. Use at your own risk.
</div>
<div class="thanx">
We're greatly appreciate for any references in the social medias, forums or blogs to our scanner AI-BOLIT <a href="https://revisium.com/aibo/">https://revisium.com/aibo/</a>.<br/>
</div>
FOOTER;
/**
* ###########################
* # OFFER_ON_VIRUS_FOUND_EN #
* ###########################
*/
const OFFER_EN = <<<OFFER_ON_VIRUS_FOUND
<div>
<div class="crit" style="font-size: 17px;"><b>Attention! The scanner has detected suspicious or malicious files.</b></div>
<br/>Most likely the website has been compromised. Please, <a href="https://revisium.com/en/contacts/" target=_blank>contact web security experts</a> from Revisium to check the report or clean the malware.
<p><hr size=1></p>
Also check your website for viruses with our free <b><a href="http://rescan.pro/?en&utm=aibo" target=_blank>online scanner ReScan.Pro</a></b>.
</div>
<br/>
<div>
Revisium contacts: <a href="https://revisium.com/en/contacts/">https://revisium.com/en/home/</a>
</div>
<div class="caution">@@CAUTION@@</div>
OFFER_ON_VIRUS_FOUND;
/**
* #########################
* # OFFER_OUR_PRODUCTS_EN #
* #########################
*/
const OFFER_OUR_PRODUCTS_EN = <<<OFFER_OUR_PRODUCTS
<b>Special Offers:</b><br/>
<ul>
<li style="margin-top: 10px"><font color=red><sup>[new]</sup></font><b><a href="http://ext.plesk.com/packages/b71916cf-614e-4b11-9644-a5fe82060aaf-revisium-antivirus">Antivirus for Plesk Onyx</a></b> hosting panel with one-click malware cleanup and scheduled website scanning.</li>
<li style="margin-top: 10px"><font color=red></font><b><a href="https://www.ispsystem.com/addons-modules/revisium">Antivirus for ISPmanager Lite</a></b> hosting panel with one-click malware cleanup and scheduled website scanning.</li>
<li style="margin-top: 10px">Professional malware cleanup and web-protection service with 6 month guarantee for only $99 (one-time payment): <a href="https://revisium.com/en/home/#order_form">https://revisium.com/en/home/</a>.</li>
</ul>
</div>
OFFER_OUR_PRODUCTS;
#endregion
}
class TranslateList
{
const RU = [
//Переменные для javascript
'data_table.length_menu' => 'Отображать по _MENU_ записей',
'data_table.zero_records' => 'Ничего не найдено',
'data_table.info' => 'Отображается c _START_ по _END_ из _TOTAL_ файлов',
'data_table.info_empty' => 'Нет файлов',
'data_table.info_filtered' => '(всего записей _MAX_)',
'data_table.search' => 'Поиск:',
'data_table.paginate.first' => 'Первая',
'data_table.paginate.previous' => 'Предыдущая',
'data_table.paginate.next' => 'Следующая',
'data_table.paginate.last' => 'Последняя',
'data_table.aria.sort_ascending' => ': активировать для сортировки столбца по возрастанию',
'data_table.aria.sort_descending' => ': активировать для сортировки столбцов по убыванию',
'header.scan_report_title' => 'Отчет сканера <a href="https://revisium.com/ai/">AI-Bolit</a> v@@VERSION@@:',
'offer.when_no_critical' => 'Обращаем внимание на то, что большинство CMS <b>без дополнительной защиты</b> рано или поздно <b>взламывают</b>.<p> Компания <a href="https://revisium.com/">"Ревизиум"</a> предлагает услугу превентивной защиты сайта от взлома с использованием уникальной <b>процедуры "цементирования сайта"</b>. Подробно на <a href="https://revisium.com/ru/client_protect/">странице услуги</a>. <p>Лучшее лечение — это профилактика.',
'offer_our_products' => TemplateList::OFFER_OUR_PRODUCTS_RU,
'offer.when_has_critical' => TemplateList::OFFER_RU,
'сaution.aibolit_file' => 'Не оставляйте файл отчета на сервере, и не давайте на него прямых ссылок с других сайтов. Информация из отчета может быть использована злоумышленниками для взлома сайта, так как содержит информацию о настройках сервера, файлах и каталогах.',
'сaution.scanner_set_password' => "Сканер AI-Bolit запускается с паролем. Если это первый запуск сканера, вам нужно придумать сложный пароль и вписать его в файле ai-bolit.php в строке №34. <p>Например, <b>'PASS', =>'%s',</b><p>
После этого откройте сканер в браузере, указав пароль в параметре \"p\". <p>Например, так <b>http://mysite.ru/ai-bolit.php?p=%s</b>. ",
'сaution.quick_scanned' => '<div class="rep" style="color: #0000A0">Внимание, скрипт выполнил быструю проверку сайта. Проверяются только наиболее критические файлы, но часть вредоносных скриптов может быть не обнаружена. Пожалуйста, запустите скрипт из командной строки для выполнения полного тестирования. Подробнее смотрите в <a href="https://revisium.com/ai/faq.php">FAQ вопрос №10</a>.</div>',
'warning.weak_password' => "Вы установили слабый пароль на скрипт AI-BOLIT. Укажите пароль не менее 8 символов, содержащий латинские буквы в верхнем и нижнем регистре, а также цифры. Например, такой <b>%s</b>",
'warning.folder_read_permission' => 'Текущая директория не доступна для чтения скрипту. Пожалуйста, укажите права на доступ <b>rwxr-xr-x</b> или с помощью командной строки <b>chmod +r имя_директории</b>',
'warnings' => 'Предупреждения',
'warning.reading_error' => 'Непроверенные файлы - ошибка чтения',
'info.time_elapsed' => "Затрачено времени: <b>%s</b>. Сканирование начато %s, сканирование завершено %s",
'info.files_checked' => 'Всего проверено %s директорий и %s файлов.',
'info.non_commercial_use' => 'Сканер бесплатный только для личного некоммерческого использования. Информация по <a href="https://revisium.com/ai/faq.php#faq11" target=_blank>коммерческой лицензии</a> (пункт №11). <a href="https://revisium.com/images/mini_aibolit.jpg">Авторское свидетельство</a> о гос. регистрации в РосПатенте №2012619254 от 12 октября 2012 г.',
'critical.title' => '<div class="title">Критические замечания</div>',
'not_detected.shell_scripts' => 'Вирусы и вредоносные скрипты не обнаружены.',
'detected.shell_scripts' => 'Эти файлы могут быть вредоносными или хакерскими скриптами',
'detected.javascript' => 'Эти файлы могут быть javascript вирусами',
'detected.executables' => 'Обнаружены сигнатуры исполняемых файлов unix и нехарактерных скриптов. Они могут быть вредоносными файлами',
'detected.bad_links' => 'Дорвеи, реклама, спам-ссылки, редиректы',
'detected.phishing_pages' => 'Обнаружены фишинговые страницы',
'file.not_found.more_than' => 'Не найдено файлов больше чем %s',
'file.recommend_to_remove' => 'Временные файлы или файлы(каталоги) - кандидаты на удаление по ряду причин',
'file.scanned_manual' => 'Просканированы только файлы, перечисленные в %s. Для полного сканирования удалите файл %s и запустите сканер повторно.',
'file.suspicion.heuristic_analyze' => 'Эвристический анализ обнаружил подозрительные файлы. Проверьте их на наличие вредоносного кода.',
'file.encrypted' => 'Зашифрованных файлов',
'file.hidden' => 'Скрытых файлов',
'file.added' => "Добавленные файлы",
'file.updated' => "Измененные файлы",
'file.deleted' => "Удаленные файлы",
'file_structure.updates' => "Изменения в файловой структуре",
'hidden_files' => 'Скрытые файлы',
'doorway.might' => 'Возможно, каталог с дорвеем',
'doorway.not_found' => 'Не найдено директорий c дорвеями',
'suspicion.multiple' => 'Двойное расширение, зашифрованный контент или подозрение на вредоносный скрипт. Требуется дополнительный анализ',
'suspicion.malicious' => 'Подозрение на вредоносный скрипт',
'suspicion.htaccess' => 'Подозрение на мобильный редирект, подмену расширений или автовнедрение кода',
'suspicion.non_php' => 'В не .php файле содержится стартовая сигнатура PHP кода. Возможно, там вредоносный код',
'suspicion.hidden_link' => 'Невидимые ссылки. Подозрение на ссылочный спам',
'suspicion.doorway' => 'Подозрение на дорвей',
'suspicion.code' => 'Скрипт использует код, который часто встречается во вредоносных скриптах',
'suspicion.obfuscated_variables' => 'Подозрение на обфусцированные переменные',
'suspicion.global_array' => 'Подозрительное использование массива глобальных переменных',
'suspicion.file_time' => "Подозрительные параметры времени изменения файла",
'suspicion.file_attributes' => "Подозрительные атрибуты файла",
'suspicion.file_location' => "Подозрительное местоположение файла",
'symlinks' => 'Символические ссылки (symlinks)',
'hidden_links' => 'Невидимые ссылки',
'link.symbolic' => 'Символических ссылок',
'links.adware_spam' => 'Рекламных ссылок и кодов',
'links.empty' => 'Пустых ссылок',
'display_only_first' => 'Отображены только первые ',
'skipped.adirignore' => 'Директории из файла .adirignore были пропущены при сканировании',
'founded_CMS' => 'Версии найденных CMS',
'folder.unsafe_writable' => 'Потенциально небезопасно! Директории, доступные скрипту на запись',
'folder.unsafe_writable_not_found' => 'Не найдено директорий, доступных на запись скриптом',
'folder.added' => "Добавленные каталоги",
'folder.deleted' => "Удаленные каталоги",
'memory_used' => 'Использовано памяти при сканировании: ',
'notice.scan_express' => '<div class="rep">Внимание! Выполнена экспресс-проверка сайта. Просканированы только файлы с расширением .php, .js, .html, .htaccess. В этом режиме могут быть пропущены вирусы и хакерские скрипты в файлах с другими расширениями. Чтобы выполнить более тщательное сканирование, поменяйте значение настройки на <b>\'scan_all_files\' => 1</b> в строке 50 или откройте сканер в браузере с параметром full: <b><a href="ai-bolit.php?p=%s&full">ai-bolit.php?p=%s&full</a></b>. <p>Не забудьте перед повторным запуском удалить файл %s</div>',
'feedback_for_script' => 'Мы будем чрезвычайно благодарны за любые упоминания скрипта AI-Bolit на вашем сайте, в блоге, среди друзей, знакомых и клиентов. Ссылочку можно поставить на <a href="https://revisium.com/ai/">https://revisium.com/ai/</a>.',
'report_for' => 'Отчет по ',
'function.many_reference' => 'Много косвенных вызовов функции',
'str.abnormal_split' => 'Дробление строки на символы',
'scan.offer_modes_after_express' => 'Сканирование выполнено в экспресс-режиме. Многие вредоносные скрипты могут быть не обнаружены.<br> Рекомендуем проверить сайт в режиме "Эксперт" или "Параноидальный". Подробно описано в <a href="https://revisium.com/ai/faq.php">FAQ</a> и инструкции к скрипту.',
'mobile_redirects' => 'Мобильных редиректов',
'skipped.large_file' => 'Большие файлы (больше чем %s). Пропущено',
'malware' => 'Вредоносных скриптов',
'js_virused' => 'JS Вирусов',
'phishing_pages' => 'Фишинговых страниц',
'executable_files' => 'Исполняемых файлов',
'iframe_injections' => 'IFRAME вставок',
'skipped_large_file' => 'Пропущенных больших файлов',
'error.read_file' => 'Ошибок чтения файлов',
'suspicious' => 'Подозрительных',
'report.summary' => 'Сводный отчет',
'footer' => TemplateList::FOOTER_RU,
'notice.files_may_not_malicious' => "Обращаем внимание, что обнаруженные файлы не всегда являются вирусами и хакерскими скриптами. Сканер минимизирует число ложных обнаружений, но это не всегда возможно, так как найденный фрагмент может встречаться как во вредоносных скриптах, так и в обычных.<p>Для диагностического сканирования без ложных срабатываний мы разработали специальную версию <u><a href=\"https://revisium.com/ru/blog/ai-bolit-4-ISP.html\" target=_blank style=\"background: none; color: #303030\">сканера для хостинг-компаний</a></u>.",
'script.vulnerable' => "Уязвимости в скриптах",
'path' => 'Путь',
'property_change' => 'Изменение свойств',
'content_change' => 'Изменение содержимого',
'size' => 'Размер',
'php_config' => 'Конфигурация PHP',
];
const EN = [
//variables for javascript
'data_table.length_menu' => 'Display _MENU_ records',
'data_table.zero_records' => 'Not found',
'data_table.info' => 'Display from _START_ to _END_ of _TOTAL_ files',
'data_table.info_empty' => 'No files',
'data_table.info_filtered' => '(total _MAX_)',
'data_table.search' => 'Filter/Search:',
'data_table.paginate.first' => 'First',
'data_table.paginate.previous' => 'Previous',
'data_table.paginate.next' => 'Next',
'data_table.paginate.last' => 'Last',
'data_table.aria.sort_ascending' => ': activate to sort row ascending order',
'data_table.aria.sort_descending' => ': activate to sort row descending order',
'header.scan_report_title' => 'AI-Bolit v@@VERSION@@ Scan Report:',
'offer.when_no_critical' => '',
'offer_our_products' => TemplateList::OFFER_OUR_PRODUCTS_EN,
'offer.when_has_critical' => TemplateList::OFFER_EN,
'сaution.aibolit_file' => 'Caution! Do not leave either ai-bolit.php or report file on server and do not provide direct links to the report file. Report file contains sensitive information about your website which could be used by hackers. So keep it in safe place and don\'t leave on website!',
'сaution.scanner_set_password' => "Open AI-BOLIT with password specified in the beggining of file in PASS variable. <br/>E.g. http://you_website.com/ai-bolit.php?p=<b>%s</b>",
'сaution.quick_scanned' => '<div class="rep" style="color: #0000A0">Attention! Script has performed quick scan. It scans only .html/.js/.php files in quick scan mode so some of malicious scripts might not be detected. <br>Please launch script from a command line thru SSH to perform full scan.',
'warning.weak_password' => "Your password for AI-BOLIT is too weak. Password must be more than 8 character length, contain both latin letters in upper and lower case, and digits. E.g. <b>%s</b>",
'warning.folder_read_permission' => 'Current folder is not readable. Please change permission for <b>rwxr-xr-x</b> or using command line <b>chmod +r folder_name</b>',
'warnings' => 'Warnings',
'warning.reading_error' => 'Reading error. Skipped.',
'info.time_elapsed' => "<div class=\"rep\">%s malicious signatures known, %s virus signatures and other malicious code. Elapsed: <b>%s</b
>.<br/>Started: %s. Stopped: %s</div> ",
'info.files_checked' => 'Scanned %s folders and %s files.',
'info.non_commercial_use' => 'For non-commercial use only.',
'critical.title' => '<div class="title">Critical</div>',
'detected.shell_scripts' => 'Shell script signatures detected. Might be a malicious or hacker\'s scripts',
'not_detected.shell_scripts' => 'Shell scripts signatures not detected.',
'detected.javascript' => 'Javascript virus signatures detected:',
'detected.executables' => 'Unix executables signatures and odd scripts detected. They might be a malicious binaries or rootkits:',
'detected.bad_links' => 'This script has black-SEO links or linkfarm. Check if it was installed by yourself:',
'detected.phishing_pages' => 'Phishing pages detected:',
'file.not_found.more_than' => 'Files greater than %s not found',
'file.recommend_to_remove' => 'Files recommended to be remove due to security reason:',
'file.scanned_manual' => 'Quick scan through the files from %s. For full scan remove %s and launch scanner once again.',
'file.suspicion.heuristic_analyze' => 'Heuristic Analyzer has detected suspicious files. Check if they are malware.',
'file.encrypted' => 'Encrypted files',
'file.hidden' => 'Hidden files',
'files_may_not_malicious' => "Notice! Some of detected files may not contain malicious code. Scanner tries to minimize a number of false positives, but sometimes it's impossible, because same piece of code may be used either in malware or in normal scripts.",
'file.added' => "Added files",
'file.updated' => "Modified files",
'file.deleted' => "Deleted files",
'file_structure.updates' => "Integrity Check Report",
'hidden_files' => 'Hidden files:',
'doorway.might' => 'Files might be a part of doorway:',
'doorway.not_found' => 'Doorway folders not detected',
'suspicion.multiple' => 'Suspicious encoded strings, extra .php extention or external includes detected in PHP files. Might be a malicious or hacker\'s script:',
'suspicion.malicious' => 'Might be a malicious or hacker\'s script:',
'suspicion.htaccess' => 'Malicious code in .htaccess (redirect to external server, extention handler replacement or malicious code auto-append):',
'suspicion.non_php' => 'Non-PHP file has PHP signature. Check for malicious code:',
'suspicion.hidden_link' => 'These files have invisible links, might be black-seo stuff:',
'suspicion.doorway' => 'Folders contained too many .php or .html files. Might be a doorway:',
'suspicion.code' => 'Suspicious code detected. It\'s usually used in malicious scrips:',
'suspicion.obfuscated_variables' => 'Suspected for obfuscated variables',
'suspicion.global_array' => 'Suspected for $GLOBAL array usage',
'suspicion.file_time' => "Suspicious file mtime and ctime",
'suspicion.file_attributes' => "Suspicious file permissions",
'suspicion.file_location' => "Suspicious file location",
'symlinks' => 'Symlinks:',
'hidden_links' => 'List of invisible links:',
'link.symbolic' => 'Symbolic links',
'links.adware_spam' => 'Adware and spam links',
'links.empty' => 'Empty links',
'display_only_first' => 'Displayed first ',
'skipped.adirignore' => 'The following list of files specified in .adirignore has been skipped:',
'founded_CMS' => 'CMS found:',
'folder.unsafe_writable' => 'Potentially unsafe! Folders which are writable for scripts:',
'folder.unsafe_writable_not_found' => 'Writable folders not found',
'folder.added' => "Added directories",
'folder.deleted' => "Deleted directories",
'memory_used' => 'Memory used: ',
'notice.scan_express' => '<div class="notice"><span class="vir">[!]</span> Ai-BOLIT is working in quick scan mode, only .php, .html, .htaccess files will be checked. Change the following setting \'scan_all_files\' => 1 to perform full scanning.</b>. </div>',
'feedback_for_script' => "I'm sincerely appreciate reports for any bugs you may found in the script. Please email me: <a href=\"mailto:audit@revisium.com\">audit@revisium.com</a>.<p> Also I appriciate any reference to the script in your blog or forum posts. Thank you for the link to download page: <a href=\"https://revisium.com/aibo/\">https://revisium.com/aibo/</a>",
'report_for' => 'Report for ',
'function.many_reference' => 'Function called by reference',
'str.abnormal_split' => 'Abnormal split of string',
'scan.offer_modes_after_express' => 'Scanning has been done in simple mode. It is strongly recommended to perform scanning in "Expert" mode. See readme.txt for details.',
'mobile_redirects' => 'Mobile redirects',
'skipped.large_file' => 'Large files (greater than %s! Skipped:',
'malware' => 'Malware',
'js_virused' => 'JS viruses',
'phishing_pages' => 'Phishing pages',
'executable_files' => 'Unix executables',
'iframe_injections' => 'IFRAME injections',
'skipped_large_file' => 'Skipped big files',
'critical.error_read_file' => 'Reading errors',
'suspicious' => 'Suspicious',
'report.summary' => 'Summary',
'footer' => TemplateList::FOOTER_EN,
'script.vulnerable' => "Vulnerable Scripts",
'path' => 'Path',
'property_change' => 'iNode Changed',
'content_change' => 'Modified',
'size' => 'Size',
'php_config' => 'PHP Info',
];
}
class OsReleaseInfo
{
private $prefix = '';
private $release_file = '';
const DEBIAN = ['debian'];
const RHEL_FEDORA_CENTOS = ['rhel', 'fedora', 'centos'];
const UNKNOWN = ['unknown'];
private $_supported_dists = [
'SuSE', 'debian', 'fedora', 'redhat', 'centos',
'mandrake', 'mandriva', 'rocks', 'slackware', 'yellowdog', 'gentoo',
'UnitedLinux', 'turbolinux'];
private $_release_filename = '(\w+)[-_](release|version)';
private $_lsb_release_version = '(.+)'
. ' release '
. '([\d.]+)'
. '[^(]*(?:\((.+)\))?';
private $_release_version = '([^0-9]+)'
. '(?: release )?'
. '([\d.]+)'
. '[^(]*(?:\((.+)\))?';
private $release = [];
public function __construct($prefix = '', $release_file = '/etc/os-release')
{
$this->prefix = $prefix;
$this->release_file = $this->prefix . $release_file;
$this->getRelease($this->release_file);
}
private function getOsReleaseAndVersion()
{
$ver = rtrim(@file_get_contents($this->prefix . '/etc/system-release'));
return $ver ?: $this->release['VERSION'];
}
public function getOsVersion($release_and_version = false)
{
$rv = $release_and_version ? $release_and_version : $this->getOsReleaseAndVersion();
if ($rv) {
if (preg_match('~\s*(\d+\.\d+\S*)(\s|$)~', $rv, $m)) {
return $m[1];
}
}
return $this->release['VERSION_ID'] ? $this->release['VERSION_ID'] : false;
}
private function linuxDistribution($distname = '', $version = '', $id = '')
{
$dists = array_flip($this->_supported_dists);
if (!file_exists($this->prefix . '/etc')) {
return [$distname, $version, $id];
}
$file = '';
$etc = scandir($this->prefix . '/etc');
foreach ($etc as $file) {
if (preg_match('~' . $this->_release_filename . '~', $file, $m)) {
if (isset($dists[$m[1]])) {
$_distname = $m[1];
$distname = $m[1];
break;
}
}
}
$f = fopen($this->prefix . '/etc/' . $file, 'r');
$firstline = fgets($f);
fclose($f);
list($_distname, $_version, $_id) = $this->_parseReleaseFile($firstline);
if ($_distname) {
$distname = $_distname;
}
if ($_version) {
$version = $_version;
}
if ($_id) {
$id = $_id;
}
return [$distname, $version, $id];
}
private function _parseReleaseFile($firstline)
{
$version = '';
$id = '';
if (preg_match('~' . $this->_lsb_release_version . '~', $firstline, $m)) {
return [$m[1], $m[2], $m[3]];
}
if (preg_match('~' . $this->_release_version . '~', $firstline, $m)) {
return [$m[1], $m[2], $m[3]];
}
$l = preg_split("~\s+~", trim($firstline), -1, PREG_SPLIT_NO_EMPTY);
if (!empty($l)) {
$version = $l[0];
if (count($l) > 1) {
$id = $l[1];
}
}
return ['', $version, $id];
}
private function getReleaseFromFile($release_file)
{
$lines = file($release_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
list($k, $v) = explode('=', rtrim($line), 2);
$this->release[$k] = trim($v, '"');
}
if (isset($this->release['ID_LIKE'])) {
$this->release['ID_LIKE'] = preg_split('~\s+~', $this->release['ID_LIKE'], -1, PREG_SPLIT_NO_EMPTY);
} else {
$this->release['ID_LIKE'] = [$this->release['ID']];
}
}
private function getRelease($release_file = '')
{
if (count($this->release) != 0) {
return $this->release;
}
if ($this->release_file) {
$release_file = $this->release_file;
}
$osid = '';
if (file_exists($release_file)) {
$this->getReleaseFromFile($release_file);
} else {
$d = $this->linuxDistribution();
if ($d && isset($d[0])) {
$osid = current(preg_split('~\s+~', strtolower($d[0]), -1, PREG_SPLIT_NO_EMPTY));
if ($osid == 'red' && strpos($d[0], 'Red Hat Enterprise Linux')) {
$osid = 'rhel';
}
$this->release['ID'] = $osid;
$this->release['PRETTY_NAME'] = "{$d[0]} {$d[1]} ({$d[2]})";
if (in_array($osid, ['cloudlinux', 'centos', 'rhel'])) {
$this->release['ID_LIKE'] = self::RHEL_FEDORA_CENTOS;
} else if (in_array($osid, ['ubuntu', 'debian'])) {
$this->release['ID_LIKE'] = self::DEBIAN;
} else {
$this->release['ID_LIKE'] = self::UNKNOWN;
}
} else {
$this->release['ID'] = 'unknown';
$this->release['ID_LIKE'] = self::UNKNOWN;
$this->release['PRETTY_NAME'] = 'unknown';
}
}
return $this->release;
}
public function getIdLike()
{
$rel = $this->getRelease();
return $rel['ID_LIKE'];
}
public function isIdLikeCentos()
{
$rel = $this->getRelease();
foreach (self::RHEL_FEDORA_CENTOS as $os) {
if (in_array($os, $rel['ID_LIKE'])) {
return true;
}
}
return false;
}
public function getPrettyName()
{
$rel = $this->getRelease();
return $rel['PRETTY_NAME'];
}
public function getOs()
{
$rel = $this->getRelease();
return $rel['ID'];
}
public function isRhel()
{
return $this->getOs() == 'rhel';
}
public function isCentos()
{
return $this->getOs() == 'centos';
}
public function isUbuntu()
{
return $this->getOs() == 'ubuntu';
}
public function isCloudlinux()
{
return $this->getOs() == 'cloudlinux';
}
public function isDebian()
{
return $this->getOs() == 'debian';
}
}
/**
* Class FileHashMemoryDb.
*
* Implements operations to load the file hash database into memory and work with it.
*/
class FileHashMemoryDb
{
const HEADER_SIZE = 1024;
const ROW_SIZE = 20;
/**
* @var int
*/
private $count;
/**
* @var array
*/
private $header;
/**
* @var resource
*/
private $fp;
/**
* @var array
*/
private $data;
/**
* Creates a new DB file and open it.
*
* @param $filepath
* @return FileHashMemoryDb
* @throws Exception
*/
public static function create($filepath)
{
if (file_exists($filepath)) {
throw new Exception('File \'' . $filepath . '\' already exists.');
}
$value = pack('V', 0);
$header = array_fill(0, 256, $value);
file_put_contents($filepath, implode($header));
return new self($filepath);
}
/**
* Opens a particular DB file.
*
* @param $filepath
* @return FileHashMemoryDb
* @throws Exception
*/
public static function open($filepath)
{
if (!file_exists($filepath)) {
throw new Exception('File \'' . $filepath . '\' does not exist.');
}
return new self($filepath);
}
/**
* FileHashMemoryDb constructor.
*
* @param mixed $filepath
* @throws Exception
*/
private function __construct($filepath)
{
$this->fp = fopen($filepath, 'rb');
if (false === $this->fp) {
throw new Exception('File \'' . $filepath . '\' can not be opened.');
}
try {
$this->header = unpack('V256', fread($this->fp, self::HEADER_SIZE));
$this->count = (int) (max(0, filesize($filepath) - self::HEADER_SIZE) / self::ROW_SIZE);
foreach ($this->header as $chunk_id => $chunk_size) {
if ($chunk_size > 0) {
$str = fread($this->fp, $chunk_size);
} else {
$str = '';
}
$this->data[$chunk_id] = $str;
}
} catch (Exception $e) {
throw new Exception('File \'' . $filepath . '\' is not a valid DB file. An original error: \'' . $e->getMessage() . '\'');
}
}
/**
* Calculates and returns number of hashes stored in a loaded database.
*
* @return int number of hashes stored in a DB
*/
public function count()
{
return $this->count;
}
/**
* Find hashes in a DB.
*
* @param array $list of hashes to find in a DB
* @return array list of hashes from the $list parameter that are found in a DB
*/
public function find($list)
{
sort($list);
$hash = reset($list);
$found = array();
foreach ($this->header as $chunk_id => $chunk_size) {
if ($chunk_size > 0) {
$str = $this->data[$chunk_id];
do {
$raw = pack("H*", $hash);
$id = ord($raw[0]) + 1;
if ($chunk_id == $id AND $this->binarySearch($str, $raw)) {
$found[] = (string)$hash;
}
} while ($chunk_id >= $id AND $hash = next($list));
if ($hash === false) {
break;
}
}
}
return $found;
}
/**
* Searches $item in the $str using an implementation of the binary search algorithm.
*
* @param $str
* @param $item
* @return bool
*/
private function binarySearch($str, $item) {
$item_size = strlen($item);
if ($item_size == 0) {
return false;
}
$first = 0;
$last = floor(strlen($str) / $item_size);
while ($first < $last) {
$mid = $first + (($last - $first) >> 1);
$b = substr($str, $mid * $item_size, $item_size);
if (strcmp($item, $b) <= 0) {
$last = $mid;
} else {
$first = $mid + 1;
}
}
$b = substr($str, $last * $item_size, $item_size);
if ($b == $item) {
return true;
} else {
return false;
}
}
/**
* FileHashDB destructor.
*/
public function __destruct()
{
fclose($this->fp);
}
}
class FilepathEscaper
{
public static function encodeFilepath($filepath)
{
return str_replace(array('\\', "\n", "\r"), array('\\\\', '\\n', '\\r'), $filepath);
}
public static function decodeFilepath($filepath)
{
return preg_replace_callback('~(\\\\+)(.)~', function ($matches) {
$count = strlen($matches[1]);
if ($count % 2 === 0) {
return str_repeat('\\', $count/2) . $matches[2];
}
return str_repeat('\\', floor($count/2)) . stripcslashes('\\' . $matches[2]);
}, $filepath);
}
public static function encodeFilepathByBase64($filepath)
{
return base64_encode($filepath);
}
public static function decodeFilepathByBase64($filepath_base64)
{
return base64_decode($filepath_base64);
}
}
class StringToStreamWrapper {
const WRAPPER_NAME = 'var';
private static $_content;
private $_position;
/**
* Prepare a new memory stream with the specified content
* @return string
*/
public static function prepare($content)
{
if (!in_array(self::WRAPPER_NAME, stream_get_wrappers())) {
stream_wrapper_register(self::WRAPPER_NAME, get_class());
}
self::$_content = $content;
}
public function stream_open($path, $mode, $options, &$opened_path)
{
$this->_position = 0;
return true;
}
public function stream_read($count)
{
$ret = substr(self::$_content, $this->_position, $count);
$this->_position += strlen($ret);
return $ret;
}
public function stream_stat()
{
return array();
}
public function stream_eof()
{
return $this->_position >= strlen(self::$_content);
}
public function stream_set_option($option , $arg1, $arg2 )
{
return true;
}
}
class Normalization
{
private static function need_skip($string, $i)
{
$chars = " @\r\n\t";
if (isset($string[$i]) && strpos($chars, $string[$i]) !== false) {
$i++;
return $i;
}
return false;
}
private static function match_shortopen_tag($string, $i, $needle, $j)
{
$pos_needle = false;
$pos_string = false;
if ((isset($needle[$j - 2]) && isset($string[$i - 2]))
&& (($needle[$j - 2] == '<') && ($string[$i - 2] == '<'))
&& (isset($needle[$j - 1]) && isset($string[$i - 1]))
&& ($needle[$j - 1] == '?' && $string[$i - 1] == '?')
) {
$pos_needle = $j;
$pos_string = $i;
}
if ($pos_needle && (isset($needle[$pos_needle]) && $needle[$pos_needle] == 'p')
&& (isset($needle[$pos_needle + 1]) && $needle[$pos_needle + 1] == 'h')
&& (isset($needle[$pos_needle + 2]) && $needle[$pos_needle + 2] == 'p')
) {
$pos_needle = $pos_needle + 3;
}
if ($pos_string && (isset($string[$pos_string]) && $string[$pos_string] == 'p')
&& (isset($string[$pos_string + 1]) && $string[$pos_string + 1] == 'h')
&& (isset($string[$pos_string + 2]) && $string[$pos_string + 2] == 'p')
) {
$pos_string = $pos_string + 3;
}
return [$pos_needle, $pos_string];
}
public static function strip_whitespace($string, $save_length = false)
{
if (!$save_length) {
StringToStreamWrapper::prepare($string);
return @php_strip_whitespace(StringToStreamWrapper::WRAPPER_NAME . '://');
} else {
$string = preg_replace_callback('~'
. '(\'(?:.*?[^\\\\])??(?:(?:\\\\\\\\)+)?+\')' //match all '' strings to exclude it from comments
. '|("(?:.*?[^\\\\])??(?:(?:\\\\\\\\)+)?+")' //match all "" strings to exclude it from comments
. '|(//.*?(?:[\n\r]|$))' //match // comments
. '|(/\*(?:.*?)\*/)' //match /**/ comments
. '|(#[^\n\r]*[\n\r])' //match # comments
. '~mis', function($m) {
if (isset($m[1]) && !empty($m[1])) {
return $m[1];
}
if (isset($m[2]) && !empty($m[2])) {
return $m[2];
}
if ((isset($m[3]) && !empty($m[3])) || (isset($m[4]) && !empty($m[4])) || (isset($m[5]) && !empty($m[5]))) {
if (isset($m[3]) && substr(trim($m[3]), -2, 2) == '?>') {
return (str_repeat(' ', strlen($m[0]) - 2) . '?>');
} else {
return str_repeat(' ', strlen($m[0]));
}
}
}, $string);
return $string;
}
}
public static function normalize($string, $save_length = false)
{
$search = array( ' ;', ' =', ' ,', ' .', ' (', ' )', ' {', ' }', '; ', '= ', ', ', '. '
, '( ', '( ', '{ ', '} ', ' !', ' >', ' <', ' _', '_ ', '< ', '> ', ' $', ' %', '% '
, '# ', ' #', '^ ', ' ^', ' &', '& ', ' ?', '? ');
$replace = array( ';', '=', ',', '.', '(', ')', '{', '}', ';', '=', ',', '.'
, '(', ')', '{', '}', '!', '>', '<', '_', '_', '<', '>', '$', '%', '%'
, '#', '#', '^', '^', '&', '&', '?', '?');
if (!$save_length) {
$string = str_replace('@', '', $string);
$string = preg_replace('~\s+~smi', ' ', $string);
$string = str_replace($search, $replace, $string);
}
$string = preg_replace_callback('~\bchr\(\s*([0-9a-fA-FxX]+)\s*\)~', function($m) use ($save_length) {
if ($save_length) {
return str_pad("'" . @chr(intval($m[1], 0)) . "'", strlen($m[0]), ' ');
} else {
return "'" . @chr(intval($m[1], 0)) . "'";
}
}, $string);
$string = preg_replace_callback('/\&[#\w]{2,20};/i', function($m) use ($save_length) {
if ($save_length) {
return str_pad(@html_entity_decode($m[0]), strlen($m[0]), ' ');
} else {
return @html_entity_decode($m[0]);
}
}, $string);
$string = preg_replace_callback('/\\\\x([a-fA-F0-9]{1,2})/i', function($m) use ($save_length) {
if ($save_length) {
return str_pad(chr(@hexdec($m[1])), strlen($m[0]), ' ');
} else {
return @chr(hexdec($m[1]));
}
}, $string);
$string = preg_replace_callback('/\\\\([0-9]{1,3})/i', function($m) use ($save_length) {
if ($save_length) {
return str_pad(@chr(octdec($m[1])), strlen($m[0]), ' ');
} else {
return @chr(octdec($m[1]));
}
}, $string);
$string = preg_replace_callback('/[\'"]\s*?\.+\s*?[\'"]/smi', function($m) use ($save_length) {
if ($save_length) {
return str_repeat(' ', strlen($m[0]));
} else {
return '';
}
}, $string);
$string = preg_replace_callback('/[\'"]\s*?\++\s*?[\'"]/smi', function($m) use ($save_length) {
if ($save_length) {
return str_repeat(' ', strlen($m[0]));
} else {
return '';
}
}, $string);
if (!$save_length) {
$string = str_replace('<?php', '<?php ', $string);
$string = preg_replace('~\s+~', ' ', $string);
}
return $string;
}
public static function string_pos($string, $needle)
{
$j = 0;
$skip = false;
$start = false;
$end = 0;
$last_tag = [false, false];
$string = self::strip_whitespace($string, true);
$string = self::normalize($string, true);
$needle = self::normalize($needle, true);
for ($i = 0, $iMax = strlen($string); $i < $iMax; $i++) {
if(trim($string[$i]) === '' && trim($needle[$j]) === '') {
$string[$i] = $needle[$j] = ' ';
}
if ($string[$i] == $needle[$j]) {
if ($j == 0) {
$start = $i;
} elseif ($j == strlen($needle) - 1) {
$end = $i;
return [$start, $end];
}
$j++;
} else {
$match_php_tag = self::match_shortopen_tag($string, $i, $needle, $j);
if ($match_php_tag[0] !== false && ($last_tag[0] !== $match_php_tag[0])) {
$j = $match_php_tag[0];
}
if ($match_php_tag[1] !== false && ($last_tag[1] !== $match_php_tag[1])) {
$i = $match_php_tag[1] - 1;
}
$last_tag = $match_php_tag;
if ($match_php_tag[0] !== false || ($match_php_tag[1] !== false && (!empty($last_tag)))) {
continue;
}
$skip = self::need_skip($string, $i);
if ($skip !== false && $start !== false) {
$i = $skip - 1;
} else {
$j = 0;
}
}
}
return false;
}
}
class Encoding
{
// Unicode BOM is U+FEFF, but after encoded, it will look like this.
const UTF32_BIG_ENDIAN_BOM = "\x00\x00\xFE\xFF";
const UTF32_LITTLE_ENDIAN_BOM = "\xFF\xFE\x00\x00";
const UTF16_BIG_ENDIAN_BOM = "\xFE\xFF";
const UTF16_LITTLE_ENDIAN_BOM = "\xFF\xFE";
const UTF8_BOM = "\xEF\xBB\xBF";
public static function detectUTFEncoding($text)
{
$first2 = substr($text, 0, 2);
$first3 = substr($text, 0, 3);
$first4 = substr($text, 0, 4);
if ($first3 == self::UTF8_BOM) {
return 'UTF-8';
} elseif ($first4 == self::UTF32_BIG_ENDIAN_BOM) {
return 'UTF-32BE';
} elseif ($first4 == self::UTF32_LITTLE_ENDIAN_BOM) {
return 'UTF-32LE';
} elseif ($first2 == self::UTF16_BIG_ENDIAN_BOM) {
return 'UTF-16BE';
} elseif ($first2 == self::UTF16_LITTLE_ENDIAN_BOM) {
return 'UTF-16LE';
}
return false;
}
public static function iconvSupported()
{
return (function_exists('iconv') && is_callable('iconv'));
}
public static function convertToCp1251($from, $str)
{
$ret = @iconv($from, 'CP1251//TRANSLIT', $str);
if ($ret === false) {
$ret = @iconv($from, 'CP1251//IGNORE', $str);
}
return $ret;
}
public static function convertToUTF8($from, $str)
{
return @iconv($from, 'UTF-8//IGNORE', $str);
}
}
/**
* Class RapidScanStorageRecord.
*
* Implements db record for RapidScan
*/
class RapidScanStorageRecord
{
const WHITE = 1; // white listed file in cloud db
const BLACK = 6; // black listed file in cloud db
const DUAL_USE = 2; // dual used listed file in cloud db
const UNKNOWN = 3; // unknown file --> file not listed in cloud db
const HEURISTIC = 4; //detected as heuristic
const CONFLICT = 5; // we have filename hashing conflict for this file
const NEWFILE = 0; // this is a new file (or content changed)
const RX_MALWARE = 7; // detected as malware by rx scan
const RX_SUSPICIOUS = 8; // detected as suspicious by rx scan
const RX_GOOD = 9; // detected as good by rx scan
/**
* @var string;
*/
private $filename;
/**
* @var int
*/
private $key;
/**
* @var int
*/
private $updated_ts;
/**
* @var int
*/
private $verdict;
/**
* @var string
*/
private $sha2;
/**
* @var string
*/
private $signature = '';
/**
* @var string
*/
private $snippet = '';
/**
* RapidScanStorageRecord constructor.
* @param $key
* @param $updated_ts
* @param int $verdict
* @param $sha2
* @param string $signature
*/
private function __construct($key, $updated_ts, $verdict, $sha2, $signature, $filename, $snippet)
{
$this->filename = $filename;
$this->key = $key;
$this->updated_ts = $updated_ts;
$this->verdict = $verdict;
$this->sha2 = $sha2;
$this->snippet = $snippet;
if ($signature!=='') {
$this->signature = self::padTo10Bytes($signature);
}
}
/**
* Create db storage record from file
* @param $filename
* @param string $signature
* @param int $verdict
* @return RapidScanStorageRecord
* @throws Exception
*/
public static function fromFile($file, $signature = '', $verdict = self::UNKNOWN, $snippet = '')
{
$filename = '';
$stat = [];
$inode = 0;
$ctime = 0;
$mtime = 0;
if (is_string($file) && file_exists($file)) {
$filename = $file;
$stat = stat($filename);
$inode = $stat['ino'];
$ctime = $stat['ctime'];
$mtime = $stat['mtime'];
} else if ($file instanceof FileInfo && file_exists($file->getFilename())){
$filename = $file->getFilename();
$inode = $file->getInode();
$ctime = $file->getCreated();
$mtime = $file->getModified();
}
if (!file_exists($filename)) {
throw new Exception('File \'' . $filename . '\' doesn\'t exists.');
}
$key = (int)((string)self::fileNameHash($filename) . (string)$inode);
$updated_ts = max($mtime, $ctime);
$sha2 = '';
if (!$verdict) {
$verdict = self::NEWFILE;
}
if ($signature!=='') {
$signature = self::padTo10Bytes($signature);
}
return new self($key, $updated_ts, $verdict, $sha2, $signature, $filename, $snippet);
}
/**
* @param $array
* @return RapidScanStorageRecord
*/
public static function fromArray($array)
{
$key = $array['key'];
$updated_ts = $array['updated_ts'];
$sha2 = hex2bin($array['sha2']);
$verdict = $array['verdict'];
$signature = $array['signature'];
return new self($key, $updated_ts, $verdict, $sha2, $signature, '', '');
}
/**
* @return array
*/
public function toArray()
{
$array['key'] = $this->key;
$array['updated_ts'] = $this->updated_ts;
$array['verdict'] = $this->verdict;
$array['sha2'] = bin2hex($this->sha2);
$array['signature'] = $this->signature;
return $array;
}
/**
* @return array
*/
public function calcSha2()
{
$this->sha2 = hash('sha256', file_get_contents($this->filename), true);
}
/**
* @param $verdict
*/
public function setVerdict($verdict)
{
$this->verdict = $verdict;
}
/**
* @return int
*/
public function getKey()
{
return $this->key;
}
/**
* @param $signature
*/
public function setSignature($signature)
{
if ($signature!=='') {
$this->signature = self::padTo10Bytes($signature);
}
}
/**
* Unpack bytestring $value to RapidScanStorageRecord
* @param $hash
* @param $value
* @return RapidScanStorageRecord
*/
public static function unpack($hash, $value)
{
// pack format
// 8 bytes timestamp
// 1 byte verdict
// 32 bytes sha2
// 10 bytes signature (only for BLACK, DUAL_USE, RX_MALWARE, RX_SUSPICIOUS)
// note - we will hold bloomfilter for file later on for those that are WHITE
// it will be used to detect installed apps
$signature = '';
$timestamp = unpack("l", substr($value, 0, 8));
$updated_ts = array_pop($timestamp);
$verdict = $value[8];
$verdict = (int)bin2hex($verdict);
$sha2 = substr($value, 9, 32);
if (in_array($verdict, array(self::BLACK, self::DUAL_USE, self::RX_MALWARE, self::RX_SUSPICIOUS))) {
$signature = substr($value, 41, 10); # 10 bytes signature string
}
if (strlen($value) > 51) {
$snippet = substr($value, 51);
} else {
$snippet = '';
}
return new self($hash, $updated_ts, $verdict, $sha2, $signature, '', $snippet);
}
/**
* Pack RapidScanStorageRecord to bytestring to save in db
* @return string
*/
public function pack()
{
$signature = '';
if (strlen($this->signature) > 0) {
$signature = $this->signature;
}
return (($this->updated_ts < 0) ? str_pad(pack("l", $this->updated_ts), 8, "\xff") : str_pad(pack("l", $this->updated_ts), 8, "\x00")) . pack("c", $this->verdict) . $this->sha2 . $signature . $this->snippet;
}
/**
* Hash function for create hash of full filename to store in db as key
* @param $str
* @return int
*/
private static function fileNameHash($str)
{
for ($i = 0, $h = 5381, $len = strlen($str); $i < $len; $i++) {
$h = (($h << 5) + $h + ord($str[$i])) & 0x7FFFFFFF;
}
return $h;
}
/**
* Convert string to utf-8 and fitting/padding it to 10 bytes
* @param $str
* @return string
*/
private static function padTo10Bytes($str)
{
# convert string to bytes in UTF8, and add 0 bytes to pad it to 10
# cut to 10 bytes of necessary
$str = utf8_encode($str);
$len = strlen($str);
if ($len < 10) {
$str = str_pad($str, 10, "\x00");
} elseif ($len > 10) {
$str = substr($str, 0, 10);
}
return $str;
}
/**
* @return int
*/
public function getUpdatedTs()
{
return $this->updated_ts;
}
/**
* @return int
*/
public function getVerdict()
{
return $this->verdict;
}
/**
* @return string
*/
public function getSha2()
{
return $this->sha2;
}
/**
* @return string
*/
public function getSignature()
{
return $this->signature;
}
/**
* @return string
*/
public function getFilename()
{
return $this->filename;
}
/**
* @param $filename
*/
public function setFilename($filename)
{
$this->filename = $filename;
}
/**
* @return string
*/
public function getSnippet()
{
return $this->snippet;
}
/**
* @param $filename
*/
public function setSnippet($snippet)
{
$this->snippet = $snippet;
}
}
/**
* Interface RapidScanStorage implements class to work with RapidScan db
* @package Aibolit\Lib\Scantrack
*/
class RapidScanStorage
{
/**
* @var string
*/
protected $old_dir;
/**
* @var string
*/
protected $new_dir;
/**
* @var resource
*/
protected $new_db;
/**
* @var resource
*/
protected $old_db;
/**
* @var resource
*/
private $wb;
/**
* @var int
*/
public $batch_count;
/**
* RapidScanStorage constructor.
* @param $base - folder where db located
*/
public function __construct($base)
{
if(!is_dir($base) && !mkdir($base) && !is_dir($base)) {
throw new Exception(sprintf('Directory "%s" was not created', $base));
}
$this->old_dir = $base . '/current';
$this->new_dir = $base . '/new';
$options = array('create_if_missing' => true, 'compression'=> LEVELDB_NO_COMPRESSION);
$this->new_db = new LevelDB($this->new_dir, $options);
$this->old_db = new LevelDB($this->old_dir, $options);
$this->wb = NULL; // will be use to track writing to batch
$this->batch_count = 0;
}
/**
* @param RapidScanStorageRecord $record
* @return bool
*/
public function put(RapidScanStorageRecord $record)
{
$this->startBatch();
$this->batch_count++;
$value = $this->wb->put($record->getKey(), $record->pack());
return $value;
}
/**
* @param $hash
* @return bool|RapidScanStorageRecord
*/
public function getNew($hash)
{
$value = $this->new_db->get($hash);
if($value) {
$return = RapidScanStorageRecord::unpack($hash, $value);
return $return;
}
return false;
}
/**
* @param $hash
* @return bool|RapidScanStorageRecord
*/
public function getOld($hash)
{
$value = $this->old_db->get($hash);
if($value) {
$return = RapidScanStorageRecord::unpack($hash, $value);
return $return;
}
return false;
}
/**
* @param $hash
* @return bool
*/
public function delete($hash)
{
$return = $this->new_db->delete($hash);
return $return;
}
/**
* Close db, remove old db, move new to a new space
*/
public function finish()
{
$this->old_db->close();
$this->flushBatch();
$this->new_db->close();
self::rmtree($this->old_dir);
rename($this->new_dir, $this->old_dir);
}
/**
* Start batch operations
*/
private function startBatch()
{
if(!$this->wb) {
$this->wb = new LevelDBWriteBatch();
$this->batch_count = 0;
}
}
/**
* write all data in a batch, reset batch
*/
public function flushBatch()
{
if ($this->wb) {
$this->new_db->write($this->wb);
$this->batch_count = 0;
$this->wb = NULL;
}
}
/**
* Helper function to remove folder tree
* @param $path
*/
public static function rmTree($path)
{
if (is_dir($path)) {
foreach (scandir($path) as $name) {
if (in_array($name, array('.', '..'))) {
continue;
}
$subpath = $path.DIRECTORY_SEPARATOR . $name;
self::rmTree($subpath);
}
rmdir($path);
} else {
unlink($path);
}
}
}
/**
* For work with Cloud Assisted Storage
* @package Aibolit\Lib\Scantrack
*/
class CloudAssistedStorage
{
private $db_filepath = '';
public function __construct($folder)
{
if(!is_dir($folder) && !mkdir($folder) && !is_dir($folder)) {
throw new Exception(sprintf('Directory "%s" was not created', $folder));
}
$this->db_filepath = $folder . DIRECTORY_SEPARATOR . 'cloud_assisted_verdicts.json';
}
public function getList()
{
if (!file_exists($this->db_filepath)) {
return [];
}
$content = file_get_contents($this->db_filepath);
if (!$content) {
return [];
}
$list = json_decode($content, true);
if (!$list || !is_array($list)) {
return [];
}
return $list;
}
public function putList($list)
{
file_put_contents($this->db_filepath, json_encode($list));
}
public function delete()
{
if (!file_exists($this->db_filepath)) {
return;
}
unlink($this->db_filepath);
}
}
/**
* This is actual class that does account level scan
* and remembers the state of scan
* Class RapidAccountScan
* @package Aibolit\Lib\Scantrack
*/
class RapidAccountScan
{
const RESCAN_ALL = 0; // mode of operation --> rescan all files that are not white/black/dual_use using cloud scanner & regex scanner
const RESCAN_NONE = 1; // don't re-scan any files that we already scanned
const RESCAN_SUSPICIOUS = 2; // only re-scan suspicious files using only regex scanner
const MAX_BATCH = 1000; // max files to write in a db batch write
const MAX_TO_SCAN = 1000; // max files to scan using cloud/rx scanner at a time
private $db;
private $cas_db;
private $cas_list = [];
private $vars = null;
private $scanlist;
private $collisions;
private $processedFiles;
private $rescan_count = 0;
private $counter = 0;
private $str_error = false;
private $scanner = null;
/**
* RapidAccountScan constructor.
* @param RapidScanStorage $rapidScanStorage
*/
public function __construct($scanner, $rapidScanStorage, $cloudAssistedStorage, &$vars, $counter = 0)
{
$this->db = $rapidScanStorage;
$this->cas_db = $cloudAssistedStorage;
$this->vars = $vars;
$this->scanlist = array();
$this->collisions = array();
$this->processedFiles = 0;
$this->counter = $counter;
$this->scanner = $scanner;
}
/**
* Get str error
*/
public function getStrError()
{
return $this->str_error;
}
/**
* Get count of rescan(regexp) files
*/
public function getRescanCount()
{
return $this->rescan_count;
}
/**
* placeholder for actual regex scan
* return RX_GOOD, RX_MALWARE, RX_SUSPICIOUS and signature from regex scaner
* if we got one
*/
private function regexScan($filename, $i, $vars)
{
$this->rescan_count++;
printProgress(++$this->processedFiles, $filename, $vars);
$return = $this->scanner->QCR_ScanFile($filename, $vars, null, $i, false);
return $return;
}
/**
* we will have batch of new files that we will scan
* here we will write them into db once we scanned them
* we need to check that there is no conflicts/collisions
* in names, for that we check for data in db if such filename_hash
* already exists, but we also keep set of filename_hashes of given
* batch, to rule out conflicts in current batch as well
*/
private function writeNew()
{
$this->collisions = array();
foreach ($this->scanlist as $fileinfo) {
if (in_array($fileinfo->getKey(), $this->collisions) || $this->db->getNew($fileinfo->getKey())) {
$fileinfo->setVerdict(RapidScanStorageRecord::CONFLICT);
}
$this->collisions [] = $fileinfo->getKey();
$this->db->put($fileinfo);
}
}
/**
* given a batch do cloudscan
* @throws \Exception
*/
private function doCloudScan()
{
if (count($this->scanlist) <= 0) {
return;
}
$index_table = [];
$blackfiles = [];
$sha_list = [];
foreach ($this->scanlist as $i => $fileinfo) {
$sha_list[] = bin2hex($fileinfo->getSha2());
$index_table[] = $i;
$fileinfo->setVerdict(RapidScanStorageRecord::UNKNOWN);
}
$ca = Factory::instance()->create(CloudAssistedRequest::class, [CLOUD_ASSIST_TOKEN]);
$white_raw = [];
$black_raw = [];
$verdicts_black_raw = [];
try {
list($white_raw, $black_raw, $verdicts_black_raw) = $ca->checkFilesByHash($sha_list);
} catch (\Exception $e) {
$this->str_error = $e->getMessage();
}
$dual = array_intersect($white_raw, $black_raw);
$black_raw = array_diff($black_raw, $white_raw);
foreach ($white_raw as $index) {
$this->scanlist[$index_table[$index]]->setVerdict(RapidScanStorageRecord::WHITE);
}
$signatures_db = [];
foreach ($black_raw as $i => $index) {
$this->scanlist[$index_table[$index]]->setVerdict(RapidScanStorageRecord::BLACK);
$signature = isset($verdicts_black_raw[$i]) ? $verdicts_black_raw[$i] : '';
$signature_id = 'c_' . hash('crc32', $signature);
$signatures_db[$signature_id] = $signature;
$this->scanlist[$index_table[$index]]->setSignature($signature_id);
$blackfiles[$this->scanlist[$index_table[$index]]->getFilename()] = [
'h' => $sha_list[$index],
'ts' => time(),
'sn' => $signature,
'ras_sigid' => $signature_id,
];
}
$signatures_list = $this->cas_db->getList();
foreach ($signatures_db as $hash => $sig) {
$this->cas_list[$hash] = $sig;
if (isset($signatures_list[$hash])) {
continue;
}
$signatures_list[$hash] = $sig;
}
$this->cas_db->putList($signatures_list);
foreach ($dual as $index) {
$this->scanlist[$index_table[$index]]->setVerdict(RapidScanStorageRecord::DUAL_USE);
$this->scanlist[$index_table[$index]]->setSignature('DUAL'); //later on we will get sig info from cloud
}
// we can now update verdicts in batch for those that we know
//add entries to report, when needed
$this->vars->blackFiles = array_merge($this->vars->blackFiles, $blackfiles);
unset($white_raw, $black_raw, $dual, $sha_list, $index_table);
}
/**
* regex scan a single file, add entry to report if needed
* @param $fileInfo
* @param $i
*/
private function _regexScan($fileInfo, $i, $vars)
{
$regex_res = $this->regexScan($fileInfo->getFilename(), $i, $vars);
if (!is_array($regex_res)) {
return;
}
list($result, $sigId, $snippet) = $regex_res;
$fileInfo->setVerdict($result);
if ($result !== RapidScanStorageRecord::RX_GOOD) {
$fileInfo->setSignature($sigId);
$fileInfo->setSnippet($snippet);
}
}
/**
* regex scan batch of files.
*/
private function doRegexScan($vars)
{
foreach ($this->scanlist as $i => $fileinfo) {
if (!in_array($fileinfo->getVerdict(), array(
RapidScanStorageRecord::WHITE,
RapidScanStorageRecord::BLACK,
RapidScanStorageRecord::DUAL_USE
))
) {
$this->_regexScan($fileinfo, $i, $vars);
}
}
}
private function processScanList($vars)
{
$this->doCloudScan();
$this->doRegexScan($vars);
$this->writeNew();
$this->scanlist = [];
}
private function scanFile($filename, $rescan, $i, $vars)
{
if ($vars->fileinfo !== null) {
if($filename !== $vars->fileinfo->getFilename()) {
unset($file);
$vars->fileinfo = null;
}
}
if ($vars->fileinfo == null) {
$file = new FileInfo($filename, $i);
$vars->fileinfo = $file;
}
$file = $vars->fileinfo;
if (!file_exists($filename)) {
return false;
}
$file = RapidScanStorageRecord::fromFile($file);
$old_value = $this->db->getOld($file->getKey());
$old_mtime = 0;
if ($old_value) {
$old_mtime = $old_value->getUpdatedTs();
if ($file->getUpdatedTs() == $old_mtime) {
$file = $old_value;
$file->setFilename($filename);
}
}
if ($file->getVerdict() == RapidScanStorageRecord::UNKNOWN
|| $file->getVerdict() == RapidScanStorageRecord::CONFLICT
|| $file->getUpdatedTs() !== $old_mtime
) {
// these files has changed or we know nothing about them, lets re-calculate sha2
// and do full scan
$file->calcSha2();
$file->setVerdict(RapidScanStorageRecord::NEWFILE);
$this->scanlist[$i] = $file;
} elseif ($file->getVerdict() == RapidScanStorageRecord::BLACK) {
//these files hasn't changed, but need to be reported as they are on one of the lists
$signature_id = $file->getSignature();
$signature = isset($this->cas_list[$signature_id]) ? $this->cas_list[$signature_id] : '';
$this->vars->blackFiles[$filename] = [
'h' => bin2hex($file->getSha2()),
'ts' => time(),
'sn' => $signature,
'ras_sigid' => $signature_id,
];
$this->db->put($file);
} elseif ($file->getVerdict() == RapidScanStorageRecord::DUAL_USE) {
$this->db->put($file);
} elseif (($rescan == self::RESCAN_SUSPICIOUS || $rescan == self::RESCAN_NONE)
&& $file->getVerdict() == RapidScanStorageRecord::RX_MALWARE
) {
//this files were detected as rx malware before, let's report them
$sigId = trim($file->getSignature(), "\0");
if (isset($sigId) && isset($vars->signs->_Mnemo[$sigId])) {
$sigName = $vars->signs->_Mnemo[$sigId];
$snippet = $file->getSnippet();
if (strpos($sigName, 'SUS') !== false && AI_EXTRA_WARN) {
$vars->warningPHP[] = $i;
$vars->warningPHPFragment[] = $snippet;
$vars->warningPHPSig[] = $sigId;
} elseif (strtolower(pathinfo($filename, PATHINFO_EXTENSION)) == 'js') {
$vars->criticalJS[] = $i;
$vars->criticalJSFragment[] = $snippet;
$vars->criticalJSSig[] = $sigId;
} else {
$vars->criticalPHP[] = $i;
$vars->criticalPHPFragment[] = $snippet;
$vars->criticalPHPSig[] = $sigId;
}
$this->scanner->AddResult($vars->fileinfo, $i, $vars);
$this->db->put($file);
} else {
$this->scanlist[$i] = $file;
}
} elseif ((
$rescan == self::RESCAN_ALL
&& in_array($file->getVerdict(), array(
RapidScanStorageRecord::RX_SUSPICIOUS,
RapidScanStorageRecord::RX_GOOD,
RapidScanStorageRecord::RX_MALWARE
))
)
|| (
$rescan == self::RESCAN_SUSPICIOUS
&& $file->getVerdict() == RapidScanStorageRecord::RX_SUSPICIOUS
)
) {
//rescan all mode, all none white/black/dual listed files need to be re-scanned fully
$this->scanlist[$i] = $file;
} else {
//in theory -- we should have only white files here...
$this->db->put($file);
}
if (count($this->scanlist) >= self::MAX_TO_SCAN) {
// our scan list is big enough
// let's flush db, and scan the list
$this->db->flushBatch();
$this->processScanList($vars);
}
if ($this->db->batch_count >= self::MAX_BATCH) {
//we have added many entries to db, time to flush it
$this->db->flushBatch();
$this->processScanList($vars);
}
unset($file);
$vars->fileinfo = null;
}
public function scan($files, $vars, $rescan = self::RESCAN_SUSPICIOUS)
{
$i = 0;
$this->cas_list = $this->cas_db->getList();
foreach ($files as $filepath) {
$counter = $this->counter + $i;
$vars->totalFiles++;
$this->processedFiles = $counter - $vars->totalFolder - count($this->scanlist);
printProgress($this->processedFiles, $filepath, $vars);
$this->scanFile($filepath, $rescan, $counter, $vars);
$i++;
}
if ($rescan == self::RESCAN_ALL) {
$this->cas_db->delete();
$this->cas_list = [];
foreach ($this->vars->blackFiles as $blackfile) {
$this->cas_list[$blackfile['ras_sigid']] = $blackfile['sn'];
}
$this->cas_db->putList($this->cas_list);
}
//let's flush db again
$this->db->flushBatch();
//process whatever is left in our scan list
if (count($this->scanlist) > 0) {
$this->processScanList($vars);
}
// whitelist
$snum = 0;
$list = $this->scanner->check_whitelist($vars->structure['crc'], $snum);
$keys = array(
'criticalPHP',
'criticalJS',
'g_Iframer',
'g_Base64',
'phishing',
'adwareList',
'g_Redirect',
'warningPHP'
);
foreach ($keys as $p) {
if (empty($vars->{$p})) {
continue;
}
$p_Fragment = $p . 'Fragment';
$p_Sig = $p . 'Sig';
if ($p == 'g_Redirect') {
$p_Fragment = $p . 'PHPFragment';
}
if ($p == 'g_Phishing') {
$p_Sig = $p . 'SigFragment';
}
$count = count($vars->{$p});
for ($i = 0; $i < $count; $i++) {
$id = $vars->{$p}[$i];
if ($vars->structure['crc'][$id] !== 0 && in_array($vars->structure['crc'][$id], $list)) {
$rec = RapidScanStorageRecord::fromFile($vars->structure['n'][$id]);
$rec->calcSha2();
$rec->setVerdict(RapidScanStorageRecord::RX_GOOD);
$this->db->put($rec);
unset($vars->{$p}[$i], $vars->{$p_Sig}[$i], $vars->{$p_Fragment}[$i]);
}
}
$vars->{$p} = array_values($vars->{$p});
$vars->{$p_Fragment} = array_values($vars->{$p_Fragment});
if (!empty($vars->{$p_Sig})) {
$vars->{$p_Sig} = array_values($vars->{$p_Sig});
}
}
//close databases and rename new into 'current'
$this->db->finish();
}
}
/**
* DbFolderSpecification class file.
*/
/**
* Class DbFolderSpecification.
*
* It can be use for checking requirements for a folder that is used for storing a RapidScan DB.
*/
class DbFolderSpecification
{
/**
* Check whether a particular folder satisfies requirements.
*
* @param string $folder
* @return bool
*/
public function satisfiedBy($folder)
{
if (!file_exists($folder) || !is_dir($folder)) {
return false;
}
$owner_id = (int)fileowner($folder);
if (function_exists('posix_getpwuid')) {
$owner = posix_getpwuid($owner_id);
if (!isset($owner['name']) || $owner['name'] !== 'root') {
return false;
}
}
elseif ($owner_id != 0) {
return false;
}
$perms = fileperms($folder);
if (($perms & 0x0100) // owner r
&& ($perms & 0x0080) // owner w
&& ($perms & 0x0040) && !($perms & 0x0800) // owner x
&& !($perms & 0x0020) // group without r
&& !($perms & 0x0010) // group without w
&& (!($perms & 0x0008) || ($perms & 0x0400))// group without x
&& !($perms & 0x0004) // other without r
&& !($perms & 0x0002) // other without w
&& (!($perms & 0x0001) || ($perms & 0x0200))// other without x
) {
return true;
}
return false;
}
}
/**
* CriticalFileSpecification class file.
*/
/**
* Class CriticalFileSpecification.
*/
class CriticalFileSpecification
{
/**
* @var array list of extension
*/
private $extensions = [
'php',
'htaccess',
'cgi',
'pl',
'o',
'so',
'py',
'sh',
'phtml',
'php3',
'php4',
'php5',
'php6',
'php7',
'pht',
'shtml',
'susp',
'suspected',
'infected',
'vir',
'ico',
'js',
'json',
'com',
''
];
private $js_extensions = [
'js',
'json',
'html',
'htm',
'suspicious'
];
private $phish_extensions = [
'js',
'html',
'htm',
'suspected',
'php',
'phtml',
'pht',
'php7'
];
private static $critical_content = '^\s*<\?php'
. '|^\s*<\?='
. '|^#!/usr'
. '|^#!/bin'
. '|\beval'
. '|assert'
. '|base64_decode'
. '|\bsystem'
. '|create_function'
. '|\bexec'
. '|\bpopen'
. '|\bfwrite'
. '|\bfputs'
. '|file_get_'
. '|call_user_func'
. '|file_put_'
. '|\$_REQUEST'
. '|ob_start'
. '|\$_GET'
. '|\$_POST'
. '|\$_SERVER'
. '|\$_FILES'
. '|\bmove'
. '|\bcopy'
. '|\barray_'
. '|reg_replace'
. '|\bmysql_'
. '|\bchr'
. '|fsockopen'
. '|\$GLOBALS'
. '|sqliteCreateFunction'
. '|EICAR-STANDARD-ANTIVIRUS-TEST-FILE';
private static $critical_js_content = '<script'
. '|<iframe'
. '|<object'
. '|<embed'
. '|fromCharCode'
. '|setTimeout'
. '|setInterval'
. '|location\.'
. '|document\.'
. '|window\.'
. '|navigator\.'
. '|\$(this)\.'; /**$g_VirusEntries**/
private static $critical_phish_content = '<\s*title'
. '|<\s*html'
. '|<\s*form'
. '|<\s*body'
. '|bank'
. '|account'; /**$g_PhishEntries*/
public function __construct()
{
$this->extensions = array_flip($this->extensions);
$this->js_extensions = array_flip($this->js_extensions);
$this->phish_extensions = array_flip($this->phish_extensions);
}
/**
* Check whether a particular file with specified extension is critical.
*
* @param string $ext
* @param string $type
* @return bool
*/
public function satisfiedBy($ext, $type)
{
return isset($this->{$type}[$ext]);
}
/**
* Check whether a particular content is critical.
*
* @param string $content
* @param string $type
* @return bool
*/
public function satisfiedByContent($content, $type)
{
return preg_match('~' . $this->{$type} . '~smiS', $content, $l_Found) ? true : false;
}
}
class Helpers
{
public static function normalize($string, $save_length = false)
{
$search = array( ' ;', ' =', ' ,', ' .', ' (', ' )', ' {', ' }', '; ', '= ', ', ', '. '
, '( ', '( ', '{ ', '} ', ' !', ' >', ' <', ' _', '_ ', '< ', '> ', ' $', ' %', '% '
, '# ', ' #', '^ ', ' ^', ' &', '& ', ' ?', '? ');
$replace = array( ';', '=', ',', '.', '(', ')', '{', '}', ';', '=', ',', '.'
, '(', ')', '{', '}', '!', '>', '<', '_', '_', '<', '>', '$', '%', '%'
, '#', '#', '^', '^', '&', '&', '?', '?');
if (!$save_length) {
$string = str_replace('@', '', $string);
$string = preg_replace('~\s+~smi', ' ', $string);
$string = str_replace($search, $replace, $string);
}
$string = preg_replace_callback('~\bchr\(\s*([0-9a-fA-FxX]+)\s*\)~', function($m) use ($save_length) {
if ($save_length) {
return str_pad("'" . @chr(intval($m[1], 0)) . "'", strlen($m[0]), ' ');
} else {
return "'" . @chr(intval($m[1], 0)) . "'";
}
}, $string);
$string = preg_replace_callback('/\&\#([0-9]{1,3});/i', function($m) use ($save_length) {
if ($save_length) {
return str_pad(@chr((int)$m[1]), strlen($m[0]), ' ');
} else {
return @chr((int)$m[1]);
}
}, $string);
$string = preg_replace_callback('/\\\\x([a-fA-F0-9]{1,2})/i', function($m) use ($save_length) {
if ($save_length) {
return str_pad(chr(@hexdec($m[1])), strlen($m[0]), ' ');
} else {
return @chr(hexdec($m[1]));
}
}, $string);
$string = preg_replace_callback('/\\\\([0-9]{1,3})/i', function($m) use ($save_length) {
if ($save_length) {
return str_pad(@chr(octdec($m[1])), strlen($m[0]), ' ');
} else {
return @chr(octdec($m[1]));
}
}, $string);
$string = preg_replace_callback('/[\'"]\s*?\.+\s*?[\'"]/smi', function($m) use ($save_length) {
if ($save_length) {
return str_repeat(' ', strlen($m[0]));
} else {
return '';
}
}, $string);
$string = preg_replace_callback('/[\'"]\s*?\++\s*?[\'"]/smi', function($m) use ($save_length) {
if ($save_length) {
return str_repeat(' ', strlen($m[0]));
} else {
return '';
}
}, $string);
if (!$save_length) {
$string = str_replace('<?php', '<?php ', $string);
$string = preg_replace('~\s+~', ' ', $string);
}
return $string;
}
public static function format($source)
{
$t_count = 0;
$in_object = false;
$in_at = false;
$in_php = false;
$in_for = false;
$in_comp = false;
$in_quote = false;
$in_var = false;
if (!defined('T_ML_COMMENT')) {
define('T_ML_COMMENT', T_COMMENT);
}
$result = '';
@$tokens = token_get_all($source);
foreach ($tokens as $token) {
if (is_string($token)) {
$token = trim($token);
if ($token == '{') {
if ($in_for) {
$in_for = false;
}
if (!$in_quote && !$in_var) {
$t_count++;
$result = rtrim($result) . ' ' . $token . "\n" . str_repeat(' ', $t_count);
} else {
$result = rtrim($result) . $token;
}
} elseif ($token == '$') {
$in_var = true;
$result .= $token;
} elseif ($token == '}') {
if (!$in_quote && !$in_var) {
$new_line = true;
$t_count--;
if ($t_count < 0) {
$t_count = 0;
}
$result = rtrim($result) . "\n" . str_repeat(' ', $t_count) .
$token . "\n" . @str_repeat(' ', $t_count);
} else {
$result = rtrim($result) . $token;
}
if ($in_var) {
$in_var = false;
}
} elseif ($token == ';') {
if ($in_comp) {
$in_comp = false;
}
if ($in_for) {
$result .= $token . ' ';
} else {
$result .= $token . "\n" . str_repeat(' ', $t_count);
}
} elseif ($token == ':') {
if ($in_comp) {
$result .= ' ' . $token . ' ';
} else {
$result .= $token . "\n" . str_repeat(' ', $t_count);
}
} elseif ($token == '(') {
$result .= ' ' . $token;
} elseif ($token == ')') {
$result .= $token;
} elseif ($token == '@') {
$in_at = true;
$result .= $token;
} elseif ($token == '.') {
$result .= ' ' . $token . ' ';
} elseif ($token == '=') {
$result .= ' ' . $token . ' ';
} elseif ($token == '?') {
$in_comp = true;
$result .= ' ' . $token . ' ';
} elseif ($token == '"') {
if ($in_quote) {
$in_quote = false;
} else {
$in_quote = true;
}
$result .= $token;
} else {
$result .= $token;
}
} else {
list($id, $text) = $token;
switch ($id) {
case T_OPEN_TAG:
case T_OPEN_TAG_WITH_ECHO:
$in_php = true;
$result .= trim($text) . "\n";
break;
case T_CLOSE_TAG:
$in_php = false;
$result .= trim($text);
break;
case T_FOR:
$in_for = true;
$result .= trim($text);
break;
case T_OBJECT_OPERATOR:
$result .= trim($text);
$in_object = true;
break;
case T_ENCAPSED_AND_WHITESPACE:
case T_WHITESPACE:
$result .= trim($text);
break;
case T_RETURN:
$result = rtrim($result) . "\n" . str_repeat(' ', $t_count) . trim($text) . ' ';
break;
case T_ELSE:
case T_ELSEIF:
$result = rtrim($result) . ' ' . trim($text) . ' ';
break;
case T_CASE:
case T_DEFAULT:
$result = rtrim($result) . "\n" . str_repeat(' ', $t_count - 1) . trim($text) . ' ';
break;
case T_FUNCTION:
case T_CLASS:
$result .= "\n" . str_repeat(' ', $t_count) . trim($text) . ' ';
break;
case T_AND_EQUAL:
case T_AS:
case T_BOOLEAN_AND:
case T_BOOLEAN_OR:
case T_CONCAT_EQUAL:
case T_DIV_EQUAL:
case T_DOUBLE_ARROW:
case T_IS_EQUAL:
case T_IS_GREATER_OR_EQUAL:
case T_IS_IDENTICAL:
case T_IS_NOT_EQUAL:
case T_IS_NOT_IDENTICAL:
case T_LOGICAL_AND:
case T_LOGICAL_OR:
case T_LOGICAL_XOR:
case T_MINUS_EQUAL:
case T_MOD_EQUAL:
case T_MUL_EQUAL:
case T_OR_EQUAL:
case T_PLUS_EQUAL:
case T_SL:
case T_SL_EQUAL:
case T_SR:
case T_SR_EQUAL:
case T_START_HEREDOC:
case T_XOR_EQUAL:
$result = rtrim($result) . ' ' . trim($text) . ' ';
break;
case T_COMMENT:
$result = rtrim($result) . "\n" . str_repeat(' ', $t_count) . trim($text) . ' ';
break;
case T_ML_COMMENT:
$result = rtrim($result) . "\n";
$lines = explode("\n", $text);
foreach ($lines as $line) {
$result .= str_repeat(' ', $t_count) . trim($line);
}
$result .= "\n";
break;
case T_INLINE_HTML:
$result .= $text;
break;
default:
$result .= trim($text);
break;
}
}
}
return $result;
}
public static function replaceCreateFunction($str)
{
$hangs = 20;
while (strpos($str, 'create_function') !== false && $hangs--) {
$start_pos = strpos($str, 'create_function');
$end_pos = 0;
$brackets = 0;
$started = false;
$opened = 0;
$closed = 0;
for ($i = $start_pos, $iMax = strlen($str); $i < $iMax; $i++) {
if ($str[$i] == '(') {
$started = true;
$brackets++;
$opened++;
} else if ($str[$i] == ')') {
$closed++;
$brackets--;
}
if ($brackets == 0 && $started) {
$end_pos = $i + 1;
break;
}
}
$cr_func = substr($str, $start_pos, $end_pos - $start_pos);
$func = implode('function(', explode('create_function(\'', $cr_func, 2));
//$func = substr_replace('create_function(\'', 'function(', $cr_func);
//$func = str_replace('\',\'', ') {', $func);
$func = implode(') {', explode('\',\'', $func, 2));
$func = substr($func, 0, -2) . '}';
$str = str_replace($cr_func, $func, $str);
}
return $str;
}
public static function calc($expr)
{
if (is_array($expr)) {
$expr = $expr[0];
}
preg_match('~(chr|min|max|round)?\(([^\)]+)\)~msi', $expr, $expr_arr);
if (@$expr_arr[1] == 'min' || @$expr_arr[1] == 'max') {
return $expr_arr[1](explode(',', $expr_arr[2]));
} elseif (@$expr_arr[1] == 'chr') {
if ($expr_arr[2][0] === '(') {
$expr_arr[2] = substr($expr_arr[2], 1);
}
$expr_arr[2] = self::calc($expr_arr[2]);
return $expr_arr[1](intval($expr_arr[2]));
} elseif (@$expr_arr[1] == 'round') {
$expr_arr[2] = self::calc($expr_arr[2]);
return $expr_arr[1]($expr_arr[2]);
} else {
preg_match_all('~([\d\.a-fx]+)([\*\/\-\+\^\|\&])?~', $expr, $expr_arr);
foreach ($expr_arr[1] as &$expr_arg) {
if (strpos($expr_arg, "0x")!==false) {
$expr = str_replace($expr_arg, hexdec($expr_arg), $expr);
$expr_arg = hexdec($expr_arg);
}
}
if (in_array('*', $expr_arr[2]) !== false) {
$pos = array_search('*', $expr_arr[2]);
$res = $expr_arr[1][$pos] * $expr_arr[1][$pos + 1];
$pos_subst = strpos($expr, $expr_arr[1][$pos] . '*' . $expr_arr[1][$pos + 1]);
$expr = substr_replace($expr, $res, $pos_subst, strlen($expr_arr[1][$pos] . '*' . $expr_arr[1][$pos + 1]));
$expr = self::calc($expr);
} elseif (in_array('/', $expr_arr[2]) !== false) {
$pos = array_search('/', $expr_arr[2]);
$res = $expr_arr[1][$pos] / $expr_arr[1][$pos + 1];
$pos_subst = strpos($expr, $expr_arr[1][$pos] . '/' . $expr_arr[1][$pos + 1]);
$expr = substr_replace($expr, $res, $pos_subst, strlen($expr_arr[1][$pos] . '/' . $expr_arr[1][$pos + 1]));
$expr = self::calc($expr);
} elseif (in_array('-', $expr_arr[2]) !== false) {
$pos = array_search('-', $expr_arr[2]);
$res = $expr_arr[1][$pos] - $expr_arr[1][$pos + 1];
$pos_subst = strpos($expr, $expr_arr[1][$pos] . '-' . $expr_arr[1][$pos + 1]);
$expr = substr_replace($expr, $res, $pos_subst, strlen($expr_arr[1][$pos] . '-' . $expr_arr[1][$pos + 1]));
$expr = self::calc($expr);
} elseif (in_array('+', $expr_arr[2]) !== false) {
$pos = array_search('+', $expr_arr[2]);
$res = $expr_arr[1][$pos] + $expr_arr[1][$pos + 1];
$pos_subst = strpos($expr, $expr_arr[1][$pos] . '+' . $expr_arr[1][$pos + 1]);
$expr = substr_replace($expr, $res, $pos_subst, strlen($expr_arr[1][$pos] . '+' . $expr_arr[1][$pos + 1]));
$expr = self::calc($expr);
} elseif (in_array('^', $expr_arr[2]) !== false) {
$pos = array_search('^', $expr_arr[2]);
$res = $expr_arr[1][$pos] ^ $expr_arr[1][$pos + 1];
$pos_subst = strpos($expr, $expr_arr[1][$pos] . '^' . $expr_arr[1][$pos + 1]);
$expr = substr_replace($expr, $res, $pos_subst, strlen($expr_arr[1][$pos] . '^' . $expr_arr[1][$pos + 1]));
$expr = self::calc($expr);
} elseif (in_array('|', $expr_arr[2]) !== false) {
$pos = array_search('|', $expr_arr[2]);
$res = $expr_arr[1][$pos] | $expr_arr[1][$pos + 1];
$pos_subst = strpos($expr, $expr_arr[1][$pos] . '|' . $expr_arr[1][$pos + 1]);
$expr = substr_replace($expr, $res, $pos_subst, strlen($expr_arr[1][$pos] . '|' . $expr_arr[1][$pos + 1]));
$expr = self::calc($expr);
} elseif (in_array('&', $expr_arr[2]) !== false) {
$pos = array_search('&', $expr_arr[2]);
$res = $expr_arr[1][$pos] & $expr_arr[1][$pos + 1];
$pos_subst = strpos($expr, $expr_arr[1][$pos] . '&' . $expr_arr[1][$pos + 1]);
$expr = substr_replace($expr, $res, $pos_subst, strlen($expr_arr[1][$pos] . '&' . $expr_arr[1][$pos + 1]));
$expr = self::calc($expr);
} else {
return $expr;
}
return $expr;
}
}
public static function getEvalCode($string)
{
preg_match("/eval\(([^\)]+)\)/msi", $string, $matches);
return (empty($matches)) ? '' : end($matches);
}
public static function getTextInsideQuotes($string)
{
if (preg_match_all('/("(.*)")/msi', $string, $matches)) {
return @end(end($matches));
} elseif (preg_match_all('/\((\'(.*)\')/msi', $string, $matches)) {
return @end(end($matches));
} else {
return '';
}
}
public static function getNeedles($string)
{
preg_match_all("/'(.*?)'/msi", $string, $matches);
return (empty($matches)) ? array() : $matches[1];
}
public static function getHexValues($string)
{
preg_match_all('/0x[a-fA-F0-9]{1,8}/msi', $string, $matches);
return (empty($matches)) ? array() : $matches[0];
}
public static function formatPHP($string)
{
$string = str_replace('<?php', '', $string);
$string = str_replace('?>', '', $string);
$string = str_replace(PHP_EOL, "", $string);
$string = str_replace(";", ";\n", $string);
$string = str_replace("}", "}\n", $string);
return $string;
}
public static function detect_utf_encoding($text)
{
$first2 = substr($text, 0, 2);
$first3 = substr($text, 0, 3);
$first4 = substr($text, 0, 4);
if ($first4 == chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF)) {
return 'UTF-32BE';
} elseif ($first4 == chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00)) {
return 'UTF-32LE';
} elseif ($first2 == chr(0xFE) . chr(0xFF)) {
return 'UTF-16BE';
} elseif ($first2 == chr(0xFF) . chr(0xFE)) {
return 'UTF-16LE';
}
return false;
}
//from sample_16
public static function someDecoder($str)
{
$str = base64_decode($str);
$TC9A16C47DA8EEE87 = 0;
$TA7FB8B0A1C0E2E9E = 0;
$T17D35BB9DF7A47E4 = 0;
$T65CE9F6823D588A7 = (ord($str[1]) << 8) + ord($str[2]);
$i = 3;
$T77605D5F26DD5248 = 0;
$block = 16;
$T7C7E72B89B83E235 = "";
$T43D5686285035C13 = "";
$len = strlen($str);
$T6BBC58A3B5B11DC4 = 0;
for (; $i < $len;) {
if ($block == 0) {
$T65CE9F6823D588A7 = (ord($str[$i++]) << 8);
$T65CE9F6823D588A7 += ord($str[$i++]);
$block = 16;
}
if ($T65CE9F6823D588A7 & 0x8000) {
$TC9A16C47DA8EEE87 = (ord($str[$i++]) << 4);
$TC9A16C47DA8EEE87 += (ord($str[$i]) >> 4);
if ($TC9A16C47DA8EEE87) {
$TA7FB8B0A1C0E2E9E = (ord($str[$i++]) & 0x0F) + 3;
for ($T17D35BB9DF7A47E4 = 0; $T17D35BB9DF7A47E4 < $TA7FB8B0A1C0E2E9E; $T17D35BB9DF7A47E4++) {
$T7C7E72B89B83E235[$T77605D5F26DD5248 + $T17D35BB9DF7A47E4] =
$T7C7E72B89B83E235[$T77605D5F26DD5248 - $TC9A16C47DA8EEE87 + $T17D35BB9DF7A47E4];
}
$T77605D5F26DD5248 += $TA7FB8B0A1C0E2E9E;
} else {
$TA7FB8B0A1C0E2E9E = (ord($str[$i++]) << 8);
$TA7FB8B0A1C0E2E9E += ord($str[$i++]) + 16;
for ($T17D35BB9DF7A47E4 = 0; $T17D35BB9DF7A47E4 < $TA7FB8B0A1C0E2E9E;
$T7C7E72B89B83E235[$T77605D5F26DD5248 + $T17D35BB9DF7A47E4++] = $str[$i]) {
}
$i++;
$T77605D5F26DD5248 += $TA7FB8B0A1C0E2E9E;
}
} else {
$T7C7E72B89B83E235[$T77605D5F26DD5248++] = $str[$i++];
}
$T65CE9F6823D588A7 <<= 1;
$block--;
if ($i == $len) {
$T43D5686285035C13 = $T7C7E72B89B83E235;
if (is_array($T43D5686285035C13)) {
$T43D5686285035C13 = implode($T43D5686285035C13);
}
$T43D5686285035C13 = "?" . ">" . $T43D5686285035C13;
return $T43D5686285035C13;
}
}
}
//
public static function someDecoder2($WWAcmoxRAZq, $sBtUiFZaz) //sample_05
{
$JYekrRTYM = str_rot13(gzinflate(str_rot13(base64_decode('y8svKCwqLiktK6+orFdZV0FWWljPyMzKzsmNNzQyNjE1M7ewNAAA'))));
if ($WWAcmoxRAZq == 'asedferg456789034689gd') {
$cEerbvwKPI = $JYekrRTYM[18] . $JYekrRTYM[19] . $JYekrRTYM[17] . $JYekrRTYM[17] . $JYekrRTYM[4] . $JYekrRTYM[21];
return $cEerbvwKPI($sBtUiFZaz);
} elseif ($WWAcmoxRAZq == 'zfcxdrtgyu678954ftyuip') {
$JWTDeUKphI = $JYekrRTYM[1] . $JYekrRTYM[0] . $JYekrRTYM[18] . $JYekrRTYM[4] . $JYekrRTYM[32] .
$JYekrRTYM[30] . $JYekrRTYM[26] . $JYekrRTYM[3] . $JYekrRTYM[4] . $JYekrRTYM[2] . $JYekrRTYM[14] .
$JYekrRTYM[3] . $JYekrRTYM[4];
return $JWTDeUKphI($sBtUiFZaz);
} elseif ($WWAcmoxRAZq == 'gyurt456cdfewqzswexcd7890df') {
$rezmMBMev = $JYekrRTYM[6] . $JYekrRTYM[25] . $JYekrRTYM[8] . $JYekrRTYM[13] . $JYekrRTYM[5] . $JYekrRTYM[11] . $JYekrRTYM[0] . $JYekrRTYM[19] . $JYekrRTYM[4];
return $rezmMBMev($sBtUiFZaz);
} elseif ($WWAcmoxRAZq == 'zcdfer45dferrttuihvs4321890mj') {
$WbbQXOQbH = $JYekrRTYM[18] . $JYekrRTYM[19] . $JYekrRTYM[17] . $JYekrRTYM[26] . $JYekrRTYM[17] . $JYekrRTYM[14] . $JYekrRTYM[19] . $JYekrRTYM[27] . $JYekrRTYM[29];
return $WbbQXOQbH($sBtUiFZaz);
} elseif ($WWAcmoxRAZq == 'zsedrtre4565fbghgrtyrssdxv456') {
$jPnPLPZcMHgH = $JYekrRTYM[2] . $JYekrRTYM[14] . $JYekrRTYM[13] . $JYekrRTYM[21] . $JYekrRTYM[4] . $JYekrRTYM[17] . $JYekrRTYM[19] . $JYekrRTYM[26] . $JYekrRTYM[20] . $JYekrRTYM[20] . $JYekrRTYM[3] . $JYekrRTYM[4] . $JYekrRTYM[2] . $JYekrRTYM[14] . $JYekrRTYM[3] . $JYekrRTYM[4];
return $jPnPLPZcMHgH($sBtUiFZaz);
}
}
public static function someDecoder3($str)
{
$l = base64_decode($str);
$lllllll = 0;
$lllll = 3;
$llllll = (ord($l[1]) << 8) + ord($l[2]);
$lllllllll = 16;
$llllllll = [];
for ($lllllMax = strlen($l); $lllll < $lllllMax;) {
if ($lllllllll == 0) {
$llllll = (ord($l[$lllll++]) << 8);
$llllll+= ord($l[$lllll++]);
$lllllllll = 16;
}
if ($llllll & 0x8000) {
$lll = (ord($l[$lllll++]) << 4);
$lll+= (ord($l[$lllll]) >> 4);
if ($lll) {
$ll = (ord($l[$lllll++]) & 0x0f) + 3;
for ($llll = 0;$llll < $ll;$llll++) $llllllll[$lllllll + $llll] = $llllllll[$lllllll - $lll + $llll];
$lllllll+= $ll;
} else {
$ll = (ord($l[$lllll++]) << 8);
$ll+= ord($l[$lllll++]) + 16;
for ($llll = 0;$llll < $ll;$llllllll[$lllllll + $llll++] = ord($l[$lllll]));
$lllll++;
$lllllll+= $ll;
}
} else {
$llllllll[$lllllll++] = ord($l[$lllll++]);
}
$llllll <<= 1;
$lllllllll--;
}
$lllll = 0;
$lllllllll="?".chr(62);
$llllllllll = "";
for (;$lllll < $lllllll;) {
$llllllllll.= chr($llllllll[$lllll++] ^ 0x07);
}
$lllllllll.=$llllllllll.chr(60)."?";
return $lllllllll;
}
public static function PHPJiaMi_decoder($str, $md5, $rand, $lower_range = '')
{
$md5_xor = md5($md5);
$lower_range = !$lower_range ? ord($rand) : $lower_range;
$layer1 = '';
for ($i=0, $iMax = strlen($str); $i < $iMax; $i++) {
$layer1 .= ord($str[$i]) < 245 ? ((ord($str[$i]) > $lower_range && ord($str[$i]) < 245) ? chr(ord($str[$i]) / 2) : $str[$i]) : '';
}
$layer1 = base64_decode($layer1);
$result = '';
$j = $len_md5_xor = strlen($md5_xor);
for ($i=0, $iMax = strlen($layer1); $i < $iMax; $i++) {
$j = $j ? $j : $len_md5_xor;
$j--;
$result .= $layer1[$i] ^ $md5_xor[$j];
}
return $result;
}
public static function someDecoder4($ae, $key)
{
$at = array();
for ($i = 0, $iMax = strlen($key); $i < $iMax; $i++) {
if ((int)$key[$i] > 0) {
$at[$i] = $key[$i];
}
}
$at = array_values($at);
$str = "";
for ($i = 0, $iMax = count($ae); $i < $iMax; $i++) {
if ($i < count($ae) - 1) {
$str .= str_replace(md5($at[$i]), "", $ae[$i]);
} else {
$str .= $ae[$i];
}
}
return $str;
}
public static function OELoveDecoder($arg1, $arg2 = '')
{
if (empty($arg1)) {
return '';
}
$arg1 = base64_decode($arg1);
if ($arg2 == '') return ~$arg1;
//if ($arg2 == '-1') @271552362217();
$len = strlen($arg1);
$arg2 = str_pad($arg2, $len, $arg2);
return $arg2 ^ $arg1;
}
public static function stripsquoteslashes($str)
{
$res = '';
for ($i = 0, $iMax = strlen($str); $i < $iMax; $i++) {
if (isset($str[$i+1]) && ($str[$i] == '\\' && ($str[$i+1] == '\\' || $str[$i+1] == '\''))) {
continue;
} else {
$res .= $str[$i];
}
}
return $res;
}
public static function isSafeFunc($str)
{
$safeFuncs = [
'base64_decode', 'gzinflate', 'gzuncompress', 'strrev',
'str_rot13', 'urldecode', 'rawurldecode', 'stripslashes',
'htmlspecialchars_decode', 'convert_uudecode','pack'
];
return in_array(strtolower($str), $safeFuncs);
}
public static function aanKFMDigitsDecode($digits)
{
$res = '';
$len = ceil(strlen($digits) / 3) * 3;
$cipher = str_pad($digits, $len, '0', STR_PAD_LEFT);
for ($i = 0; $i < (strlen($cipher) / 3);$i++) {
$res .= chr(substr(strval($cipher), $i * 3, 3));
}
return $res;
}
public static function obf20200414_1_decrypt($data, $key)
{
$key = md5($key);
$x = 0;
$data = base64_decode($data);
$len = strlen($data);
$l = strlen($key);
$char = '';
for ($i = 0; $i < $len; $i++) {
if ($x == $l) {
$x = 0;
}
$char .= substr($key, $x, 1);
$x++;
}
$str = '';
for ($i = 0; $i < $len; $i++) {
if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
$str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
} else {
$str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
}
}
return $str;
}
public static function Xtea_decrypt($text, $key)
{
$_key = '';
$cbc = 1;
if(is_array($key)) {
$_key = $key;
} else if(isset($key) && !empty($key)) {
$_key = self::_str2long(str_pad($key, 16, $key));
} else {
$_key = array(0,0,0,0);
}
$plain = array();
$cipher = self::_str2long(base64_decode($text));
if($cbc == 1) {
$i = 2;
} else {
$i = 0;
}
for ($i, $iMax = count($cipher); $i < $iMax; $i += 2) {
$return = self::block_decrypt($cipher[$i], $cipher[$i+1], $_key);
if($cbc == 1) {
$plain[] = array($return[0] ^ $cipher[$i-2], $return[1] ^ $cipher[$i-1]);
} else {
$plain[] = $return;
}
}
$output = "";
for($i = 0, $iMax = count($plain); $i < $iMax; $i++) {
$output .= self::_long2str($plain[$i][0]);
$output .= self::_long2str($plain[$i][1]);
}
return $output;
}
private static function block_decrypt($y, $z, $key)
{
$delta = 0x9e3779b9;
$sum = 0xC6EF3720;
$n = 32;
for ($i = 0; $i < 32; $i++) {
$z = self::_add($z, -(self::_add($y << 4 ^ self::_rshift($y, 5), $y)
^ self::_add($sum, $key[self::_rshift($sum, 11) & 3])));
$sum = self::_add($sum, -$delta);
$y = self::_add($y, -(self::_add($z << 4 ^ self::_rshift($z, 5), $z)
^ self::_add($sum, $key[$sum & 3])));
}
return [$y, $z];
}
private static function _rshift($integer, $n)
{
if (0xffffffff < $integer || -0xffffffff > $integer) {
$integer = fmod($integer, 0xffffffff + 1);
}
if (0x7fffffff < $integer) {
$integer -= 0xffffffff + 1.0;
} else if (-0x80000000 > $integer) {
$integer += 0xffffffff + 1.0;
}
if (0 > $integer) {
$integer &= 0x7fffffff;
$integer >>= $n;
$integer |= 1 << (31 - $n);
} else {
$integer >>= $n;
}
return $integer;
}
private static function _add($i1, $i2)
{
$result = 0.0;
foreach (func_get_args() as $value) {
if (0.0 > $value) {
$value -= 1.0 + 0xffffffff;
}
$result += $value;
}
if (0xffffffff < $result || -0xffffffff > $result) {
$result = fmod($result, 0xffffffff + 1);
}
if (0x7fffffff < $result) {
$result -= 0xffffffff + 1.0;
} else if (-0x80000000 > $result) {
$result += 0xffffffff + 1.0;
}
return $result;
}
private static function _str2long($data)
{
$tmp = unpack('N*', $data);
$data_long = [];
$j = 0;
foreach ($tmp as $value) $data_long[$j++] = $value;
return $data_long;
}
private static function _long2str($l){
return pack('N', $l);
}
///////////////////////////////////////////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////////
function parseArgs($argv)
{
array_shift($argv);
$o = array();
foreach ($argv as $a) {
if (substr($a, 0, 2) == '--') {
$eq = strpos($a, '=');
if ($eq !== false) {
$o[substr($a, 2, $eq - 2)] = substr($a, $eq + 1);
} else {
$k = substr($a, 2);
if (!isset($o[$k])) {
$o[$k] = true;
}
}
} else {
if (substr($a, 0, 1) == '-') {
if (substr($a, 2, 1) == '=') {
$o[substr($a, 1, 1)] = substr($a, 3);
} else {
foreach (str_split(substr($a, 1)) as $k) {
if (!isset($o[$k])) {
$o[$k] = true;
}
}
}
} else {
$o[] = $a;
}
}
}
return $o;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
// cli handler
if (!defined('AIBOLIT_START_TIME') && !defined('PROCU_CLEAN_DB') && @strpos(__FILE__, @$argv[0])!==false) {
set_time_limit(0);
ini_set('max_execution_time', '900000');
ini_set('realpath_cache_size', '16M');
ini_set('realpath_cache_ttl', '1200');
ini_set('pcre.backtrack_limit', '1000000');
ini_set('pcre.recursion_limit', '12500');
ini_set('pcre.jit', '1');
$options = parseArgs($argv);
$str = php_strip_whitespace($options[0]);
$str2 = file_get_contents($options[0]);
$l_UnicodeContent = Helpers::detect_utf_encoding($str);
$l_UnicodeContent2 = Helpers::detect_utf_encoding($str2);
if ($l_UnicodeContent !== false) {
if (function_exists('iconv')) {
$str = iconv($l_UnicodeContent, "UTF-8", $str);
$str2 = iconv($l_UnicodeContent2, "UTF-8", $str2);
}
}
$d = new Deobfuscator($str, $str2);
$start = microtime(true);
$deobf_type = $d->getObfuscateType($str);
if ($deobf_type != '') {
$str = $d->deobfuscate();
}
$code = $str;
if (isset($options['prettyprint'])) {
$code = Helpers::normalize($code);
$code = Helpers::format($code);
}
if ($l_UnicodeContent !== false) {
if (function_exists('iconv')) {
$code = iconv('UTF-8', $l_UnicodeContent . '//IGNORE', $code);
}
}
echo $code;
echo "\n";
//echo 'Execution time: ' . round(microtime(true) - $start, 4) . ' sec.';
}
class Deobfuscator
{
private $signatures = array(
array(
'full' => '~for\((\$\w{1,40})=\d+,(\$\w+)=\'([^\$]+)\',(\$\w+)=\'\';@?ord\(\2\[\1\]\);\1\+\+\)\{if\(\1<\d+\)\{(\$\w+)\[\2\[\1\]\]=\1;\}else\{\$\w+\.\=@?chr\(\(\5\[\2\[\1\]\]<<\d+\)\+\(\5\[\2\[\+\+\1\]\]\)\);\}\}\s*.{0,500}eval\(\4\);(if\(isset\(\$_(GET|REQUEST|POST|COOKIE)\[[\'"][^\'"]+[\'"]\]\)\)\{[^}]+;\})?~msi',
'fast' => '~for\((\$\w{1,40})=\d+,(\$\w+)=\'([^\$]+)\',(\$\w+)=\'\';@?ord\(\2\[\1\]\);\1\+\+\)\{if\(\1<\d+\)\{(\$\w+)\[\2\[\1\]\]=\1;\}else\{\$\w+\.\=@?chr\(\(\5\[\2\[\1\]\]<<\d+\)\+\(\5\[\2\[\+\+\1\]\]\)\);\}\}\s*.{0,500}eval\(\4\);(if\(isset\(\$_(GET|REQUEST|POST|COOKIE)\[[\'"][^\'"]+[\'"]\]\)\)\{[^}]+;\})?~msi',
'id' => 'parenthesesString'),
array(
'full' =>'~(\$\w+)\s*=\s*basename\s*\(trim\s*\(preg_replace\s*\(rawurldecode\s*\([\'"][%0-9a-f\.]+["\']\),\s*\'\',\s*__FILE__\)\)\);\s*(\$\w+)\s*=\s*["\']([^\'"]+)["\'];\s*eval\s*\(rawurldecode\s*\(\2\)\s*\^\s*substr\s*\(str_repeat\s*\(\1,\s*\(strlen\s*\(\2\)/strlen\s*\(\1\)\)\s*\+\s*1\),\s*0,\s*strlen\s*\(\2\)\)\);~msi',
'fast' => '~(\$\w+)\s*=\s*basename\s*\(trim\s*\(preg_replace\s*\(rawurldecode\s*\([\'"][%0-9a-f\.]+["\']\),\s*\'\',\s*__FILE__\)\)\);\s*(\$\w+)\s*=\s*["\']([^\'"]+)["\'];\s*eval\s*\(rawurldecode\s*\(\2\)\s*\^\s*substr\s*\(str_repeat\s*\(\1,\s*\(strlen\s*\(\2\)/strlen\s*\(\1\)\)\s*\+\s*1\),\s*0,\s*strlen\s*\(\2\)\)\);~msi',
'id' => 'xorFName'),
array(
'full' =>
'~(\$\w{1,40})=base64_decode\(\'[^\']+\'\);(\$\w+)=base64_decode\(\'[^\']+\'\);(\$\w+)=base64_decode\(\'([^\']+)\'\);eval\(\1\(gzuncompress\(\2\(\3\)\)\)\);~msi',
'fast' => '~(\$\w{1,40})=base64_decode\(\'[^\']+\'\);(\$\w+)=base64_decode\(\'[^\']+\'\);(\$\w+)=base64_decode\(\'([^\']+)\'\);eval\(\1\(gzuncompress\(\2\(\3\)\)\)\);~msi',
'id' => 'phpMess'),
array(
'full' =>
'~(\$\w{1,40})\s*=\s*\"([^\"]+)\";\s*\$\w+\s*=\s*\$\w+\(\1,\"[^\"]+\",\"[^\"]+\"\);\s*\$\w+\(\"[^\"]+\",\"[^\"]+\",\"\.\"\);~msi',
'fast' => '~(\$\w{1,40})\s*=\s*\"([^\"]+)\";\s*\$\w+\s*=\s*\$\w+\(\1,\"[^\"]+\",\"[^\"]+\"\);\s*\$\w+\(\"[^\"]+\",\"[^\"]+\",\"\.\"\);~msi',
'id' => 'pregReplaceSample05'),
array(
'full' => '~(\$\w{1,40})\s*=\s*\w+\(\'.+?\'\);\s*(\$\w+)\s*=\s*\w+\(\'.+?\'\);\s*(\$\w+)\s*=\s*\"([^\"]+)\";\s*(\$\w+)\s*=\s*.+?;\s*\2\(\5,\"[^\']+\'\3\'[^\"]+\",\"\.\"\);~msi',
'fast' => '~(\$\w{1,40})\s*=\s*\w+\(\'.+?\'\);\s*(\$\w+)\s*=\s*\w+\(\'.+?\'\);\s*(\$\w+)\s*=\s*\"([^\"]+)\";\s*(\$\w+)\s*=\s*.+?;\s*\2\(\5,\"[^\']+\'\3\'[^\"]+\",\"\.\"\);~msi',
'id' => 'pregReplaceB64'),
array(
'full' => '~(\$\w{1,40})\s*=\s*\'([^\']+)\';\s*\1\s*=\s*gzinflate\s*\(base64_decode\s*\(\1\)\);\s*\1\s*=\s*str_replace\s*\(\"__FILE__\",\"\'\$\w+\'\",\1\);\s*eval\s*\(\1\);~msi',
'fast' => '~(\$\w{1,40})\s*=\s*\'([^\']+)\';\s*\1\s*=\s*gzinflate\s*\(base64_decode\s*\(\1\)\);\s*\1\s*=\s*str_replace\s*\(\"__FILE__\",\"\'\$\w+\'\",\1\);\s*eval\s*\(\1\);~msi',
'id' => 'GBE'),
array(
'full' => '~(\$GLOBALS\[\s*[\'"]_+\w{1,60}[\'"]\s*\])\s*=\s*\s*array\s*\(\s*base64_decode\s*\(.+?((.+?\1\[\d+\]).+?)+[^;]+;(\s*include\(\$_\d+\);)?}?((.+?___\d+\(\d+\))+[^;]+;)?(.*?(\$[a-z]+).+\8_\d+;)?(echo\s*\$\w+;})?~msi',
'fast' => '~\$GLOBALS\[\s*[\'"]_+\w{1,60}[\'"]\s*\]\s*=\s*\s*array\s*\(\s*base64_decode\s*\(~msi',
'id' => 'Bitrix'),
array(
'full' => '~\$\w{1,40}\s*=\s*(__FILE__|__LINE__);\s*\$\w{1,40}\s*=\s*(\d+);\s*eval(\s*\()+\$?\w+\s*\([\'"][^\'"]+[\'"](\s*\))+;\s*return\s*;\s*\?>(.+)~msi',
'fast' => '~\$\w{1,40}\s*=\s*(__FILE__|__LINE__);\s*\$\w{1,40}\s*=\s*(\d+);\s*eval(\s*\()+\$?\w+\s*\([\'"][^\'"]+[\'"](\s*\))+;\s*return\s*;\s*\?>(.+)~msi',
'id' => 'B64inHTML'),
array(
'full' => '~(?:\$[O0]*=__FILE__;)?\$[O0]*=urldecode\(\'[%a-f0-9]+\'\);(\$(GLOBALS\[\')?[O0]*(\'\])?=(\d+);)?\s*(\$(GLOBALS\[\')?[O0]*(\'\])?\.?=(\$(GLOBALS\[\')?[O0]*(\'\])?([\{\[]\d+[\}\]])?\.?)+;)+[^\?]+\?\>[\s\w\~\=\/\+\\\\\^\{\`\%]+~msi',
'fast' => '~(?:\$[O0]*=__FILE__;)?\$[O0]*=urldecode\(\'[%a-f0-9]+\'\);(?:\$(GLOBALS\[\')?[O0]*(?:\'\])?=\d+;)?\s*(?:\$(?:GLOBALS\[\')?[O0]*(?:\'\])?\.?=(?:\$(?:GLOBALS\[\')?[O0]*(?:\'\])?(?:[\{\[]\d+[\}\]])?\.?)+;)+[^\?]+\?\>[\s\w\~\=\/\+\\\\\^\{\`\%]+~msi',
'id' => 'LockIt'),
array(
'full' => '~(\$\w{1,40})\s*=\s*\"(\\\\142|\\\\x62)[0-9a-fx\\\\]+";\s*@?eval\s*\(\1\s*\([^\)]+\)+\s*;~msi',
'fast' => '~(\$\w{1,40})\s*=\s*\"(\\\\142|\\\\x62)[0-9a-fx\\\\]+";\s*@?eval\s*\(\1\s*\(~msi',
'id' => 'FOPO'),
array(
'full' => '~\$_F=__FILE__;\$_X=\'([^\']+\');eval\([^\)]+\)+;~msi',
'fast' => '~\$_F=__FILE__;\$_X=\'([^\']+\');eval\(~ms',
'id' => 'ByteRun'),
array(
'full' => '~(\$\w{1,40}=\'[^\']+\';\s*)+(\$[\w{1,40}]+)=(urldecode|base64_decode){0,1}\(?[\'"]([\w+%=-]+)[\'"]\)?;(\$[\w+]+=(\$(\w+\[\')?[O_0]*(\'\])?([\{\[]\d+[\}\]])?\.?)+;)+[^\?]+(\?\>[\w\~\=\/\+]+|.+\\\\x[^;]+;)~msi',
'fast' => '~(\$\w{1,40}=\'[^\']+\';\s*)+(\$[\w{1,40}]+)=(urldecode|base64_decode){0,1}\(?[\'"]([\w+%=-]+)[\'"]\)?;(\$[\w+]+=(\$(\w+\[\')?[O_0]*(\'\])?([\{\[]\d+[\}\]])?\.?)+;)+[^\?]+(\?\>[\w\~\=\/\+]+|.+\\\\x[^;]+;)~msi',
'id' => 'Urldecode'),
array(
'full' => '~(\$[\w{1,40}]+)=(urldecode|base64_decode)\(?[\'"]([\w+%=-]+)[\'"]\);(\s*\$\w+\.?=(\$\w+\{\d+\}\s*[\.;]?\s*)+)+((\$\w+=["\']([^\'"]+)[\'"];\s*eval\(\'\?>\'\.[\$\w\(\)\*\d,\s]+);|(eval\(\$\w+\([\'"]([^\'"]+)[\'"]\)+;))~msi',
'fast' => '~(\$[\w{1,40}]+)=(urldecode|base64_decode)\(?[\'"]([\w+%=-]+)[\'"]\);(\s*\$\w+\.?=(\$\w+\{\d+\}\s*[\.;]?\s*)+)+((\$\w+=["\']([^\'"]+)[\'"];\s*eval\(\'\?>\'\.[\$\w\(\)\*\d,\s]+);|(eval\(\$\w+\([\'"]([^\'"]+)[\'"]\)+;))~msi',
'id' => 'UrlDecode2',
),
array(
'full' => '~explode\(\"\*\*\*\",\s*\$\w+\);\s*eval\(eval\(\"return strrev\(base64_decode\([^\)]+\)+;~msi',
'fast' => '~explode\(\"\*\*\*\",\s*\$\w+\);\s*eval\(eval\(\"return strrev\(base64_decode\(~msi',
'id' => 'cobra'),
array(
'full' => '~\$[O0]+=\(base64_decode\(strtr\(fread\(\$[O0]+,(\d+)\),\'([^\']+)\',\'([^\']+)\'\)\)\);eval\([^\)]+\)+;~msi',
'fast' => '~\$[O0]+=\(base64_decode\(strtr\(fread\(\$[O0]+,(\d+)\),\'([^\']+)\',\'([^\']+)\'\)\)\);eval\(~msi',
'id' => 'strtrFread'),
array(
'full' => '~if\s*\(\!extension_loaded\(\'IonCube_loader\'\)\).+pack\(\"H\*\",\s*\$__ln\(\"/\[A-Z,\\\\r,\\\\n\]/\",\s*\"\",\s*substr\(\$__lp,\s*([0-9a-fx]+\-[0-9a-fx]+)\)\)\)[^\?]+\?\>\s*[0-9a-z\r\n]+~msi',
'fast' => '~IonCube_loader~ms',
'id' => 'FakeIonCube'),
array(
'full' => '~(\$\w{1,40})="([\w\]\[\<\&\*\_+=/]{300,})";\$\w+=\$\w+\(\1,"([\w\]\[\<\&\*\_+=/]+)","([\w\]\[\<\&\*\_+=/]+)"\);~msi',
'fast' => '~(\$\w{1,40})="([\w\]\[\<\&\*\_+=/]{300,})";\$\w+=\$\w+\(\1,"([\w\]\[\<\&\*\_+=/]+)","([\w\]\[\<\&\*\_+=/]+)"\);~msi',
'id' => 'strtrBase64'),
array(
'full' => '~\$\w+\s*=\s*array\((\'[^\']+\',?)+\);\s*.+?(\$_\w{1,40}\[\w+\])\s*=\s*explode\(\'([^\']+)\',\s*\'([^\']+)\'\);.+?(\2\[[a-fx\d]+\])\(\);(.+?\2)+.+}~msi',
'fast' => '~(\$_\w{1,40}\[\w+\])\s*=\s*explode\(\'([^\']+)\',\s*\'([^\']+)\'\);.+?(\1\[[a-fx\d]+\])\(\);~msi',
'id' => 'explodeSubst'),
array(
'full' => '~(\$[\w{1,40}]+)\s*=\s*\'([\w+%=\-\#\\\\\'\*]+)\';(\$[\w+]+)\s*=\s*Array\(\);(\3\[\]\s*=\s*(\1\[\d+\]\.?)+;+)+(.+\3)[^}]+}~msi',
'fast' => '~(\$[\w{1,40}]+)\s*=\s*\'([\w+%=\-\#\\\\\'\*]+)\';(\$[\w+]+)\s*=\s*Array\(\);(\3\[\]\s*=\s*(\1\[\d+\]\.?)+;+)+~msi',
'id' => 'subst'),
array(
'full' => '~if\(!function_exists\(\"(\w+)\"\)\){function \1\(.+?eval\(\1\(\"[^\"]+\"\)\);~msi',
'fast' => '~if\(!function_exists\(\"(\w+)\"\)\){function \1\(.+?eval\(\1\(\"[^\"]+\"\)\);~msi',
'id' => 'decoder'),
array(
'full' => '~(\$\w{1,40})\s*=\s*\"riny\(\"\.(\$\w+)\(\"base64_decode\"\);\s*(\$\w+)\s*=\s*\2\(\1\.\'\("([^"]+)"\)\);\'\);\s*\$\w+\(\3\);~msi',
'fast' => '~(\$\w{1,40})\s*=\s*\"riny\(\"\.(\$\w+)\(\"base64_decode\"\);\s*(\$\w+)\s*=\s*\2\(\1\.\'\("([^"]+)"\)\);\'\);\s*\$\w+\(\3\);~msi',
'id' => 'GBZ'),
array(
'full' => '~\$\w+\s*=\s*\d+;\s*\$GLOBALS\[\'[^\']+\'\]\s*=\s*Array\(\);\s*global\s*\$\w+;(\$\w{1,40})\s*=\s*\$GLOBALS;\$\{"\\\\x[a-z0-9\\\\]+"\}\[(\'\w+\')\]\s*=\s*\"(([^\"\\\\]|\\\\.)*)\";\1\[(\1\[\2\]\[\d+\].?).+?exit\(\);\}+~msi',
'fast' => '~(\$\w{1,40})\s*=\s*\$GLOBALS;\$\{"\\\\x[a-z0-9\\\\]+"\}\[(\'\w+\')\]\s*=\s*\"(([^\"\\\\]|\\\\.)*)\";\1\[(\1\[\2\]\[\d+\].?)~msi',
'id' => 'globalsArray'),
array(
'full' => '~(\${(["\w\\\\]+)}\[["\w\\\\]+\]=["\w\\\\]+;)+((\${\${(["\w\\\\]+)}\[["\w\\\\]+\]}).?=((urldecode\(["%\w]+\);)|(\${\${["\w\\\\]+}\[["\w\\\\]+\]}{\d+}.?)+;))+eval\(\${\${["\w\\\\]+}\[["\w\\\\]+\]}\(["\w+=]+\)\);~msi',
'fast' => '~(\${(["\w\\\\]+)}\[["\w\\\\]+\]=["\w\\\\]+;)+((\${\${(["\w\\\\]+)}\[["\w\\\\]+\]}).?=((urldecode\(["%\w]+\);)|(\${\${["\w\\\\]+}\[["\w\\\\]+\]}{\d+}.?)+;))+eval\(\${\${["\w\\\\]+}\[["\w\\\\]+\]}\(["\w+=]+\)\);~msi',
'id' => 'xbrangwolf'),
array(
'full' => '~(\$\w{1,40})\s*=\s*\'(\\\\.|[^\']){0,100}\';\s*\$\w+\s*=\s*\'(\\\\.|[^\']){0,100}\'\^\1;[^)]+\)+;\s*\$\w+\(\);~msi',
'fast' => '~(\$\w{1,40})\s*=\s*\'(\\\\.|[^\']){0,100}\';\s*\$\w+\s*=\s*\'(\\\\.|[^\']){0,100}\'\^\1;~msi',
'id' => 'xoredVar'),
array(
'full' => '~(\$\w{1,40})\s*=\s*\'([^\']*)\';\s*(\$\w{1,40})\s*=\s*explode\s*\((chr\s*\(\s*\(\d+\-\d+\)\)),substr\s*\(\1,\s*\((\d+\-\d+)\),\s*\(\s*(\d+\-\d+)\)\)\);\s*(\$\w{1,40})\s*=\s*\3\[\d+\]\s*\(\3\[\s*\(\d+\-\d+\)\]\);\s*(\$\w{1,40})\s*=\s*\3\[\d+\]\s*\(\3\[\s*\(\d+\-\d+\)\]\);\s*if\s*\(!function_exists\s*\(\'([^\']*)\'\)\)\s*\{\s*function\s*\9\s*\(.+\1\s*=\s*\$\w+[+\-\*]\d+;~msi',
'fast' => '~(\$\w{1,40})\s=\s\'([^\']*)\';\s(\$\w{1,40})=explode\((chr\(\(\d+\-\d+\)\)),substr\(\1,\((\d+\-\d+)\),\((\d+\-\d+)\)\)\);\s(\$\w{1,40})\s=\s\3\[\d+\]\(\3\[\(\d+\-\d+\)\]\);\s(\$\w{1,40})\s=\s\3\[\d+\]\(\3\[\(\d+\-\d+\)\]\);\sif\s\(!function_exists\(\'([^\']*)\'\)\)\s\{\sfunction\s*\9\(~msi',
'id' => 'arrayOffsets'),
array(
'full' => '~(\$\w{1,50}\s*=\s*array\((\'\d+\',?)+\);)+\$\w{1,40}=\"([^\"]+)\";if\s*\(!function_exists\(\"\w{1,50}\"\)\)\s*\{\s*function\s*[^\}]+\}\s*return\s*\$\w+;\}[^}]+}~msi',
'fast' => '~(\$\w{1,50}=\s*array\((\'\d+\',?)+\);)+\$\w{1,40}=\"[^\"]+\";if\s*\(!function_exists\(\"\w{1,50}\"\)\)\{\s*function ~msi',
'id' => 'obfB64'),
array(
'full' => '~if\(\!function_exists\(\'findsysfolder\'\)\){function findsysfolder\(\$fld\).+\$REXISTHEDOG4FBI=\'([^\']+)\';\$\w+=\'[^\']+\';\s*eval\(\w+\(\'([^\']+)\',\$REXISTHEDOG4FBI\)\);~msi',
'fast' => '~if\(!function_exists\(\'findsysfolder\'\)\){function findsysfolder\(\$fld\)\{\$fld1=dirname\(\$fld\);\$fld=\$fld1\.\'/scopbin\';clearstatcache\(\);if\(!is_dir\(\$fld\)\)return findsysfolder\(\$fld1\);else return \$fld;\}\}require_once\(findsysfolder\(__FILE__\)\.\'/911006\.php\'\);~msi',
'id' => 'sourceCop'),
array(
'full' => '~function\s*(\w{1,40})\s*\(\s*(\$\w{1,40})\s*,\s*(\$\w{1,40})\s*\)\s*\{\s*(\$\w{1,40})\s*=\s*str_rot13\s*\(\s*gzinflate\s*\(\s*str_rot13\s*\(\s*base64_decode\s*\(\s*[\'"][^\'"]*[\'"]\s*\)\s*\)\s*\)\s*\)\s*;\s*(if\s*\(\s*\$\w+\s*==[\'"][^\'"]*[\'"]\s*\)\s*\{\s*(\$\w{1,40})\s*=(\$\w+[\{\[]\d+[\}\]]\.?)+;return\s*(\$\w+)\(\3\);\s*\}\s*else\s*)+\s*if\s*\(\s*\$\w+\s*==[\'"][^\'"]*[\'"]\s*\)\s*\{\s*return\s*eval\(\3\);\s*\}\s*\};\s*(\$\w{1,40})\s*=\s*[\'"][^\'"]*[\'"];(\s*\9\([\'"][^\'"]*[\'"],)+\s*[\'"][^\'"]*[\'"]\s*\)+;~msi',
'fast' => '~function\s*(\w{1,40})\s*\(\s*(\$\w{1,40})\s*,\s*(\$\w{1,40})\s*\)\s*\{\s*(\$\w{1,40})\s*=\s*str_rot13\s*\(\s*gzinflate\s*\(\s*str_rot13\s*\(\s*base64_decode\s*\(\s*[\'"][^\'"]*[\'"]\s*\)\s*\)\s*\)\s*\)\s*;\s*(if\s*\(\s*\$\w+\s*==[\'"][^\'"]*[\'"]\s*\)\s*\{\s*(\$\w{1,40})\s*=(\$\w+[\{\[]\d+[\}\]]\.?)+;return\s*(\$\w+)\(\3\);\s*\}\s*else\s*)+\s*if\s*\(\s*\$\w+\s*==[\'"][^\'"]*[\'"]\s*\)\s*\{\s*return\s*eval\(\3\);\s*\}\s*\};\s*(\$\w{1,40})\s*=\s*[\'"][^\'"]*[\'"];(\s*\9\([\'"][^\'"]*[\'"],)+\s*[\'"][^\'"]*[\'"]\s*\)+;~msi',
'id' => 'webshellObf',
),
array(
'full' => '~(\$\w{1,40})=\'([^\'\\\\]|.*?)\';\s*((\$\w{1,40})=(\1\[\d+].?)+;\s*)+(\$\w{1,40})=\'\';\s*(\$\w{1,40})\(\6,\$\w{1,40}\.\"([^\"]+)\"\.\$\w{1,40}\.\4\);~msi',
'fast' => '~(\$\w{1,40})=\'([^\\\\\']|.*?)\';\s*((\$\w{1,40})=(\1\[\d+].?)+;\s*)+(\$\w{1,40})=\'\';~msi',
'id' => 'substCreateFunc'
),
array(
'full' => '~(\$\w+)=[create_function".]+;\s*\1=\1\(\'(\$\w+)\',[\'.eval\("\?>".gzinflate\(base64_decode]+\2\)+;\'\);\s*\1\(\'([^\']+)\'\);~msi',
'fast' => '~(\$\w+)=[create_function".]+;\s*\1=\1\(\'(\$\w+)\',[\'.eval\("\?>".gzinflate\(base64_decode]+\2\)+;\'\);\s*\1\(\'([^\']+)\'\);~msi',
'id' => 'createFunc'
),
array(
'full' => '~(?(DEFINE)(?\'foreach\'(?:/\*\w+\*/)?\s*foreach\(\[[\d,]+\]\s*as\s*\$\w+\)\s*\{\s*\$\w+\s*\.=\s*\$\w+\[\$\w+\];\s*\}\s*(?:/\*\w+\*/)?\s*))(\$\w+)\s*=\s*"([^"]+)";\s*\$\w+\s*=\s*"";(?P>foreach)if\(isset\(\$_REQUEST\s*(?:/\*\w+\*/)?\["\$\w+"\]\)+\{\s*\$\w+\s*=\s*\$_REQUEST\s*(?:/\*\w+\*/)?\["\$\w+"\];(?:\s*\$\w+\s*=\s*"";\s*)+(?P>foreach)+\$\w+\s*=\s*\$\w+\([create_function\'\.]+\);\s*\$\w+\s*=\s*\$\w+\("",\s*\$\w+\(\$\w+\)\);\s*\$\w+\(\);\s*(?:exit\(\);)?\s*}~mis',
'fast' => '~(?(DEFINE)(?\'foreach\'(?:/\*\w+\*/)?\s*foreach\(\[[\d,]+\]\s*as\s*\$\w+\)\s*\{\s*\$\w+\s*\.=\s*\$\w+\[\$\w+\];\s*\}\s*(?:/\*\w+\*/)?\s*))(\$\w+)\s*=\s*"([^"]+)";\s*\$\w+\s*=\s*"";(?P>foreach)if\(isset\(\$_REQUEST\s*(?:/\*\w+\*/)?\["\$\w+"\]\)+\{\s*\$\w+\s*=\s*\$_REQUEST\s*(?:/\*\w+\*/)?\["\$\w+"\];(?:\s*\$\w+\s*=\s*"";\s*)+(?P>foreach)+\$\w+\s*=\s*\$\w+\([create_function\'\.]+\);\s*\$\w+\s*=\s*\$\w+\("",\s*\$\w+\(\$\w+\)\);\s*\$\w+\(\);~mis',
'id' => 'forEach'
),
array(
'full' => '~\$\w+\s*=\s*base64_decode\s*\([\'"][^\'"]+[\'"]\);\s*if\s*\(!function_exists\s*\("rotencode"\)\).{0,1000}eval\s*\(\$\w+\s*\(base64_decode\s*\([\'"][^"\']+[\'"]\)+;~msi',
'fast' => '~\$\w+\s*=\s*base64_decode\s*\([\'"][^\'"]+[\'"]\);\s*if\s*\(!function_exists\s*\("rotencode"\)\).{0,1000}eval\s*\(\$\w+\s*\(base64_decode\s*\([\'"][^"\']+[\'"]\)+;~msi',
'id' => 'PHPMyLicense',
),
array(
'full' => '~(\$\w{1,40})=file\(__FILE__\);if\(!function_exists\(\"([^\"]*)\"\)\)\{function\s*\2\((\$\w{1,40}),(\$\w{1,40})=\d+\)\{(\$\w{1,40})=implode\(\"[^\"]*\",\3\);(\$\w{1,40})=array\((\d+),(\d+),(\d+)\);if\(\4==0\)\s*(\$\w{1,40})=substr\(\5,\6\[\d+\],\6\[\d+\]\);elseif\(\4==1\)\s*\10=substr\(\5,\6\[\d+\]\+\6\[\d+\],\6\[\d+\]\);else\s*\10=trim\(substr\(\5,\6\[\d+\]\+\6\[\d+\]\+\6\[\d+\]\)\);return\s*\(\10\);\}\}eval\(\w{1,40}\(\2\(\1,2\),\2\(\1,1\)\)\);__halt_compiler\(\);[\w\+\=/]+~msi',
'fast' => '~(\$\w{1,40})=file\(__FILE__\);if\(!function_exists\(\"([^\"]*)\"\)\)\{function\s*\2\((\$\w{1,40}),(\$\w{1,40})=\d+\)\{(\$\w{1,40})=implode\(\"[^\"]*\",\3\);(\$\w{1,40})=array\((\d+),(\d+),(\d+)\);if\(\4==0\)\s*(\$\w{1,40})=substr\(\5,\6\[\d+\],\6\[\d+\]\);elseif\(\4==1\)\s*\10=substr\(\5,\6\[\d+\]\+\6\[\d+\],\6\[\d+\]\);else\s*\10=trim\(substr\(\5,\6\[\d+\]\+\6\[\d+\]\+\6\[\d+\]\)\);return\s*\(\10\);\}\}eval\(\w{1,40}\(\2\(\1,2\),\2\(\1,1\)\)\);__halt_compiler\(\);~msi',
'id' => 'zeura'),
array(
'full' => '~((\$\w+)\s*\.=\s*"[^"]+";\s*)+eval\((\$\w+\s*\.?\s*)+\)~msi',
'fast' => '~((\$\w+)\s*\.=\s*"[^"]+";\s*)+eval\((\$\w+\s*\.?\s*)+\)~msi',
'id' => 'evalVarConcat'),
array(
'full' => '~((\$\w+)\s*=\s*[\'"]([^\'"]+)[\'"];\s*)+\s*.{0,10}?@?eval\s*\(\s*([\'"?>.\s]+)?\(?(base64_decode\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|htmlspecialchars_decode\s*\()+(\({0,1}[\s"\']?(\$\w+)[\s"\']?\){0,1})\)+;~msi',
'fast' => '~((\$\w+)\s*=\s*[\'"]([^\'"]+)[\'"];\s*)+\s*.{0,10}?@?eval\s*\(\s*([\'"?>.\s]+)?\(?(base64_decode\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|htmlspecialchars_decode\s*\()+(\({0,1}[\s"\']?(\$\w+)[\s"\']?\){0,1})\)+;~msi',
'id' => 'evalVar'),
array(
'full' => '~function\s*(\w{1,40})\((\$\w{1,40})\)\{(\$\w{1,40})=\'base64_decode\';(\$\w{1,40})=\'gzinflate\';return\s*\4\(\3\(\2\)\);\}\$\w{1,40}=\'[^\']*\';\$\w{1,40}=\'[^\']*\';eval\(\1\(\'([^\']*)\'\)\);~msi',
'fast' => '~function\s*(\w{1,40})\((\$\w{1,40})\)\{(\$\w{1,40})=\'base64_decode\';(\$\w{1,40})=\'gzinflate\';return\s*\4\(\3\(\2\)\);\}\$\w{1,40}=\'[^\']*\';\$\w{1,40}=\'[^\']*\';eval\(\1\(\'([^\']*)\'\)\);~msi',
'id' => 'evalFunc'),
array(
'full' => '~function\s*(\w{1,40})\s*\((\$\w{1,40})\)\s*\{\s*(\$\w{1,40})\s*=\s*"\\\\x62\\\\x61\\\\x73\\\\x65\\\\x36\\\\x34\\\\x5f\\\\x64\\\\x65\\\\x63\\\\x6f\\\\x64\\\\x65";\s*(\$\w{1,40})\s*=\s*"\\\\x67\\\\x7a\\\\x69\\\\x6e\\\\x66\\\\x6c\\\\x61\\\\x74\\\\x65";\s*return\s*\4\s*\(\3\s*\(\2\)\);\s*\}\s*\$\w{1,40}\s*=\s*\"[^\"]*\";\s*\$\w{1,40}\s*=\s*\"[^\"]*\";\s*eval\s*\(\1\s*\(\"([^\"]*)\"\)\);~msi',
'fast' => '~function\s*(\w{1,40})\s*\((\$\w{1,40})\)\s*\{\s*(\$\w{1,40})\s*=\s*"\\\\x62\\\\x61\\\\x73\\\\x65\\\\x36\\\\x34\\\\x5f\\\\x64\\\\x65\\\\x63\\\\x6f\\\\x64\\\\x65";\s*(\$\w{1,40})\s*=\s*"\\\\x67\\\\x7a\\\\x69\\\\x6e\\\\x66\\\\x6c\\\\x61\\\\x74\\\\x65";\s*return\s*\4\s*\(\3\s*\(\2\)\);\s*\}\s*\$\w{1,40}\s*=\s*\"[^\"]*\";\s*\$\w{1,40}\s*=\s*\"[^\"]*\";\s*eval\s*\(\1\s*\(\"([^\"]*)\"\)\);~msi',
'id' => 'evalFunc'),
array(
'full' => '~(preg_replace\(["\']/\.\*?/[^"\']+["\']\s*,\s*)[^\),]+(?:[\)\\\\0-5]+;[\'"])?(,\s*["\'][^"\']*["\'])\)+;~msi',
'fast' => '~(preg_replace\(["\']/\.\*?/[^"\']+["\']\s*,\s*)[^\),]+(?:[\)\\\\0-5]+;[\'"])?(,\s*["\'][^"\']*["\'])\)+;~msi',
'id' => 'eval'),
array(
'full' => '~(\$\w{1,40})\s*=\s*[\'"]([^\'"]*)[\'"]\s*;\s*(\$\w{1,40}\s*=\s*(strtolower|strtoupper)\s*\((\s*\1[\[\{]\s*\d+\s*[\]\}]\s*\.?\s*)+\);\s*)+\s*if\s*\(\s*isset\s*\(\s*\$\{\s*\$\w{1,40}\s*\}\s*\[\s*[\'"][^\'"]*[\'"]\s*\]\s*\)\s*\)\s*\{\s*eval\s*\(\s*\$\w{1,40}\s*\(\s*\$\s*\{\s*\$\w{1,40}\s*\}\s*\[\s*[\'"][^\'"]*[\'"]\s*\]\s*\)\s*\)\s*;\s*\}\s*~msi',
'fast' => '~(\$\w{1,40})\s*=\s*[\'"]([^\'"]*)[\'"]\s*;\s*(\$\w{1,40}\s*=\s*(strtolower|strtoupper)\s*\((\s*\1[\[\{]\s*\d+\s*[\]\}]\s*\.?\s*)+\);\s*)+\s*if\s*\(\s*isset\s*\(\s*\$\{\s*\$\w{1,40}\s*\}\s*\[\s*[\'"][^\'"]*[\'"]\s*\]\s*\)\s*\)\s*\{\s*eval\s*\(\s*\$\w{1,40}\s*\(\s*\$\s*\{\s*\$\w{1,40}\s*\}\s*\[\s*[\'"][^\'"]*[\'"]\s*\]\s*\)\s*\)\s*;\s*\}\s*~msi',
'id' => 'evalInject'
),
array(
'full' => '~((\$\w+)\s*=\s*(([base64_decode\'\.\s]+)|([eval\'\.\s]+)|([create_function\'\.\s]+)|([stripslashes\'\.\s]+)|([gzinflate\'\.\s]+)|([strrev\'\.\s]+)|([str_rot13\'\.\s]+)|([gzuncompress\'\.\s]+)|([urldecode\'\.\s]+)([rawurldecode\'\.\s]+));\s*)+\$\w+\s*=\s*\$\w+\(\'\',(\s*\$\w+\s*\(\s*)+\'[^\']+\'\)+;\s*\$\w+\(\);~msi',
'fast' => '~((\$\w+)\s*=\s*(([base64_decode\'\.\s]+)|([eval\'\.\s]+)|([create_function\'\.\s]+)|([stripslashes\'\.\s]+)|([gzinflate\'\.\s]+)|([strrev\'\.\s]+)|([str_rot13\'\.\s]+)|([gzuncompress\'\.\s]+)|([urldecode\'\.\s]+)([rawurldecode\'\.\s]+));\s*)+\$\w+\s*=\s*\$\w+\(\'\',(\s*\$\w+\s*\(\s*)+\'[^\']+\'\)+;\s*\$\w+\(\);~msi',
'id' => 'createFuncConcat'
),
array(
'full' => '~(\$\w+)\s*=\s*base64_decode\("([^"]+)"\);(\1\s*=\s*ereg_replace\("([^"]+)","([^"]+)",\1\);)+\1=base64_decode\(\1\);eval\(\1\);~msi',
'fast' => '~(\$\w+)\s*=\s*base64_decode\("([^"]+)"\);(\1\s*=\s*ereg_replace\("([^"]+)","([^"]+)",\1\);)+\1=base64_decode\(\1\);eval\(\1\);~msi',
'id' => 'evalEregReplace'
),
array(
'full' => '~((\$\w+)\s*=\s*(([base64_decode"\'\.\s]+)|([eval"\'\.\s]+)|([create_function"\'\.\s]+)|([stripslashes"\'\.\s]+)|([gzinflate"\'\.\s]+)|([strrev"\'\.\s]+)|([str_rot13"\'\.\s]+)|([gzuncompress"\'\.\s]+)|([urldecode"\'\.\s]+)([rawurldecode"\'\.\s]+));\s*)+\s*@?eval\(\$[^)]+\)+;~msi',
'fast' => '~((\$\w+)\s*=\s*(([base64_decode"\'\.\s]+)|([eval"\'\.\s]+)|([create_function"\'\.\s]+)|([stripslashes"\'\.\s]+)|([gzinflate"\'\.\s]+)|([strrev"\'\.\s]+)|([str_rot13"\'\.\s]+)|([gzuncompress"\'\.\s]+)|([urldecode"\'\.\s]+)([rawurldecode"\'\.\s]+));\s*)+\s*@?eval\(\$[^)]+\)+;~msi',
'id' => 'evalWrapVar'
),
array(
'full' => '~\$\{"(.{1,20}?(\\\\x[0-9a-f]{2})+)+.?";@?eval\s*\(\s*([\'"?>.]+)?@?\s*(base64_decode\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|eval\s*\()+\(?\$\{\$\{"[^\)]+\)+;~msi',
'fast' => '~\$\{"(.{1,20}?(\\\\x[0-9a-f]{2})+)+.?";@?eval\s*\(\s*([\'"?>.]+)?@?\s*(base64_decode\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|eval\s*\()+\(?\$\{\$\{"[^\)]+\)+;~msi',
'id' => 'escapes'
),
array(
'full' => '~(\$\w+)\s*=(?:\s*(?:(?:["\'][a-z0-9][\'"])|(?:chr\s*\(\d+\))|(?:[\'"]\\\\x[0-9a-f]+[\'"]))\s*?\.?)+;\s*(\$\w+)\s*=(?:\s*(?:(?:["\'][a-z0-9][\'"])|(?:chr\s*\(\d+\))|(?:[\'"]\\\\x[0-9a-f]+[\'"]))\s*?\.?)+;\s*@?\1\s*\(@?\2\s*\([\'"]([^\'"]+)[\'"]\)+;~msi',
'fast' => '~(\$\w+)\s*=(?:\s*(?:(?:["\'][a-z0-9][\'"])|(?:chr\s*\(\d+\))|(?:[\'"]\\\\x[0-9a-f]+[\'"]))\s*?\.?)+;\s*(\$\w+)\s*=(?:\s*(?:(?:["\'][a-z0-9][\'"])|(?:chr\s*\(\d+\))|(?:[\'"]\\\\x[0-9a-f]+[\'"]))\s*?\.?)+;\s*@?\1\s*\(@?\2\s*\([\'"]([^\'"]+)[\'"]\)+;~msi',
'id' => 'assert',
),
array(
'full' => '~\$\{"GLOBALS"\}\[[\'"](\w+)[\'"]\]=["\'](\w+)[\'"];\$\{"GLOBALS"\}\[[\'"](\w+)[\'"]\]=["\']\2[\'"];\${\$\{"GLOBALS"\}\[[\'"]\3[\'"]\]}=[\'"]([^\'"]+)[\'"];eval.{10,50}?\$\{\$\{"GLOBALS"\}\[[\'"]\1[\'"]\]\}\)+;~msi',
'fast' => '~\$\{"GLOBALS"\}\[[\'"](\w+)[\'"]\]=["\'](\w+)[\'"];\$\{"GLOBALS"\}\[[\'"](\w+)[\'"]\]=["\']\2[\'"];\${\$\{"GLOBALS"\}\[[\'"]\3[\'"]\]}=[\'"]([^\'"]+)[\'"];eval.{10,50}?\$\{\$\{"GLOBALS"\}\[[\'"]\1[\'"]\]\}\)+;~msi',
'id' => 'evalVarVar',
),
array(
'full' => '~(\$\w+)=[\'"][^"\']+[\'"];(\$\w+)=strrev\(\'edoced_46esab\'\);eval\(\2\([\'"][^\'"]+[\'"]\)+;~msi',
'fast' => '~(\$\w+)=[\'"][^"\']+[\'"];(\$\w+)=strrev\(\'edoced_46esab\'\);eval\(\2\([\'"][^\'"]+[\'"]\)+;~msi',
'id' => 'edoced_46esab',
),
array(
'full' => '~(\$\w+)\s*=\s*"((?:[^"]|(?<=\\\\)")*)";(\$\w+)\s*=\s*(\1\[\d+\]\.?)+;(\$\w+)\s*=\s*[^;]+;(\$\w+)\s*=\s*"[^"]+";\$\w+\s*=\s*\5\."[^"]+"\.\6;\3\((\1\[\d+\]\.?)+,\s*\$\w+\s*,"\d+"\);~smi',
'fast' => '~(\$\w+)\s*=\s*"((?:[^"]|(?<=\\\\)"){0,1000})";(\$\w+)\s*=\s*(\1\[\d+\]\.?)+;(\$\w+)\s*=\s*[^;]+;(\$\w+)\s*=\s*"[^"]+";\$\w+\s*=\s*\5\."[^"]+"\.\6;\3\((\1\[\d+\]\.?)+,\s*\$\w+\s*,"\d+"\);~smi',
'id' => 'eval2'
),
array(
'full' => '~@?(eval|(\$\w+)\s*=\s*create_function)\s*\((\'\',)?\s*([\'"?>.\s]+)?\s*\(?\s*@?\s*(base64_decode\s*\(|pack\s*\(\'H\*\',|convert_uudecode\s*\(|htmlspecialchars_decode\s*\(|stripslashes\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|eval\s*\()+.*?[^\'")]+((\s*\.?[\'"]([^\'";]+[\'"]*\s*)+)?\s*[\'"\);]+)+(\s*\2\(\);)?~msi',
'fast' => '~@?(eval|(\$\w+)\s*=\s*create_function)\s*\((\'\',)?\s*([\'"?>.\s]+)?\s*\(?\s*@?\s*(base64_decode\s*\(|pack\s*\(\'H\*\',|convert_uudecode\s*\(|htmlspecialchars_decode\s*\(|stripslashes\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|eval\s*\()+.*?[^\'")]+((\s*\.?[\'"]([^\'";]+[\'"]*\s*)+)?\s*[\'"\);]+)+(\s*\2\(\);)?~msi',
'id' => 'eval'
),
array(
'full' => '~eval\s*/\*[\w\s\.:,]+\*/\s*\([^\)]+\)+;~msi',
'fast' => '~eval\s*/\*[\w\s\.:,]+\*/\s*\(~msi',
'id' => 'eval'
),
array(
'full' => '~eval\("\\\\145\\\\166\\\\141\\\\154\\\\050\\\\142\\\\141\\\\163[^\)]+\)+;~msi',
'fast' => '~eval\("\\\\145\\\\166\\\\141\\\\154\\\\050\\\\142\\\\141\\\\163~msi',
'id' => 'evalHex'
),
array(
'full' => '~eval\s*\("\\\\x?\d+[^\)]+\)+;(?:[\'"]\)+;)?~msi',
'fast' => '~eval\s*\("\\\\x?\d+~msi',
'id' => 'evalHex'
),
array(
'full' => '~\$\w+=\'printf\';(\s*\$\w+\s*=\s*\'[^\']+\'\s*;)+\s*(\$\w+\s*=\s*\$\w+\([^\)]+\);\s*)+(\$\w+\s*=\s*\'[^\']+\';\s*)?(\s*(\$\w+\s*=\s*)?\$\w+\([^)]*\)+;\s*)+(echo\s*\$\w+;)?~msi',
'fast' => '~\$\w+=\'printf\';(\s*\$\w+\s*=\s*\'[^\']+\'\s*;)+\s*(\$\w+\s*=\s*\$\w+\([^\)]+\);\s*)+(\$\w+\s*=\s*\'[^\']+\';\s*)?(\s*(\$\w+\s*=\s*)?\$\w+\([^)]*\)+;\s*)+(echo\s*\$\w+;)?~msi',
'id' => 'seolyzer'
),
array(
'full' => '~(\$\w+)="((?:[^"]|(?<=\\\\)")*)";(\s*\$GLOBALS\[\'\w+\'\]\s*=\s*(?:\${)?(\1\[\d+\]}?\.?)+;\s*)+(.{0,400}\s*\1\[\d+\]\.?)+;\s*}~msi',
'fast' => '~(\$\w+)="((?:[^"]|(?<=\\\\)"){0,1000})";(\s*\$GLOBALS\[\'\w+\'\]\s*=\s*(?:\${)?(\1\[\d+\]}?\.?)+;\s*)+(.{0,400}\s*\1\[\d+\]\.?)+;\s*}~msi',
'id' => 'subst2',
),
array(
'full' => '~(\$\w+\s*=\s*"[^"]+";\s*)+(\$\w+\s*=\s*\$?\w+\("\w+"\s*,\s*""\s*,\s*"\w+"\);\s*)+\$\w+\s*=\s*\$\w+\("",\s*\$\w+\(\$\w+\("\w+",\s*"",(\s*\$\w+\.?)+\)+;\$\w+\(\);~msi',
'fast' => '~(\$\w+\s*=\s*"[^"]+";\s*)+(\$\w+\s*=\s*\$?\w+\("\w+"\s*,\s*""\s*,\s*"\w+"\);\s*)+\$\w+\s*=\s*\$\w+\("",\s*\$\w+\(\$\w+\("\w+",\s*"",(\s*\$\w+\.?)+\)+;\$\w+\(\);~msi',
'id' => 'strreplace',
),
array(
'full' => '~@?echo\s*([\'"?>.\s]+)?@?\s*(base64_decode\s*\(|stripslashes\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|eval\s*\()+.*?[^\'")]+((\s*\.?[\'"]([^\'";]+\s*)+)?\s*[\'"\);]+)+~msi',
'fast' => '~@?echo\s*([\'"?>.\s]+)?@?\s*(base64_decode\s*\(|stripslashes\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|eval\s*\()+.*?[^\'")]+((\s*\.?[\'"]([^\'";]+\s*)+)?\s*[\'"\);]+)+~msi',
'id' => 'echo',
),
array(
'full' => '~(\$\w+)="([^"]+)";\s*(\$\w+)=strtoupper\s*\((\1\[\d+\]\s*\.?\s*)+\)\s*;\s*if\(\s*isset\s*\(\${\s*\3\s*}\[\d*\s*\'\w+\'\s*\]\s*\)\s*\)\s*{eval\(\${\3\s*}\[\'\w+\']\s*\)\s*;}~smi',
'fast' => '~(\$\w+)="([^"]+)";\s*(\$\w+)=strtoupper\s*\((\1\[\d+\]\s*\.?\s*)+\)\s*;\s*if\(\s*isset\s*\(\${\s*\3\s*}\[\d*\s*\'\w+\'\s*\]\s*\)\s*\)\s*{eval\(\${\3\s*}\[\'\w+\']\s*\)\s*;}~smi',
'id' => 'strtoupper',
),
array(
'full' => '~(\$\w+)="[^"]+";\s*(\$\w+)=str_ireplace\("[^"]+","",\1\);(\$\w+)\s*=\s*"[^"]+";\s*function\s*(\w+)\((\$\w+,?)+\){\s*(\$\w+)=\s*create_function\(\'\',\$\w+\);\s*array_map\(\6,array\(\'\'\)+;\s*}\s*set_error_handler\(\'\4\'\);(\$\w+)=\2\(\3\);user_error\(\7,E_USER_ERROR\);\s*if\s*.+?}~msi',
'fast' => '~(\$\w+)="[^"]+";\s*(\$\w+)=str_ireplace\("[^"]+","",\1\);(\$\w+)\s*=\s*"[^"]+";\s*function\s*(\w+)\((\$\w+,?)+\){\s*(\$\w+)=\s*create_function\(\'\',\$\w+\);\s*array_map\(\6,array\(\'\'\)+;\s*}\s*set_error_handler\(\'\4\'\);(\$\w+)=\2\(\3\);user_error\(\7,E_USER_ERROR\);\s*if\s*.+?}~msi',
'id' => 'errorHandler',
),
array(
'full' => '~(\$\w+)=strrev\(str_ireplace\("[^"]+","","[^"]+"\)\);(\$\w+)="([^"]+)";eval\(\1\(\2\)+;}~msi',
'fast' => '~(\$\w+)=strrev\(str_ireplace\("[^"]+","","[^"]+"\)\);(\$\w+)="([^"]+)";eval\(\1\(\2\)+;}~msi',
'id' => 'evalIReplace',
),
array(
'full' => '~error_reporting\(0\);ini_set\("display_errors",\s*0\);if\(!defined\(\'(\w+)\'\)\){define\(\'\1\',__FILE__\);if\(!function_exists\("([^"]+)"\)\){function [^(]+\([^\)]+\).+?eval\(""\);.+?;eval\(\$[^\)]+\)\);[^\)]+\)+;return\s*\$[^;]+;\s*\?>([^;]+);~msi',
'fast' => '~error_reporting\(0\);ini_set\("display_errors",\s*0\);if\(!defined\(\'(\w+)\'\)\){define\(\'\1\',__FILE__\);if\(!function_exists\("([^"]+)"\)\){function [^(]+\([^\)]+\).+?eval\(""\);.+?;eval\(\$[^\)]+\)\);[^\)]+\)+;return\s*\$[^;]+;\s*\?>([^;]+);~msi',
'id' => 'PHPJiaMi',
),
array(
'full' => '~\$\w+=0;(\$GLOBALS\[\'\w+\'\])\s*=\s*\'([^\']+)\';\s*(\$\w+)=pack\(\'H\*\',substr\(\1,\s*([-\d]+)\)\);if\s*\(!function_exists\(\'(\w+)\'\)\){function\s*\5\(\$\w+,\s*\$\w+\){\$\w+=\1;\s*\$d=pack\(\'H\*\',substr\(\1,\s*\4\)\);\s*return\s*\$\w+\(substr\(\$\w+,\s*\$\w+,\s*\$\w+\)\);}};eval\(\3\(\'[^\']+\'\)\);~msi',
'fast' => '~\$\w+=0;(\$GLOBALS\[\'\w+\'\])\s*=\s*\'([^\']+)\';\s*(\$\w+)=pack\(\'H\*\',substr\(\1,\s*([-\d]+)\)\);if\s*\(!function_exists\(\'(\w+)\'\)\){function\s*\5\(\$\w+,\s*\$\w+\){\$\w+=\1;\s*\$d=pack\(\'H\*\',substr\(\1,\s*\4\)\);\s*return\s*\$\w+\(substr\(\$\w+,\s*\$\w+,\s*\$\w+\)\);}};eval\(\3\(\'[^\']+\'\)\);~msi',
'id' => 'substr',
),
array(
'full' => '~(function\s*(\w+)\((\$\w+)\){\s*return\s*(base64_decode|gzinflate|eval)\(\$\w+(,\d+)?\);}\s*)+(\$\w+)="([^"]+)";(\w+\()+\6\)+~msi',
'fast' => '~(function\s*(\w+)\((\$\w+)\){\s*return\s*(base64_decode|gzinflate|eval)\(\$\w+(,\d+)?\);}\s*)+(\$\w+)="([^"]+)";(\w+\()+\6\)+~msi',
'id' => 'funcs',
),
array(
'full' => '~\$_F=__FILE__;\$_X=["\']([^\'"]+)[\'"];\s*\$_\w+=base64_decode\(\$_X\);\$_X=strtr\(\$_X,\'([^\']+)\',\'([^\']+)\'\);\$_R=@?(?:(str_replace)|(ereg_replace)|(preg_replace))\(\'\~?__FILE__\~?\',"\'".\$_F."\'",\$_X\);eval\(\$_R\);\$_R=0;\$_X=0;~msi',
'fast' => '~\$_F=__FILE__;\$_X=["\']([^\'"]+)[\'"];\s*\$_\w+=base64_decode\(\$_X\);\$_X=strtr\(\$_X,\'([^\']+)\',\'([^\']+)\'\);\$_R=@?(?:(str_replace)|(ereg_replace)|(preg_replace))\(\'\~?__FILE__\~?\',"\'".\$_F."\'",\$_X\);eval\(\$_R\);\$_R=0;\$_X=0;~msi',
'id' => 'LockIt2',
),
array(
'full' => '~\$\w+="[^"]+";\$l+=0;\$l+=\'base64_decode\';\$l+=0;eval\(.+?;eval\(\$l+\);return;~msi',
'fast' => '~\$\w+="[^"]+";\$l+=0;\$l+=\'base64_decode\';\$l+=0;eval\(.+?;eval\(\$l+\);return;~msi',
'id' => 'custom1',
),
array(
'full' => '~(\$\w+)\s*=\s*"(\w{32})";\s*(\$\w+)\s*=\s*array\s*\(\);\s*(\3\[\d+\]\s*=\s*"[^"]+";\s*)+\s*(\$\w+)\s*=\s*"base64_decode";\s*\$\w+\s*=\s*(\w+)\s*\(\3,\1\);function\s*\6\(\s*.{200,500}return\s*\$\w+;\s*}\s*eval\s*\(\5\s*\(\$\w+\)\);~msi',
'fast' => '~(\$\w+)\s*=\s*"(\w{32})";\s*(\$\w+)\s*=\s*array\s*\(\);\s*(\3\[\d+\]\s*=\s*"[^"]+";\s*)+\s*(\$\w+)\s*=\s*"base64_decode";\s*\$\w+\s*=\s*(\w+)\s*\(\3,\1\);function\s*\6\(\s*.{200,500}return\s*\$\w+;\s*}\s*eval\s*\(\5\s*\(\$\w+\)\);~msi',
'id' => 'custom2',
),
array(
'full' => '~\$\w+=\'=+\s*Obfuscation provided by Unknowndevice64 - Free Online PHP Obfuscator\s*(?:http://www\.ud64\.com/)?\s*=+\';\s*(\$ud64_c[o0]m="[\\\\0-9a-z\."]+;)+\$\w+=(\$ud64_c[o0]m\()+"([^"]+)"\)+;@eval\(\$ud64_c[o0]m\(\'[^\']+\'\)+;~msi',
'fast' => '~\$\w+=\'=+\s*Obfuscation provided by Unknowndevice64 - Free Online PHP Obfuscator\s*(?:http://www\.ud64\.com/)?\s*=+\';\s*(\$ud64_c[o0]m="[\\\\0-9a-z\."]+;)+\$\w+=(\$ud64_c[o0]m\()+"([^"]+)"\)+;@eval\(\$ud64_c[o0]m\(\'[^\']+\'\)+;~msi',
'id' => 'ud64',
),
array(
'full' => '~\$\w+=__FILE__;\$\w+=fopen\(\$\w+,\'rb\'\);fread\(\$\w+,(\d+)\);\$\w+=explode\("\\\\t",base64_decode\(fread\(\$\w+,(\d+)\)+;\$\w+=\$\w+\[[\d+]\];[\$l1=\d{}\.;\(\)\[\]]+eval\(\$\w+\(\'[^\']+\'\)+;\s*return\s*;\?>[\w=\+]+~msi',
'fast' => '~\$\w+=__FILE__;\$\w+=fopen\(\$\w+,\'rb\'\);fread\(\$\w+,(\d+)\);\$\w+=explode\("\\\\t",base64_decode\(fread\(\$\w+,(\d+)\)+;\$\w+=\$\w+\[[\d+]\];[\$l1=\d{}\.;\(\)\[\]]+eval\(\$\w+\(\'[^\']+\'\)+;\s*return\s*;\?>[\w=\+]+~msi',
'id' => 'qibosoft',
),
array(
'full' => '~(\$\w+)=base64_decode\("([^"]+)"\);\s*eval\("return\s*eval\(\\\\"\1\\\\"\);"\)~msi',
'fast' => '~(\$\w+)=base64_decode\("([^"]+)"\);\s*eval\("return\s*eval\(\\\\"\1\\\\"\);"\)~msi',
'id' => 'evalReturn',
),
array(
'full' => '~(?:\$[0O]+\[[\'"](\w+)[\'"]\]\.?="[\\\\\w]+";)+(?:\$[0O]+\[[\'"]\w+[\'"]\]\.?=\$[0O]+\[[\'"]\w+[\'"]\]\([\'"][\d\(]+[\'"](,__FILE__)?\);)+@eval\((?:\$[0O]+\[[\'"]\w+[\'"]\]\()+"([^"]+)"\)+;~mis',
'fast' => '~(?:\$[0O]+\[[\'"](\w+)[\'"]\]\.?="[\\\\\w]+";)+(?:\$[0O]+\[[\'"]\w+[\'"]\]\.?=\$[0O]+\[[\'"]\w+[\'"]\]\([\'"][\d\(]+[\'"](,__FILE__)?\);)+@eval\((?:\$[0O]+\[[\'"]\w+[\'"]\]\()+"([^"]+)"\)+;~mis',
'id' => 'evalChars',
),
array(
'full' => '~<\?php\s+((\$GLOBALS\[\s*[\'"]\w+[\'"]\s*\])\s*=\s*base64_decode\("([^"]*)"\);)+\s*\?><\?php\s.+\2.+exit;\s}\sfunction\s\w+\(\)\s{\sreturn\sarray\(\s\'favicon\'\s=>\s\'[^\']+\',\s+\'sprites\'\s=>\s\'[^\']+\',\s\);\s}~msi',
'fast' => '~<\?php\s+((\$GLOBALS\[\s*[\'"]\w+[\'"]\s*\])\s*=\s*base64_decode\("([^"]*)"\);)+\s*\?><\?php\s.+\2.+exit;\s}\sfunction\s\w+\(\)\s{\sreturn\sarray\(\s\'favicon\'\s=>\s\'[^\']+\',\s+\'sprites\'\s=>\s\'[^\']+\',\s\);\s}~msi',
'id' => 'globalsBase64',
),
array(
'full' => '~(\$\w+=(\w+)\(\'\d+\'\);\s*)+\$\w+=new\s\$\w+\(\2\(\'(\d+)\'\)+;error_reporting\(0\);eval\(\$\w+\(\$\w+->\$\w+\("[^"]+"\)+;.+?function \2.+?return\s\$\w+;\s}~msi',
'fast' => '~(\$\w+=(\w+)\(\'\d+\'\);\s*)+\$\w+=new\s\$\w+\(\2\(\'(\d+)\'\)+;error_reporting\(0\);eval\(\$\w+\(\$\w+->\$\w+\("[^"]+"\)+;.+?function \2.+?return\s\$\w+;\s}~msi',
'id' => 'aanKFM',
),
array(
'full' => '~(\$\w+=strrev\("[^"]+"\);)+eval\((\$\w+\()+"[^"]+"\)+;~mis',
'fast' => '~(\$\w+=strrev\("[^"]+"\);)+eval\((\$\w+\()+"[^"]+"\)+;~mis',
'id' => 'strrevVarEval',
),
array(
'full' => '~\$\w+=basename/\*\w+\*/\(/\*\w+\*/trim/\*\w+\*/\(.+?(\$\w+)=.+\1.+?;~msi',
'fast' => '~\$\w+=basename/\*\w+\*/\(/\*\w+\*/trim/\*\w+\*/\(.+?(\$\w+)=.+\1.+?;~msi',
'id' => 'comments',
),
array(
'full' => '~(\$\w+)\s*=\s*(base64_decode\s*\(+|gzinflate\s*\(+|strrev\s*\(+|str_rot13\s*\(+|gzuncompress\s*\(+|convert_uudecode\s*\(+|urldecode\s*\(+|rawurldecode\s*\(+|htmlspecialchars_decode\s*\(+)+"([^"]+)"\)+;\s*@?eval\(([\'"?>.\s]+)?\1\);~',
'fast' => '~(\$\w+)\s*=\s*(base64_decode\s*\(+|gzinflate\s*\(+|strrev\s*\(+|str_rot13\s*\(+|gzuncompress\s*\(+|convert_uudecode\s*\(+|urldecode\s*\(+|rawurldecode\s*\(+|htmlspecialchars_decode\s*\(+)+"([^"]+)"\)+;\s*@?eval\(([\'"?>.\s]+)?\1\);~',
'id' => 'varFuncsEval',
),
array(
'full' => '~((\$\w+)="";\$\w+\s*\.=\s*"[^;]+;\s*)+(?:="";)?eval\((\s*\$\w+\s*\.)+\s*"[^"]+(?:"\);)+~msi',
'fast' => '~((\$\w+)="";\$\w+\s*\.=\s*"[^;]+;\s*)+(?:="";)?eval\((\s*\$\w+\s*\.)+\s*"[^"]+(?:"\);)+~msi',
'id' => 'evalConcatVars',
),
array(
'full' => '~<\?php\s*defined\(\'[^\']+\'\)\s*\|\|\s*define\(\'[^\']+\',__FILE__\);(global\s*\$[^;]+;)+\s*(if\(!function_exists\(\'([^\']+)\'\)\){\s*function\s*[^\)]+\(\$[^,]+,\$[^=]+=\'\'\){\s*if\(empty\(\$[^\)]+\)\)\s*return\s*\'\';\s*\$[^=]+=base64_decode\(\$[^\)]+\);\s*if\(\$[^=]+==\'\'\)\s*return\s*\~\$[^;]+;\s*if\(\$[^=]+==\'-1\'\)\s*@[^\(]+\(\);\s*\$[^=]+=\$GLOBALS\[\'[^\']+\'\]\[\'[^\']+\'\]\(\$[^\)]+\);\s*\$[^=]+=\$GLOBALS\[\'[^\']+\'\]\[\'[^\']+\'\]\(\$[^,]+,\$[^,]+,\$[^\)]+\);\s*return\s*\$[^^]+\^\$[^;]+;\s*}}\s*)+(\$[^\[]+\["[^"]+"]=[^\(]+\(\'[^\']+\',\'[^\']*\'\);\s*)+(\$[^\[]+\[\'[^\']+\'\]=\$GLOBALS\[\'[^\']+\'\]\[\'[^\']+\'\]\([^\)]*\)+;\s*)+return\(eval\(\$[^\[]+\[\'[^\']+\'\]\)+;\s*\?>\s*#!/usr/bin/php\s*-q\s*(\s*[^\s]+)+~msi',
'fast' => '~<\?php\s*defined\(\'[^\']{10,30}\'\)\s*\|\|\s*define\(\'[^\']{10,30}\',__FILE__\);(global\s*\$[^;]{10,30};)+\s*if\(!function_exists\(\'([^\']+)\'\)\){\s*function\s*[^\)]+\(\$[^,]{10,30},\$[^=]{10,30}=\'\'\){\s*if\(empty\(\$[^\)]+\)\)\s*return\s*\'\';\s*\$[^=]{10,30}=base64_decode~msi',
'id' => 'OELove',
),
array(
'full' => '~\$\w+\s*=(\s*(\d+)\+)+\d+;(\$\w+="[^"]+";)+(\$\w+)\s*=\s*\w+\(\'[^\']+\',\s*\$\w+,\s*\'[^\']+\'\);.+\4\("[^"]+"\);\$\w+\s*=\s*\4;(\$\w+="[^"]+";)+.+\$\w+\(\$\w+,\$\w+\("",\s*\$\w+\(\$\w+\(\$\w+\(\$\w+\(\$\w+,\s*"(\d+)"\)+,\$\w+\);.+function \w+\((\$\w+),\s*\$\w+,\s(\$\w+)\)\s{\8\s=\s\8\s\.\s\8;.+return \7;}~msi',
'fast' => '~\$\w+\s*=(\s*(\d+)\+)+\d+;(\$\w+="[^"]+";)+(\$\w+)\s*=\s*\w+\(\'[^\']+\',\s*\$\w+,\s*\'[^\']+\'\);.+\4\("[^"]+"\);\$\w+\s*=\s*\4;(\$\w+="[^"]+";)+~msi',
'id' => 'Obf_20200402_1',
),
array(
'full' => '~(?:\$\w+\s*=\s*"[^"]+";\s*)?function\s(\w+)\((\$\w+),\s*(\$\w+),\s*(\$\w+)\){\s*return\s*([\'\.]*(\2|\3|\4)[\'\.]*)+;\s*}\s*(?:\$\w+\s*=\s*"[^"]+";)?(\s*\$\w+\s*=\s*\1\((((\'\')|(\$\w+)|(\$\w+[\[\{]\d+[\]\}](\.\'\')?)|(\$\w+[\[\{]\d+[\]\}]\.\$\w+[\[\{]\d+[\]\}]))\s*,?\s*)+\);\s*)+\s*\$\w+\s*=\s*\1[^"]+"\'([^\']+)\'".+?array\(\'\',\'}\'.\$\w+\.\'//\'\)\);~msi',
'fast' => '~function\s(\w+)\((\$\w+),\s*(\$\w+),\s*(\$\w+)\){\s*return\s*([\'\.]*(\2|\3|\4)[\'\.]*)+;\s*}\s*(?:\$\w+\s*=\s*"[^"]+";)?(\s*\$\w+\s*=\s*\1\((((\'\')|(\$\w+)|(\$\w+[\[\{]\d+[\]\}](\.\'\')?)|(\$\w+[\[\{]\d+[\]\}]\.\$\w+[\[\{]\d+[\]\}]))\s*,?\s*)+\);\s*)+\s*\$\w+\s*=\s*\1[^"]+"\'([^\']+)\'".+?array\(\'\',\'}\'.\$\w+\.\'//\'\)\);~msi',
'id' => 'Obf_20200402_2',
),
array(
'full' => '~function\s*(\w+)\((\$\w+),\s*(\$\w+)\)\s*\{\s*\3\s*=\s*md5\(\3\);\s*\$\w+\s*=\s*\d+;\s*\2\s*=\s*base64_decode\(\2\);\s*\$\w+\s*=\s*strlen\(\2\);\s*\$\w+\s*=\s*strlen\(\3\);\s*\$\w+\s*=\s*\'\';\s*for\s*\(\$\w+\s*=\s\d+;\s*\$\w+\s*<\s*\$len;\s*\$\w+\+\+\)\s*\{\s*if\s*\(\$\w+\s*==\s*\$\w+\)\s*\{\s*\$\w+\s*=\s*\d+;\s*}\s*\$\w+\s*\.=\s*substr\(\3,\s*\$\w+,\s*\d+\);\s*\$\w+\+\+;\s*\}\s*\$\w+\s*=\s*\'\';\s*for\s*\(\$\w+\s*=\s*\d+;\s*\$\w+\s*<\s*\$\w+;\s*\$\w+\+\+\)\s*{\s*if\s*\(ord\(substr\(\2,\s*\$\w+,\s*\d+\)\)\s*<\s*ord\(substr\(\$\w+,\s*\$\w+,\s*\d+\)\)\)\s*\{\s*\$\w+\s*\.=\s*chr\(\(ord\(substr\(\2,\s*\$\w+,\s*\d+\)\)\s*\+\s*\d+\)\s*-\s*ord\(substr\(\$\w+,\s*\$\w+,\s*\d+\)\)\);\s*}\s*else\s*{\s*\$\w+\s*\.=\s*chr\(ord\(substr\(\2,\s*\$\w+,\s*\d+\)\)\s*-\s*ord\(substr\(\$\w+,\s*\$\w+,\s*\d+\)\)\);\s*}\s*}\s*return\s*\$\w+;\s*\}\s*\2\s*=\s*"[^"]+";\s*\3\s*=\s*"[^"]+";\s*(\$\w+)\s*=\s*\1\(\2,\s*\3\);\s*eval\(\4\);~msi',
'fast' => '~function\s*(\w+)\((\$\w+),\s*(\$\w+)\)\s*\{\s*\3\s*=\s*md5\(\3\);\s*\$\w+\s*=\s*\d+;\s*\2\s*=\s*base64_decode\(\2\);\s*\$\w+\s*=\s*strlen\(\2\);\s*\$\w+\s*=\s*strlen\(\3\);\s*\$\w+\s*=\s*\'\';\s*for\s*\(\$\w+\s*=\s\d+;\s*\$\w+\s*<\s*\$len;\s*\$\w+\+\+\)\s*\{\s*if\s*\(\$\w+\s*==\s*\$\w+\)\s*\{\s*\$\w+\s*=\s*\d+;\s*}\s*\$\w+\s*\.=\s*substr\(\3,\s*\$\w+,\s*\d+\);\s*\$\w+\+\+;\s*\}\s*\$\w+\s*=\s*\'\';\s*for\s*\(\$\w+\s*=\s*\d+;\s*\$\w+\s*<\s*\$\w+;\s*\$\w+\+\+\)\s*{\s*if\s*\(ord\(substr\(\2,\s*\$\w+,\s*\d+\)\)\s*<\s*ord\(substr\(\$\w+,\s*\$\w+,\s*\d+\)\)\)\s*\{\s*\$\w+\s*\.=\s*chr\(\(ord\(substr\(\2,\s*\$\w+,\s*\d+\)\)\s*\+\s*\d+\)\s*-\s*ord\(substr\(\$\w+,\s*\$\w+,\s*\d+\)\)\);\s*}\s*else\s*{\s*\$\w+\s*\.=\s*chr\(ord\(substr\(\2,\s*\$\w+,\s*\d+\)\)\s*-\s*ord\(substr\(\$\w+,\s*\$\w+,\s*\d+\)\)\);\s*}\s*}\s*return\s*\$\w+;\s*\}\s*\2\s*=\s*"[^"]+";\s*\3\s*=\s*"[^"]+";\s*(\$\w+)\s*=\s*\1\(\2,\s*\3\);\s*eval\(\4\);~msi',
'id' => 'Obf_20200414_1',
),
array(
'full' => '~(?:\$\w+\s*=\s*\'\w+\';)?\s*(\$\w+)\s*=\s*urldecode\(\'[%0-9a-f]+\'\);(\s*(\$\w+)\s*=(\s*\1\{\d+\}\.?)+;)+\s*(\$\w+)\s*=\s*"[^"]+"\.\3\("[^"]+"\);\s*eval\(\5\);~msi',
'fast' => '~(\$\w+)\s*=\s*urldecode\(\'[%0-9a-f]+\'\);(\s*(\$\w+)\s*=(\s*\1\{\d+\}\.?)+;)+\s*(\$\w+)\s*=\s*"[^"]+"\.\3\("[^"]+"\);\s*eval\(\5\);~msi',
'id' => 'Obf_20200421_1',
),
array(
'full' => '~(\$\w+)=\'([^\']+)\';(\$\w+)=str_rot13\(gzinflate\(str_rot13\(base64_decode\(\1\)\)\)\);eval\(\3\);~msi',
'fast' => '~(\$\w+)=\'([^\']+)\';(\$\w+)=str_rot13\(gzinflate\(str_rot13\(base64_decode\(\1\)\)\)\);eval\(\3\);~msi',
'id' => 'SmartToolsShop',
),
array(
'full' => '~(\$\w+)\s*=\s*\("\?>"\.gzuncompress\(base64_decode\("[^"]+"\)\)\);\s*@?eval\(\1\);~msi',
'fast' => '~(\$\w+)\s*=\s*\("\?>"\.gzuncompress\(base64_decode\("[^"]+"\)\)\);\s*@?eval\(\1\);~msi',
'id' => 'Obf_20200504_1',
),
array(
'full' => '~(\$\w+)=base64_decode\(\'[^\']+\'\);\s*eval\(\1\);~mis',
'fast' => '~(\$\w+)=base64_decode\(\'[^\']+\'\);\s*eval\(\1\);~mis',
'id' => 'Obf_20200507_1',
),
array(
'full' => '~@error_reporting\(0\);\s*@ini_set\(\'error_log\',NULL\);\s*@ini_set\(\'log_errors\',0\);\s*@ini_set\(\'display_errors\',\s*0\);\s*@(\$\w+)="[create_function"\.]+;\s*(\$\w+)=\1\("([^"]+)","[eval\."]+\(\'\?>\'\.[base64_decode"\.]+\(\3\)\);"\);\s*\2\("([^"]+)"\);exit;~msi',
'fast' => '~@error_reporting\(0\);\s*@ini_set\(\'error_log\',NULL\);\s*@ini_set\(\'log_errors\',0\);\s*@ini_set\(\'display_errors\',\s*0\);\s*@(\$\w+)="[create_function"\.]+;\s*(\$\w+)=\1\("([^"]+)","[eval\."]+\(\'\?>\'\.[base64_decode"\.]+\(\3\)\);"\);\s*\2\("([^"]+)"\);exit;~msi',
'id' => 'Obf_20200507_2',
),
array(
'full' => '~@error_reporting\(0\);\s*@ini_set\(\'error_log\',NULL\);\s*@ini_set\(\'log_errors\',0\);\s*@ini_set\(\'output_buffering\',\s*0\);\s*@ini_set\(\'display_errors\',\s*0\);
s*\$\w+="(An0n_3xPloiTeR)";\$UeXploiT="([^"]+)";\$\1="([^"]+)";exit;~msi',
'fast' => '~@error_reporting\(0\);\s*@ini_set\(\'error_log\',NULL\);\s*@ini_set\(\'log_errors\',0\);\s*@ini_set\(\'output_buffering\',\s*0\);\s*@ini_set\(\'display_errors\',\s*0\);
s*\$\w+="(An0n_3xPloiTeR)";\$UeXploiT="([^"]+)";\$\1="([^"]+)";exit;~msi',
'id' => 'Obf_20200507_3',
),
array(
'full' => '~(?:error_reporting\(0\);\s*ini_set\("max_execution_time",0\);\s*(?:/\*.*?\*/)?\s*)?(\$\w+)=\s*\[(("."=>".",?\s*)+)];\s*(\$\w+)=str_split\("([^"]+)"\);\s*(?:\$\w+="";)?\s*foreach\(\4\s*as\s*(\$\w+)\)\s*{\s*foreach\(\s*\1\s*as\s*(\$\w+)=>(\$\w+)\)\s*{\s*if\(\6==\(string\)\8\)\s*\{\s*\$\w+\.=\7;\s*break;\s*}\s*}\s*}~msi',
'fast' => '~(\$\w+)=\s*\[(("."=>".",?\s*)+)];\s*(\$\w+)=str_split\("([^"]+)"\);\s*(?:\$\w+="";)?\s*foreach\(\4\s*as\s*(\$\w+)\)\s*{\s*foreach\(\s*\1\s*as\s*(\$\w+)=>(\$\w+)\)\s*{\s*if\(\6==\(string\)\8\)\s*\{\s*\$\w+\.=\7;\s*break;\s*}\s*}\s*}~msi',
'id' => 'Obf_20200507_4',
),
array(
'full' => '~assert\("[eval"\.]+\([base64_decode\."]+\(\'([^\']+)\'\)\)"\);~msi',
'fast' => '~assert\("[eval"\.]+\([base64_decode\."]+\(\'([^\']+)\'\)\)"\);~msi',
'id' => 'Obf_20200507_5',
),
array(
'full' => '~parse_str\(\'([^\']+)\',(\$\w+)\);(\2\[\d+\]\()+\'[^\']+\'\),array\(\),array\(\'[^\']+\'\.(\2\[\d+\]\()+\'([^\']+)\'\)+\.\'//\'\)+;~msi',
'fast' => '~parse_str\(\'([^\']+)\',(\$\w+)\);(\2\[\d+\]\()+\'[^\']+\'\),array\(\),array\(\'[^\']+\'\.(\2\[\d+\]\()+\'([^\']+)\'\)+\.\'//\'\)+;~msi',
'id' => 'Obf_20200513_1',
),
array(
'full' => '~function\s*(\w+)\((\$\w+)\)\{\2=substr\(\2,\(int\)\(hex2bin\(\'([0-9a-f]+)\'\)\)\);\2=substr\(\2,\(int\)\(hex2bin\(\'([0-9a-f]+)\'\)\),\(int\)\(hex2bin\(\'([0-9a-f]+)\'\)\)\);return\s*\2;\}(\$\w+)=\'[^\']+\';(\$\w+)=\'base64_decode\';function\s*\w+\((\$\w+)\)\{global\s*\6;global\s*\7;return\s*strrev\(gzinflate\(\7\(\1\(\8\)\)\)\);\}([^\']+)\'\)+~msi',
'fast' => '~function\s*(\w+)\((\$\w+)\)\{\2=substr\(\2,\(int\)\(hex2bin\(\'([0-9a-f]+)\'\)\)\);\2=substr\(\2,\(int\)\(hex2bin\(\'([0-9a-f]+)\'\)\),\(int\)\(hex2bin\(\'([0-9a-f]+)\'\)\)\);return\s*\2;\}(\$\w+)=\'[^\']+\';(\$\w+)=\'base64_decode\';function\s*\w+\((\$\w+)\)\{global\s*\6;global\s*\7;return\s*strrev\(gzinflate\(\7\(\1\(\8\)\)\)\);\}([^\']+)\'\)+~msi',
'id' => 'Obf_20200522_1',
),
array(
'full' => '~(\$\w+)=strrev\("[base64_decode"\.]+\);eval\(\1\(\'([^\']+)\'\)\);~msi',
'fast' => '~(\$\w+)=strrev\("[base64_decode"\.]+\);eval\(\1\(\'([^\']+)\'\)\);~msi',
'id' => 'Obf_20200526_1',
),
array(
'full' => '~error_reporting\(0\);define\(\'\w+\',\s*__FILE__\);define\(\'\w+\',\s*fopen\(__FILE__,\s*\'r\'\)\);fseek\(\w+,\s*__COMPILER_HALT_OFFSET__\);((\$\w+="\\\\x[0-9a-f]+";)+(\$\w+="[^"]+";)+eval\("\?>"\.(\$\w+\()+"([^"]+)"\)+;)+(?:/\*\w+\*/)?__halt_compiler\(\);[\w#|>^%\[\.\]\\\\/=]+~msi',
'fast' => '~error_reporting\(0\);define\(\'\w+\',\s*__FILE__\);define\(\'\w+\',\s*fopen\(__FILE__,\s*\'r\'\)\);fseek\(\w+,\s*__COMPILER_HALT_OFFSET__\);((\$\w+="\\\\x[0-9a-f]+";)+(\$\w+="[^"]+";)+eval\("\?>"\.(\$\w+\()+"([^"]+)"\)+;)+(?:/\*\w+\*/)?__halt_compiler\(\);[\w#|>^%\[\.\]\\\\/=]+~msi',
'id' => 'Obf_20200527_1',
),
array(
'full' => '~(\$\w+)=strrev\("[base64_decode]+"\)\.str_replace\(\'(\w+)\',\'\',\'\w+\'\);\s*eval\(\1\(\$\w+\)\);~msi',
'fast' => '~(\$\w+)=strrev\("[base64_decode]+"\)\.str_replace\(\'(\w+)\',\'\',\'\w+\'\);\s*eval\(\1\(\$\w+\)\);~msi',
'id' => 'Obf_20200602_1',
),
array(
'full' => '~[\'".]+(\$\w+\s*=\s*[\'"]\w+[\'"];)+(\$\w+=\$\w+[\'.]+\$\w+;)+(\$\w+=(str_rot13|base64_decode|gzinflate)\(\$\w+\);)+eval\(\$\w+\);~msi',
'fast' => '~[\'".]+(\$\w+\s*=\s*[\'"]\w+[\'"];)+(\$\w+=\$\w+[\'.]+\$\w+;)+(\$\w+=(str_rot13|base64_decode|gzinflate)\(\$\w+\);)+eval\(\$\w+\);~msi',
'id' => 'flamux',
),
array(
'full' => '~function\s*(\w+)\(\)\{\s*return\s*"([^"]+)";\s*\}\s*eval\("([^"]+)"\.\1\(\)\."([^"]+)"\);~msi',
'fast' => '~function\s*(\w+)\(\)\{\s*return\s*"([^"]+)";\s*\}\s*eval\("([^"]+)"\.\1\(\)\."([^"]+)"\);~msi',
'id' => 'bypass',
),
array(
'full' => '~(\$\{"[\\\\x47c2153fGLOBALS]+"\}\["[\w\\\\]+"\]="[\w\\\\]+";(\$\w+="\w+";)?){5,}.+\$\{"[\\\\x47c2153fGLOBALS]+"\}\["[\w\\\\]+"\].+}+~msi',
'fast' => '~(\$\{"[\\\\x47c2153fGLOBALS]+"\}\["[\w\\\\]+"\]="[\w\\\\]+";(\$\w+="\w+";)?){5,}.+\$\{"[\\\\x47c2153fGLOBALS]+"\}\["[\w\\\\]+"\].+}+~msi',
'id' => 'Obf_20200618_1',
),
array(
'full' => '~(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+(echo)\s*"(?:[<\w\\\\>\/\s={:}#]+);(?:[\\\\\w\-:]+;)+(?:[\\\\\w}:{\s#]+;)+(?:[\\\\\w}:{#\-\s]+;)+[\\\\\w}<\/]+";\$\w+=["\\\\\w]+;(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";error_reporting\(\d\);\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;set_time_limit\(\d\);\$\w+=["\\\\\w]+;(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+(if\(empty\()[\$_\w\["\\\\\]]+\)\){\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\w()]+;(}else{)\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;}chdir\(\${\$\w+}\);\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=htmlentities\(\$[_\w\["\\\\\].?]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);\1[<\\\\\w>\/"]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";(?:\$\w+=["\w\\\\]+;)+(?:\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;)+\$\w+=["\w\\\\]+;\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["\\\\\w<>=\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w=\s\/<>]+;(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\1["<\\\\\w\s\'.\${}>\/]+;\1["<\\\\\w>\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."&\w\\\\\'<\/]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;\1["<\\\\\w>\s=\'.\${}&\/]+;(?:\1["<\\\\\w>\/]+;)+\$\w+=["\\\\\w]+;\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";switch\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\){case"[\w\\\\\s]+":(?:\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;)+\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){(?:\$\w+=["\\\\\w]+;)+(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=fopen\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},"\w"\);\$\w+=["\\\\\w]+;\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=(?:(?|fread|filesize)\(\${\$\w+},?)+\)\);\${\$\w+}=str_replace\("[\w\\\\\s]+",[<\w\\\\>"]+,\${\$\w+}\);\1["\\\\\w<>=\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w=\s\/<>&\${}\']+;\1["\\\\\w\s.:]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\."[\w\\\\\s]+";\1["\\\\\w\s\'=]+\.\${\$\w+}\.["<\w\\\\>]+;\1["<\\\\\w>\s=\'\/;]+\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";(?:\$\w+=["\w\\\\]+;)+\${\$\w+}=fopen\(\${\$\w+},"\w"\);if\(fwrite\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\s\\\\\w]+;\3\1["\\\\\w\s.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\\\\\w]+;}}fclose\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);(break;case")[\w\\\\\s]+":\${\$\w+}=[\$_\w\["\]\\\\]+;if\(unlink\([\${}\w]+\)\){\1\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["\s\w\\\\.>]+;\3\$\w+=["\w\\\\]+;\1["\\\\\w\s.${}<]+;}\4[\w\\\\\s]+":(?:\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;)+\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["<\w\\\\\s=.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}.["\\\\\w&.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\s=]+;(?:\1["\w\\\\:\s\'><=\/]+;)+\3(?:\$\w+=["\w\\\\]+;)+if\(copy\(\${\$\w+},\${\$\w+}\)\){\1"[\w\\\\\s]+";\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+;}}\4[\w\\\\\s]+":(?:\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;)+\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\'\\\\\w\s=>]+;\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\1["\\\\\w\s\'=>\/;]+\3if\(rename\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3\$\w+=["\w\\\\]+;\1"[\w\\\\\s]+"\.\${\$\w+}[."\\\\\w>;]+}}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\${\$\w+}=[\$_\w\["\]\\\\]+;\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["\\\\\w\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["\\\\\w=.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["\\\\\w\s>]+;(?:\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;)+\1["\\\\\w\s=\'<\/;]+\3if\(rename\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+;}}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;if\(rmdir\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3\$\w+=["\\\\\w]+;\1"[\w\\\\\s]+"\.\${\$\w+}[."\\\\\w]+;}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";system\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\$\w+=["\w\\\\]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3\$\w+=["\w\\\\]+;if\(\${\$\w+}=fopen\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},"\w"\)\){\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;\3\$\w+=["\w\\\\]+;\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;}\$\w+=["\w\\\\]+;fclose\(\${\$\w+}\);}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\${\$\w+}=basename\([\$_\w\["\\\\\]]+\);\2\${\$\w+}\)\){\1["<\\\\\w\s=\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["&\w\\\\\s=\/\-\'>]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";if\(move_uploaded_file\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;unlink\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);\3\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+;}}\4[\w\\\\\s]+":\${\$\w+}=[\$_\w\["\]\\\\]+;\2\${\$\w+}\)\){(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=explode\(":",\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);if\(\(!is_numeric\(\${\$\w+}\[\d\]\)\)or\(!is_numeric\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\[\d\]\)\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3(?:\$\w+=["\w\\\\]+;)+\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\w\\\\]+;(?:\${\$\w+}=\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\[\d\];)+\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;while\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}<=\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=\d;\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=fsockopen\(\$\w+,\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)or\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=\d;if\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}==\d\){\$\w+=["\\\\\w]+;echo\${\$\w+}\.["\\\\\w>]+;}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\+\+;fclose\(\${\$\w+}\);}}}break;}clearstatcache\(\);(?:\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;){2}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=scandir\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);foreach\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\s\w+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\){if\(is_file\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=round\(filesize\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\/\d+,\d\);\$\w+=["\w\\\\]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\/\w\\\\>;]+\$\w+=["\\\\\w]+;\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\s<\/>]+;\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w=&]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\/<>;]+\$\w+=["\\\\\w]+;\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+\${\$\w+}[.">\w\\\\\/<]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3(?:\$\w+=["\\\\\w]+;){2}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=scandir\(\${\$\w+}\);(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";){2}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=count\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\-\d;\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+\/\w+>";\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\s=<\/]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;){3}}}\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;~msi',
'fast' => '~(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+(echo)\s*"(?:[<\w\\\\>\/\s={:}#]+);(?:[\\\\\w\-:]+;)+(?:[\\\\\w}:{\s#]+;)+(?:[\\\\\w}:{#\-\s]+;)+[\\\\\w}<\/]+";\$\w+=["\\\\\w]+;(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";error_reporting\(\d\);\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;set_time_limit\(\d\);\$\w+=["\\\\\w]+;(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+(if\(empty\()[\$_\w\["\\\\\]]+\)\){\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\w()]+;(}else{)\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;}chdir\(\${\$\w+}\);\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=htmlentities\(\$[_\w\["\\\\\].?]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);\1[<\\\\\w>\/"]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";(?:\$\w+=["\w\\\\]+;)+(?:\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;)+\$\w+=["\w\\\\]+;\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["\\\\\w<>=\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w=\s\/<>]+;(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\1["<\\\\\w\s\'.\${}>\/]+;\1["<\\\\\w>\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."&\w\\\\\'<\/]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;\1["<\\\\\w>\s=\'.\${}&\/]+;(?:\1["<\\\\\w>\/]+;)+\$\w+=["\\\\\w]+;\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";switch\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\){case"[\w\\\\\s]+":(?:\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;)+\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){(?:\$\w+=["\\\\\w]+;)+(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=fopen\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},"\w"\);\$\w+=["\\\\\w]+;\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=(?:(?|fread|filesize)\(\${\$\w+},?)+\)\);\${\$\w+}=str_replace\("[\w\\\\\s]+",[<\w\\\\>"]+,\${\$\w+}\);\1["\\\\\w<>=\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w=\s\/<>&\${}\']+;\1["\\\\\w\s.:]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\."[\w\\\\\s]+";\1["\\\\\w\s\'=]+\.\${\$\w+}\.["<\w\\\\>]+;\1["<\\\\\w>\s=\'\/;]+\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";(?:\$\w+=["\w\\\\]+;)+\${\$\w+}=fopen\(\${\$\w+},"\w"\);if\(fwrite\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\s\\\\\w]+;\3\1["\\\\\w\s.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\\\\\w]+;}}fclose\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);(break;case")[\w\\\\\s]+":\${\$\w+}=[\$_\w\["\]\\\\]+;if\(unlink\([\${}\w]+\)\){\1\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["\s\w\\\\.>]+;\3\$\w+=["\w\\\\]+;\1["\\\\\w\s.${}<]+;}\4[\w\\\\\s]+":(?:\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;)+\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["<\w\\\\\s=.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}.["\\\\\w&.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\s=]+;(?:\1["\w\\\\:\s\'><=\/]+;)+\3(?:\$\w+=["\w\\\\]+;)+if\(copy\(\${\$\w+},\${\$\w+}\)\){\1"[\w\\\\\s]+";\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+;}}\4[\w\\\\\s]+":(?:\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;)+\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\'\\\\\w\s=>]+;\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\1["\\\\\w\s\'=>\/;]+\3if\(rename\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3\$\w+=["\w\\\\]+;\1"[\w\\\\\s]+"\.\${\$\w+}[."\\\\\w>;]+}}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\${\$\w+}=[\$_\w\["\]\\\\]+;\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["\\\\\w\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["\\\\\w=.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["\\\\\w\s>]+;(?:\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;)+\1["\\\\\w\s=\'<\/;]+\3if\(rename\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+;}}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;if\(rmdir\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3\$\w+=["\\\\\w]+;\1"[\w\\\\\s]+"\.\${\$\w+}[."\\\\\w]+;}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";system\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\$\w+=["\w\\\\]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3\$\w+=["\w\\\\]+;if\(\${\$\w+}=fopen\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},"\w"\)\){\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;\3\$\w+=["\w\\\\]+;\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;}\$\w+=["\w\\\\]+;fclose\(\${\$\w+}\);}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\${\$\w+}=basename\([\$_\w\["\\\\\]]+\);\2\${\$\w+}\)\){\1["<\\\\\w\s=\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["&\w\\\\\s=\/\-\'>]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";if\(move_uploaded_file\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;unlink\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);\3\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+;}}\4[\w\\\\\s]+":\${\$\w+}=[\$_\w\["\]\\\\]+;\2\${\$\w+}\)\){(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=explode\(":",\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);if\(\(!is_numeric\(\${\$\w+}\[\d\]\)\)or\(!is_numeric\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\[\d\]\)\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3(?:\$\w+=["\w\\\\]+;)+\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\w\\\\]+;(?:\${\$\w+}=\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\[\d\];)+\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;while\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}<=\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=\d;\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=fsockopen\(\$\w+,\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)or\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=\d;if\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}==\d\){\$\w+=["\\\\\w]+;echo\${\$\w+}\.["\\\\\w>]+;}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\+\+;fclose\(\${\$\w+}\);}}}break;}clearstatcache\(\);(?:\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;){2}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=scandir\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);foreach\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\s\w+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\){if\(is_file\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=round\(filesize\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\/\d+,\d\);\$\w+=["\w\\\\]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\/\w\\\\>;]+\$\w+=["\\\\\w]+;\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\s<\/>]+;\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w=&]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\/<>;]+\$\w+=["\\\\\w]+;\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+\${\$\w+}[.">\w\\\\\/<]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3(?:\$\w+=["\\\\\w]+;){2}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=scandir\(\${\$\w+}\);(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";){2}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=count\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\-\d;\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+\/\w+>";\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\s=<\/]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;){3}}}\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;~msi',
'id' => 'darkShell',
),
/*array(
'full' => '~goto \w+;\s*(\w+:\s*(\w+:\s*)?.*?goto\s*\w+;\s*(}\s*goto\s*\w+;)?(goto\s*\w+;)?\s*)+\w+:\s*[^;]+;(\s*goto\s*\w+;\s*\w+:\s*\w+:)?~msi',
'fast' => '~goto \w+;\s*(\w+:\s*(\w+:\s*)?.*?goto\s*\w+;\s*(}\s*goto\s*\w+;)?(goto\s*\w+;)?\s*)+\w+:\s*[^;]+;(\s*goto\s*\w+;\s*\w+:\s*\w+:)?~msi',
'id' => 'goto',
),*/
);
private $full_source;
private $prev_step;
private $cur;
private $obfuscated;
private $max_level;
private $max_time;
private $run_time;
private $fragments;
private $grabed_signature_ids;
public function __construct($text, $text2 = '', $max_level = 30, $max_time = 5)
{
if (
(strpos($text2, '=file(__FILE__);eval(base64_decode(') //zeura hack
&& strpos($text2, '1)));__halt_compiler();'))
|| (strpos($text2, 'define(\'__LOCALFILE__\', __FILE__);') //obf_20200527_1
&& strpos($text2, '__halt_compiler();'))
) {
$this->text = $text2;
$this->full_source = $text2;
} else {
$this->text = $text;
$this->full_source = $text;
}
$this->max_level = $max_level;
$this->max_time = $max_time;
$this->fragments = [];
$this->grabed_signature_ids = [];
}
public function getObfuscateType($str)
{
$l_UnicodeContent = Helpers::detect_utf_encoding($str);
if ($l_UnicodeContent !== false) {
if (function_exists('iconv')) {
$str = iconv($l_UnicodeContent, "CP1251//IGNORE", $str);
}
}
if(strpos($str, '# Malware list detected by AI-Bolit (http') !== false) {
return '';
}
if(strpos($str, '#Malware list detected by AI-Bolit(http') !== false) {
return '';
}
if(strpos($str, '<div class="header">Отчет сканера AI-Bolit</div>') !== false) {
return '';
}
if (strpos($str, '$default_action="FilesMan"') !== false) {
return '';
}
foreach ($this->signatures as $signature) {
if (preg_match($signature['fast'], $str, $matches)) {
if ($signature['id'] === 'echo') {
if (preg_match('~\$_(POST|GET|REQUEST|COOKIE)~ms', $matches[0])) {
return '';
}
if (!isset($matches[5]) || $matches[5] === '') {
return '';
}
}
if ($signature['id'] === 'eval') {
if (strpos($matches[0], 'file_get_contents') !== false) {
return '';
}
if (preg_match('~\$_(POST|GET|REQUEST|COOKIE)~ms', $matches[0])) {
return '';
}
if (strpos($matches[0], '=> array(\'eval(base64_decode(\')') !== false) {
return '';
}
if (@$matches[6] == '\'";') {
return '';
}
}
return $signature['id'];
}
}
return '';
}
private function getObfuscateFragment($str)
{
foreach ($this->signatures as $signature) {
if (preg_match($signature['full'], $str, $matches)) {
return $matches[0];
}
}
return '';
}
public function getFragments()
{
if (count($this->fragments) > 0) {
return $this->fragments;
}
return false;
}
public function getGrabedSignatureIDs()
{
return array_keys($this->grabed_signature_ids);
}
private function grabFragments()
{
if ($this->cur == null) {
$this->cur = $this->text;
}
$str = $this->cur;
reset($this->signatures);
while ($sign = current($this->signatures)) {
$regex = $sign['full'];
if (preg_match($regex, $str, $matches)) {
$this->grabed_signature_ids[$sign['id']] = 1;
$this->fragments[$matches[0]] = $matches[0];
$str = str_replace($matches[0], '', $str);
} else {
next($this->signatures);
}
}
}
private function deobfuscateFragments()
{
$prev_step = '';
if (count($this->fragments) > 0) {
$i = 0;
foreach ($this->fragments as $frag => $value) {
if ($frag !== $value) {
continue;
}
$type = $this->getObfuscateType($value);
while ($type !== '' && $i < 50) {
$find = $this->getObfuscateFragment($value);
$func = 'deobfuscate' . ucfirst($type);
$temp = @$this->$func($find);
$value = str_replace($find, $temp, $value);
$this->fragments[$frag] = $value;
$type = $this->getObfuscateType($value);
if ($prev_step == hash('sha256', $value)) {
break;
} else {
$prev_step = hash('sha256', $value);
}
$i++;
}
}
}
}
public function deobfuscate($hangs = 0, $prev_step = '')
{
$deobfuscated = '';
$this->run_time = microtime(true);
$this->cur = $this->text;
$this->grabFragments();
$this->deobfuscateFragments();
$deobfuscated = $this->cur;
if (count($this->fragments) > 0 ) {
foreach ($this->fragments as $fragment => $text) {
$deobfuscated = str_replace($fragment, $text, $deobfuscated);
}
}
$deobfuscated = preg_replace_callback('~"[\w\\\\\s=;_<>&/\.-]+"~msi', function ($matches) {
return preg_match('~\\\\x[2-7][0-9a-f]|\\\\1[0-2][0-9]|\\\\[3-9][0-9]|\\\\0[0-4][0-9]|\\\\1[0-7][0-9]~msi', $matches[0]) ? stripcslashes($matches[0]) : $matches[0];
}, $deobfuscated);
$deobfuscated = preg_replace_callback('~echo\s*"((.*?[^\\\\])??((\\\\\\\\)+)?+)"~msi', function ($matches) {
return preg_match('~\\\\x[2-7][0-9a-f]|\\\\1[0-2][0-9]|\\\\[3-9][0-9]|\\\\0[0-4][0-9]|\\\\1[0-7][0-9]~msi', $matches[0]) ? stripcslashes($matches[0]) : $matches[0];
}, $deobfuscated);
preg_match_all('~(global\s*(\$[\w_]+);)\2\s*=\s*"[^"]+";~msi', $deobfuscated, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$deobfuscated = str_replace($match[0], '', $deobfuscated);
$deobfuscated = str_replace($match[1], '', $deobfuscated);
}
preg_match_all('~\$\{"GLOBALS"\}\[[\'"](\w+)[\'"]\]=["\'](\w+)[\'"];~msi', $deobfuscated, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$deobfuscated = preg_replace_callback('~\$\{\$\{"GLOBALS"\}\[[\'"]' . $match[1] . '[\'"]\]\}~msi', function ($matches) use ($match) {
return '$' . $match[2];
}, $deobfuscated);
$deobfuscated = str_replace($match[0], '', $deobfuscated);
}
$deobfuscated = preg_replace_callback('~\$\{(\$\w+)\}~msi', function ($matches) use ($deobfuscated) {
if (isset($matches[1])) {
preg_match('~\\' . $matches[1] . '\s*=\s*["\'](\w+)[\'"];~msi', $deobfuscated, $matches2);
if (isset($matches2[1])) {
return '$' . $matches2[1];
}
return $matches[0];
}
}, $deobfuscated);
if (strpos($deobfuscated, 'chr(')) {
$deobfuscated = preg_replace_callback('~chr\((\d+)\)~msi', function ($matches) {
return "'" . chr($matches[1]) . "'";
}, $deobfuscated);
}
if (substr_count(substr($deobfuscated, 0, 200), 'base64_decode(\'') > 3) {
$deobfuscated = preg_replace_callback('~base64_decode\(\'([^\']+)\'\)~msi', function ($matches) {
return "'" . base64_decode($matches[1]) . "'";
}, $deobfuscated);
}
if ($this->getObfuscateType($deobfuscated) !== '' && $hangs < 5) {
$this->text = $deobfuscated;
if ($prev_step == hash('sha256', $deobfuscated)) {
return $deobfuscated;
}
$deobfuscated = $this->deobfuscate(++$hangs, hash('sha256', $deobfuscated));
}
return $deobfuscated;
}
private function deobfuscateObf_20200618_1($str)
{
preg_match('~(\$\{"[\\\\x47c2153fGLOBALS]+"\}\["[\w\\\\]+"\]="[\w\\\\]+";(\$\w+="\w+";)?)+.+\$\{"[\\\\x47c2153fGLOBALS]+"\}\["[\w\\\\]+"\].+}+~msi', $str, $matches);
$find = $matches[0];
$res = stripcslashes($str);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateBypass($str)
{
preg_match('~function\s*(\w+)\(\)\{\s*return\s*"([^"]+)";\s*\}\s*eval\("([^"]+)"\.\1\(\)\."([^"]+)"\);~ms', $str, $matches);
$find = $matches[0];
$bypass = stripcslashes($matches[2]);
$eval = $matches[3] . $bypass . $matches[4];
$res = str_replace($find, $eval, $str);
return $res;
}
private function deobfuscateGoto($str)
{
preg_match('~goto \w+;\s*(\w+:\s*(\w+:\s*)?.*?goto\s*\w+;\s*(}\s*goto\s*\w+;)?(goto\s*\w+;)?\s*)+\w+:\s*[^;]+;(\s*goto\s*\w+;\s*\w+:\s*\w+:)?~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$labels = [];
preg_match_all('~((\w+):\s*((\w+):\s*)?(.*?goto\s*\w+;))(\s*goto\s*\w+;)?~msi', $str, $matches, PREG_SET_ORDER);
foreach($matches as $item) {
if (isset($item[4]) && $item[4] != '') {
$labels[$item[4]] = $item[5];
}
$labels[$item[2]] = $item[5];
$res = str_replace($item[1], '', $res);
}
while(preg_match('~goto\s*(\w+);~msi', $res, $matches) && isset($labels[$matches[1]])) {
$res = str_replace($matches[0], PHP_EOL . $labels[$matches[1]] . PHP_EOL, $res);
}
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200527_1($str)
{
preg_match('~error_reporting\(0\);define\(\'\w+\',\s*__FILE__\);define\(\'\w+\',\s*fopen\(__FILE__,\s*\'r\'\)\);fseek\(\w+,\s*__COMPILER_HALT_OFFSET__\);((\$\w+="\\\\x[0-9a-f]+";)+(\$\w+="[^"]+";)+eval\("\?>"\.(\$\w+\()+"([^"]+)"\)+;)+(?:/\*\w+\*/)?__halt_compiler\(\);([\w#|>^%\[\.\]\\\\/=]+)~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$encoded = $matches[6];
$res = preg_replace_callback('~(\$\w+="\\\\x[0-9a-f]+";)+(\$\w+="[^"]+";)+eval\("\?>"\.(\$\w+\()+"([^"]+)"\)+;~msi', function ($m) use ($str) {
$layer1 = hex2bin(str_rot13(gzinflate(str_rot13(base64_decode($m[4])))));
if (preg_match('~(\$\w+="[^"]+";)+eval\(\$\w\.(\$\w+\()+"([^"]+)"\)+;~msi', $layer1, $matches)) {
$temp = "?>" . hex2bin(str_rot13(gzinflate(str_rot13(base64_decode($matches[3])))));
while (preg_match('~(\$\w+)=strrev\(\1\);(\1=\s*str_replace\([\'"]([^"\']+)[\'"],"[^"]+",\1\);)+@?eval\("\?\>"\.\$\w+\(\1\)+;~msi', $temp, $matches)) {
if (preg_match('~\\' . $matches[1] . '="([^"]+)";~msi', $layer1, $matches1)) {
$code = $matches1[1];
$code = strrev($code);
if (preg_match_all('~str_replace\([\'"]([^"\']+)[\'"],"([^"]+)"~msi', $temp, $m, PREG_SET_ORDER)) {
foreach($m as $item) {
$code = str_replace($item[1], $item[2], $code);
}
$temp = base64_decode($code);
}
}
}
return $temp;
}
}, $res);
if (preg_match_all('~str_replace\([\'"]([^"\']+)[\'"],[\'"]([^"\']+)[\'"]~msi', $res, $m, PREG_SET_ORDER)) {
foreach($m as $item) {
$encoded = str_replace($item[1], $item[2], $encoded);
}
$res = base64_decode($encoded);
}
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200602_1($str)
{
preg_match('~(\$\w+)=strrev\("[base64_decode]+"\)\.str_replace\(\'(\w+)\',\'\',\'\w+\'\);\s*eval\(\1\((\$\w+)\)\);~msi', $str, $matches);
$find = $matches[0];
$res = 'eval(base64_decode(' . $matches[3] . '));';
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200526_1($str)
{
preg_match('~(\$\w+)=strrev\("[base64_decode"\.]+\);eval\(\1\(\'([^\']+)\'\)\);~msi', $str, $matches);
$find = $matches[0];
$res = base64_decode($matches[2]);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200522_1($str)
{
preg_match('~function\s*(\w+)\((\$\w+)\)\{\2=substr\(\2,\(int\)\(hex2bin\(\'([0-9a-f]+)\'\)\)\);\2=substr\(\2,\(int\)\(hex2bin\(\'([0-9a-f]+)\'\)\),\(int\)\(hex2bin\(\'([0-9a-f]+)\'\)\)\);return\s*\2;\}(\$\w+)=\'[^\']+\';(\$\w+)=\'base64_decode\';function\s*\w+\((\$\w+)\)\{global\s*\6;global\s*\7;return\s*strrev\(gzinflate\(\7\(\1\(\8\)\)\)\);\}([^\']+)\'\)+~msi', $str, $matches);
$find = $matches[0];
$res = strrev(gzinflate(base64_decode(substr($matches[9], (int)hex2bin($matches[3]), (int)hex2bin($matches[5])))));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200507_5($str)
{
preg_match('~assert\("[eval"\.]+\([base64_decode\."]+\(\'([^\']+)\'\)\)"\);~msi', $str, $matches);
$find = $matches[0];
$res = base64_decode($matches[1]);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200507_4($str)
{
preg_match('~(?:error_reporting\(0\);\s*ini_set\("max_execution_time",0\);\s*(?:/\*.*?\*/)?\s*)?(\$\w+)=\s*\[(("."=>".",?\s*)+)];\s*(\$\w+)=str_split\("([^"]+)"\);\s*(?:\$\w+="";)?\s*foreach\(\4\s*as\s*(\$\w+)\)\s*{\s*foreach\(\s*\1\s*as\s*(\$\w+)=>(\$\w+)\)\s*{\s*if\(\6==\(string\)\8\)\s*\{\s*\$\w+\.=\7;\s*break;\s*}\s*}\s*}~msi', $str, $matches);
$find = $matches[0];
$ar = $matches[2];
$ar = explode(",\n", $ar);
$array = [];
foreach ($ar as $v) {
$array[substr(trim($v),1,1)] = substr(trim($v), -2, 1);
}
unset($ar);
$res = '';
$split = str_split($matches[5]);
foreach ($split as $x) {
foreach ($array as $main => $val) {
if ($x == (string)$val) {
$res .= $main;
break;
}
}
}
$res = gzinflate(base64_decode($res));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200513_1($str)
{
preg_match('~parse_str\(\'([^\']+)\',(\$\w+)\);(\2\[\d+\]\()+\'[^\']+\'\),array\(\),array\(\'[^\']+\'\.(\2\[\d+\]\()+\'([^\']+)\'\)+\.\'//\'\)+;~msi', $str, $matches);
$find = $matches[0];
$res = gzuncompress(base64_decode(strrev($matches[5])));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200507_3($str)
{
preg_match('~@error_reporting\(0\);\s*@ini_set\(\'error_log\',NULL\);\s*@ini_set\(\'log_errors\',0\);\s*@ini_set\(\'output_buffering\',\s*0\);\s*@ini_set\(\'display_errors\',\s*0\);
s*\$\w+="(An0n_3xPloiTeR)";\$UeXploiT="([^"]+)";\$\1="([^"]+)";exit;~msi', $str, $matches);
$find = $matches[0];
$decode = htmlspecialchars_decode(gzinflate(base64_decode($matches[2])));
$res = str_replace('$An0n_3xPloiTeR', "'" . $matches[3] . "'", $decode);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200507_2($str)
{
preg_match('~@error_reporting\(0\);\s*@ini_set\(\'error_log\',NULL\);\s*@ini_set\(\'log_errors\',0\);\s*@ini_set\(\'display_errors\',\s*0\);\s*@(\$\w+)="[create_function"\.]+;\s*(\$\w+)=\1\("([^"]+)","[eval\."]+\(\'\?>\'\.[base64_decode"\.]+\(\3\)\);"\);\s*\2\("([^"]+)"\);exit;~msi', $str, $matches);
$find = $matches[0];
$res = base64_decode($matches[4]);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200507_1($str)
{
preg_match('~(\$\w+)=base64_decode\(\'([^\']+)\'\);\s*eval\(\1\);~mis', $str, $matches);
$find = $matches[0];
$res = base64_decode($matches[2]);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200504_1($str)
{
preg_match('~(\$\w+)\s*=\s*\("\?>"\.gzuncompress\(base64_decode\("([^"]+)"\)\)\);\s*@?eval\(\1\);~msi', $str, $matches);
$find = $matches[0];
$res = ' ?>' . gzuncompress(base64_decode($matches[2]));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateSmartToolsShop($str)
{
preg_match('~(\$\w+)=\'([^\']+)\';(\$\w+)=str_rot13\(gzinflate\(str_rot13\(base64_decode\(\1\)\)\)\);eval\(\3\);~msi', $str, $matches);
$find = $matches[0];
$res = str_rot13(gzinflate(str_rot13(base64_decode($matches[2]))));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200421_1($str)
{
preg_match('~(?:\$\w+\s*=\s*\'\w+\';)?\s*(\$\w+)\s*=\s*urldecode\(\'[%0-9a-f]+\'\);(\s*(\$\w+)\s*=(\s*\1\{\d+\}\.?)+;)+\s*(\$\w+)\s*=\s*"[^"]+"\.\3\("([^"]+)"\);\s*eval\(\5\);~msi', $str, $matches);
$find = $matches[0];
$res = ' ?>' . base64_decode($matches[6]);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200414_1($str)
{
preg_match('~function\s*(\w+)\((\$\w+),\s*(\$\w+)\)\s*\{\s*\3\s*=\s*md5\(\3\);\s*\$\w+\s*=\s*\d+;\s*\2\s*=\s*base64_decode\(\2\);\s*\$\w+\s*=\s*strlen\(\2\);\s*\$\w+\s*=\s*strlen\(\3\);\s*\$\w+\s*=\s*\'\';\s*for\s*\(\$\w+\s*=\s\d+;\s*\$\w+\s*<\s*\$len;\s*\$\w+\+\+\)\s*\{\s*if\s*\(\$\w+\s*==\s*\$\w+\)\s*\{\s*\$\w+\s*=\s*\d+;\s*}\s*\$\w+\s*\.=\s*substr\(\3,\s*\$\w+,\s*\d+\);\s*\$\w+\+\+;\s*\}\s*\$\w+\s*=\s*\'\';\s*for\s*\(\$\w+\s*=\s*\d+;\s*\$\w+\s*<\s*\$\w+;\s*\$\w+\+\+\)\s*{\s*if\s*\(ord\(substr\(\2,\s*\$\w+,\s*\d+\)\)\s*<\s*ord\(substr\(\$\w+,\s*\$\w+,\s*\d+\)\)\)\s*\{\s*\$\w+\s*\.=\s*chr\(\(ord\(substr\(\2,\s*\$\w+,\s*\d+\)\)\s*\+\s*\d+\)\s*-\s*ord\(substr\(\$\w+,\s*\$\w+,\s*\d+\)\)\);\s*}\s*else\s*{\s*\$\w+\s*\.=\s*chr\(ord\(substr\(\2,\s*\$\w+,\s*\d+\)\)\s*-\s*ord\(substr\(\$\w+,\s*\$\w+,\s*\d+\)\)\);\s*}\s*}\s*return\s*\$\w+;\s*\}\s*\2\s*=\s*"([^"]+)";\s*\3\s*=\s*"([^"]+)";\s*(\$\w+)\s*=\s*\1\(\2,\s*\3\);\s*eval\(\6\);~msi', $str, $matches);
$find = $matches[0];
$data = $matches[4];
$key = $matches[5];
$res = Helpers::obf20200414_1_decrypt($data, $key);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200402_2($str)
{
preg_match('~(?:\$\w+\s*=\s*"[^"]+";\s*)?function\s(\w+)\((\$\w+),\s*(\$\w+),\s*(\$\w+)\){\s*return\s*([\'\.]*(\2|\3|\4)[\'\.]*)+;\s*}\s*(?:\$\w+\s*=\s*"[^"]+";)?(\s*\$\w+\s*=\s*\1\((((\'\')|(\$\w+)|(\$\w+[\[\{]\d+[\]\}](\.\'\')?)|(\$\w+[\[\{]\d+[\]\}]\.\$\w+[\[\{]\d+[\]\}]))\s*,?\s*)+\);\s*)+\s*\$\w+\s*=\s*\1[^"]+"\'([^\']+)\'".+?array\(\'\',\'}\'.\$\w+\.\'//\'\)\);~msi', $str, $matches);
$find = $matches[0];
$code = $matches[15];
$code = preg_replace_callback('~\s*"\s*\.((?:min|max|round)?\(\s*\d+[\.\,\|\s\|+\|\-\|\*\|\/]([\d\s\.\,\+\-\*\/]+)?\))\s*\.\s*"~msi', function($m) {
return substr(Helpers::calc($m[1]), 1, -1);
}, $code);
$res = gzinflate(base64_decode($code)) ?:base64_decode($code);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateObf_20200402_1($str)
{
preg_match('~\$\w+\s*=(\s*(\d+)\+)+\d+;(\$\w+="[^"]+";)+(\$\w+)\s*=\s*\w+\(\'[^\']+\',\s*\$\w+,\s*\'[^\']+\'\);.+\4\("[^"]+"\);\$\w+\s*=\s*\4;(\$\w+="[^"]+";)+.+\$\w+\(\$\w+,\$\w+\("",\s*\$\w+\(\$\w+\(\$\w+\(\$\w+\(\$\w+,\s*"(\d+)"\)+,\$\w+\);.+function \w+\((\$\w+),\s*\$\w+,\s(\$\w+)\)\s{\8\s=\s\8\s\.\s\8;.+return \7;}~msi', $str, $matches);
$find = $matches[0];
$res = gzinflate(hex2bin(pack('H*',$matches[6])));
$res = preg_replace('~//.+$~m', '', $res);
preg_match('~\$\w+\(\$\w+,\$\w+\("",\s*\$\w+\(\$\w+\(\$\w+\(\$\w+\(\$\w+,\s*"(\d+)"\)+,\$\w+\);.+function \w+\((\$\w+),\s*\$\w+,\s(\$\w+)\)\s{\3\s=\s\3\s\.\s\3;.+return \2;}~msi', $res, $matches);
$res = gzinflate(hex2bin(pack('H*',$matches[1])));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateOELove($str)
{
preg_match('~<\?php\s*defined\(\'[^\']+\'\)\s*\|\|\s*define\(\'[^\']+\',__FILE__\);(global\s*\$[^;]+;)+\s*(if\(!function_exists\(\'([^\']+)\'\)\){\s*function\s*[^\)]+\(\$[^,]+,\$[^=]+=\'\'\){\s*if\(empty\(\$[^\)]+\)\)\s*return\s*\'\';\s*\$[^=]+=base64_decode\(\$[^\)]+\);\s*if\(\$[^=]+==\'\'\)\s*return\s*\~\$[^;]+;\s*if\(\$[^=]+==\'-1\'\)\s*@[^\(]+\(\);\s*\$[^=]+=\$GLOBALS\[\'[^\']+\'\]\[\'[^\']+\'\]\(\$[^\)]+\);\s*\$[^=]+=\$GLOBALS\[\'[^\']+\'\]\[\'[^\']+\'\]\(\$[^,]+,\$[^,]+,\$[^\)]+\);\s*return\s*\$[^^]+\^\$[^;]+;\s*}}\s*)+(\$[^\[]+\["[^"]+"]=[^\(]+\(\'[^\']+\',\'[^\']*\'\);\s*)+(\$[^\[]+\[\'[^\']+\'\]=\$GLOBALS\[\'[^\']+\'\]\[\'[^\']+\'\]\([^\)]*\)+;\s*)+return\(eval\(\$[^\[]+\[\'[^\']+\'\]\)+;\s*\?>\s*#!/usr/bin/php\s*-q\s*((\s*[^\s]+)+)~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$code = $matches[6];
$res = iconv('UTF-8', 'ASCII//IGNORE', $res);
preg_match('~\$GLOBALS\[\'[^\']+\'\]\[\'[^\']+\'\]\(\'([\da-f]{32})\'\);~msi', $res, $hash);
$hash = strrev($hash[1]);
preg_match_all('~\$GLOBALS\[\'[^\']+\'\]\[\'[^\']+\'\]\(\'([\d]{10})\'\)~msi', $res, $substr_offsets);
$substr_offsets = $substr_offsets[1];
$substr_offsets = array_map('strrev', $substr_offsets);
$substr_offsets = array_map('intval', $substr_offsets);
preg_match_all('~if\s*\(\!function_exists\(\'([^\']+)\'\)~msi', $res, $decoders);
$decoders = $decoders[1];
$var_array = [];
preg_match_all('~\$([^\[]{3,20})\["([^"]+)"\]=(?:' . $decoders[0] . '|' . $decoders[1] . ')\(\'([^\']*)\',\'([^\']*)\'\);~msi', $res, $vars, PREG_SET_ORDER);
$var_name = $vars[0][1];
foreach ($vars as $var) {
$var_array[$var[2]] = Helpers::OELoveDecoder($var[3], $var[4]);
$res = str_replace($var[0], '', $res);
}
$layer1 = substr($code, 0, $substr_offsets[3] + 96);
$layer1_dec = iconv('UTF-8', 'ASCII//IGNORE', gzuncompress(base64_decode($layer1)));
$code = str_replace($layer1, $layer1_dec, $code);
preg_match_all('~\$([^\[]{3,20})\["([^"]+)"\]=(?:' . $decoders[0] . '|' . $decoders[1] . ')\(\'([^\']*)\',\'([^\']*)\'\);~msi', $code, $vars, PREG_SET_ORDER);
foreach ($vars as $var) {
$var_array[$var[2]] = Helpers::OELoveDecoder($var[3], $var[4]);
$code = str_replace($var[0], '', $code);
}
$layer2_start = strpos($code, '?>') + 2;
$layer2 = substr($code, $layer2_start + $substr_offsets[2]);
$layer2_dec = iconv('UTF-8', 'ASCII//IGNORE', gzuncompress(base64_decode(str_rot13($layer2))));
$res = $layer2_dec;
foreach($var_array as $k => $v) {
$res = str_replace('$GLOBALS[\'' . $var_name . '\'][\'' . $k . '\'](', $v . '(', $res);
$res = str_replace('$GLOBALS[\'' . $var_name . '\'][\'' . $k . '\']', '\'' . $v . '\'', $res);
}
$res = preg_replace_callback('~(?:' . $decoders[0] . '|' . $decoders[1] . ')\(\'([^\']*)\',\'([^\']*)\'\)~msi', function ($m) {
return '\'' . Helpers::OELoveDecoder($m[1], $m[2]) . '\'';
}, $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateEvalConcatVars($str)
{
preg_match('~((\$\w+="";\$\w+\s*\.=\s*"[^;]+;\s*)+)(?:="";)?(eval\((\s*(\$\w+)\s*\.)+\s*"([^"]+)(?:"\);)+)~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$parts = [];
preg_match_all('~(\$\w+)="";\1\s*\.=\s*"([^"]+)"~msi', $matches[1], $matches1, PREG_SET_ORDER);
foreach($matches1 as $match) {
$parts[$match[1]] = stripcslashes(stripcslashes($match[2]));
}
$res = stripcslashes(stripcslashes($matches[3]));
foreach($parts as $k => $v) {
$res = str_replace($k, "'" . $v . "'", $res);
}
$res = preg_replace_callback('/[\'"]\s*?\.+\s*?[\'"]/smi', function($m) {
return '';
}, $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateVarFuncsEval($str)
{
preg_match('~((\$\w+)\s*=\s*)(base64_decode\s*\(+|gzinflate\s*\(+|strrev\s*\(+|str_rot13\s*\(+|gzuncompress\s*\(+|convert_uudecode\s*\(+|urldecode\s*\(+|rawurldecode\s*\(+|htmlspecialchars_decode\s*\(+)+"([^"]+)"\)+(;\s*@?eval\(([\'"?>.\s]+)?\2\);)~', $str, $matches);
$find = $matches[0];
$res = $str;
$res = str_replace($matches[5], ');', $res);
$res = str_replace($matches[1], 'eval(', $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateComments($str)
{
preg_match('~\$\w+=basename/\*\w+\*/\(/\*\w+\*/trim/\*\w+\*/\(.+?(\$\w+)=.+\1.+?;~msi', $str, $matches);
$find = $matches[0];
$res = preg_replace('~/\*\w+\*/~msi', '', $str);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateStrrevVarEval($str)
{
preg_match('~(\$\w+=strrev\("[^"]+"\);)+eval\((\$\w+\()+"([^"]+)"\)+;~mis', $str, $matches);
$find = $matches[0];
$res = gzinflate(base64_decode($matches[3]));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateAanKFM($str)
{
preg_match('~(\$\w+=(\w+)\(\'\d+\'\);\s*)+\$\w+=new\s\$\w+\(\2\(\'(\d+)\'\)+;error_reporting\(0\);eval\(\$\w+\(\$\w+->\$\w+\("([^"]+)"\)+;.+?function \2.+?return\s\$\w+;\s}~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$key = Helpers::aanKFMDigitsDecode($matches[3]);
$res = Helpers::Xtea_decrypt($matches[4], $key);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateEvalChars($str)
{
preg_match('~(?:\$[0O]+\[[\'"](\w+)[\'"]\]\.?="[\\\\\w]+";)+(?:\$[0O]+\[[\'"]\w+[\'"]\]\.?=\$[0O]+\[[\'"]\w+[\'"]\]\([\'"][\d\(]+[\'"](,__FILE__)?\);)+@eval\((?:\$[0O]+\[[\'"]\w+[\'"]\]\()+"([^"]+)"\)+;~mis', $str, $matches);
$find = $matches[0];
$res = $str;
while(preg_match_all('~(?:@eval((?:\(\$[0O]+\[[\'"]\w+[\'"]\])+)\("([^"]+)"\)+;)|("\)\?\$[O0]+)~msi', $res, $matches, PREG_SET_ORDER)) {
$match = $matches[0];
if (isset($matches[1])) $match = $matches[1];
$count = ($match[1] !== '') ? substr_count($match[1], '(') : 0;
if ($count == 2) {
$res = gzinflate(base64_decode($match[2]));
} else if ($count == 3) {
$res = gzinflate(base64_decode(str_rot13($match[2])));
}
if (isset($match[3]) && ($match[3] !== '')) {
$res = preg_replace_callback('~(\$[0O]+\["\w+"\]\()+"([^"]+)"\)+;?~msi', function($m) {
return gzinflate(base64_decode(str_rot13($m[2])));
}, $res);
}
}
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateGlobalsBase64($str)
{
preg_match('~<\?php\s+((\$GLOBALS\[\s*[\'"]\w+[\'"]\s*\])\s*=\s*base64_decode\("([^"]*)"\);)+\s*\?>(<\?php\s.+\2.+exit;\s}\sfunction\s\w+\(\)\s{\sreturn\sarray\(\s\'favicon\'\s=>\s\'[^\']+\',\s+\'sprites\'\s=>\s\'[^\']+\',\s\);\s})~msi', $str, $matches);
$find = $matches[0];
$vars = [];
preg_match_all('~(\$GLOBALS\[\s*[\'"]\w+[\'"]\s*\])\s*=\s*base64_decode\("([^"]*)"\);~msi', $matches[0], $matches1, PREG_SET_ORDER);
foreach($matches1 as $match) {
$vars[$match[1]] = base64_decode($match[2]);
}
$code = $matches[4];
foreach ($vars as $var => $value) {
$code = str_replace($var . '(', $value . '(', $code);
$code = str_replace($var, "'" . $value . "'", $code);
}
$res = $code;
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateEvalReturn($str)
{
preg_match('~(\$\w+)=base64_decode\("([^"]+)"\);\s*eval\("return\s*eval\(\\\\"\1\\\\"\);"\)~msi', $str, $matches);
$find = $matches[0];
$res = stripcslashes(base64_decode($matches[2]));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateQibosoft($str)
{
preg_match('~\$\w+=__FILE__;\$\w+=fopen\(\$\w+,\'rb\'\);fread\(\$\w+,(\d+)\);\$\w+=explode\("\\\\t",base64_decode\(fread\(\$\w+,(\d+)\)+;\$\w+=\$\w+\[[\d+]\];[\$l1=\d{}\.;\(\)\[\]]+eval\(\$\w+\(\'([^\']+)\'\)+;\s*return\s*;\?>[\w=\+]+~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$hangs = 15;
$obfPHP = explode('?>', $str);
$obfPHP = $obfPHP[1];
preg_match('~eval\(\$\w+\(\'([^\']+)\'\)+;~msi', $res, $temp);
$res = str_replace($temp[0], base64_decode($temp[1]), $res);
$offset = $matches[2];
while (preg_match('~\$\w+\(\$\w+,(\d+)\);\s*eval\(\$\w+\(\$\w+\(\$\w+,(\d+)\)+;~msi', $res, $temp2) && $hangs--) {
$offset += $temp2[1];
$decode_loop = base64_decode(substr($obfPHP, $offset, $temp2[2]));
$offset += $temp2[2];
if (preg_match('~eval\(\$\w+\(\'([^\']+)\'\)+;~msi', $decode_loop, $temp)) {
$res = str_replace($temp2[0], base64_decode($temp[1]), $res);
} else {
$res = $decode_loop;
}
}
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateUd64($str)
{
preg_match('~(\$ud64_c[o0]m="[\\\\0-9a-z\."]+;)+\$\w+=(\$ud64_c[o0]m\()+"([^"]+)"\)+;@eval\(\$ud64_c[o0]m\(\'[^\']+\'\)+;~msi', $str, $matches);
$find = $matches[0];
$res = gzinflate(convert_uudecode(base64_decode(gzinflate(base64_decode(str_rot13($matches[3]))))));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateCustom1($str)
{
preg_match('~\$\w+="([^"]+)";\$l+=0;\$l+=\'base64_decode\';\$l+=0;eval\(.+?;eval\(\$l+\);return;~msi', $str, $matches);
$find = $matches[0];
$res = Helpers::someDecoder3($matches[1]);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateCustom2($str)
{
preg_match('~(\$\w+)\s*=\s*"(\w{32})";\s*(\$\w+)\s*=\s*array\s*\(\);\s*(\3\[\d+\]\s*=\s*"[^"]+";\s*)+\s*(\$\w+)\s*=\s*"base64_decode";\s*\$\w+\s*=\s*(\w+)\s*\(\3,\1\);function\s*\6\(\s*.{200,500}return\s*\$\w+;\s*}\s*eval\s*\(\5\s*\(\$\w+\)\);~msi', $str, $matches);
$find = $matches[0];
$key = $matches[2];
$var = $matches[3];
preg_match_all('~\\' . $var . '\[\d+\]\s*=\s*"([^"]+)";~msi', $str, $matches);
$res = base64_decode(Helpers::someDecoder4($matches[1], $key));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateLockIt2($str)
{
preg_match('~\$_F=__FILE__;\$_X=["\']([^\'"]+)[\'"];\s*\$_\w+=base64_decode\(\$_X\);\$_X=strtr\(\$_X,\'([^\']+)\',\'([^\']+)\'\);\$_R=@?(?:(str_replace)|(ereg_replace)|(preg_replace))\(\'\~?__FILE__\~?\',"\'".\$_F."\'",\$_X\);eval\(\$_R\);\$_R=0;\$_X=0;~msi', $str, $matches);
$find = $matches[0];
if(strpos($str, '$_X="') !== false && strpos($matches[1], '\\x') !== false) {
$matches[1] = stripcslashes($matches[1]);
}
$res = base64_decode($matches[1]);
$res = strtr($res, $matches[2], $matches[3]);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateFuncs($str)
{
preg_match('~(function\s*(\w+)\((\$\w+)\){\s*return\s*(base64_decode|gzinflate|eval)\(\$\w+(,\d+)?\);}\s*)+(\$\w+)="([^"]+)";(\w+\()+\6\)+~msi', $str, $matches);
$find = $matches[0];
$funcs = [];
$payload = $matches[7];
$var = $matches[6];
$res = $str;
$res = preg_replace_callback('~function\s*(\w+)\((\$\w+)\){\s*return\s*(\w+)\(\2(,\d+)?\);}\s*~msi', function($matches2) use (&$funcs){
$funcs[$matches2[1]] = $matches2[3];
return '';
}, $res);
foreach ($funcs as $k => $v) {
$res = str_replace($k . '(', $v . '(', $res);
}
$res = str_replace($var . '="' . $payload . '";', '', $res);
$res = str_replace($var, '"' . $payload . '"', $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateSubstr($str)
{
preg_match('~\$\w+=0;(\$GLOBALS\[\'\w+\'\])\s*=\s*\'([^\']+)\';\s*(\$\w+)=pack\(\'H\*\',substr\(\1,\s*([-\d]+)\)\);if\s*\(!function_exists\(\'(\w+)\'\)\){function\s*\5\(\$\w+,\s*\$\w+\){\$\w+=\1;\s*\$d=pack\(\'H\*\',substr\(\1,\s*\4\)\);\s*return\s*\$\w+\(substr\(\$\w+,\s*\$\w+,\s*\$\w+\)\);}};eval\(\3\(\'([^\']+)\'\)\);~msi', $str, $matches);
$find = $matches[0];
$substr_array = $matches[2];
$offset = intval($matches[4]);
$func = $matches[5];
$eval = pack('H*',substr($substr_array, $offset));
$res = Helpers::isSafeFunc($eval) ? @$eval($matches[6]) : $matches[6];
$res = preg_replace_callback('~' . $func . '\(([-\d]+),\s*([-\d]+)\)~mis', function ($matches) use ($eval, $substr_array) {
$res = Helpers::isSafeFunc($eval) ? @$eval(substr($substr_array, $matches[1], $matches[2])) : $matches[0];
return '\'' . $res . '\'';
}, $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscatePHPJiaMi($str)
{
preg_match('~error_reporting\(0\);ini_set\("display_errors",\s*0\);if\(!defined\(\'(\w+)\'\)\){define\(\'\1\',__FILE__\);if\(!function_exists\("([^"]+)"\)\){function [^(]+\([^\)]+\).+?eval\(""\);.+?;eval\(\$[^\)]+\)\);[^\)]+\)+;return\s*\$[^;]+;\s*\?>([^;]+);~msi', $str, $matches);
$find = $matches[0];
$bin = bin2hex($str);
preg_match('~6257513127293b24[a-z0-9]{2,30}3d24[a-z0-9]{2,30}2827([a-z0-9]{2,30})27293b~', $bin, $hash);
preg_match('~2827([a-z0-9]{2})27293a24~', $bin, $rand);
$hash = hex2bin($hash[1]);
$rand = hex2bin($rand[1]);
$res = Helpers::PHPJiaMi_decoder(substr($matches[3], 0, -46), $hash, $rand);
$res = str_rot13(@gzuncompress($res) ? @gzuncompress($res) : $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateEvalIReplace($str)
{
preg_match('~(\$\w+)=strrev\(str_ireplace\("[^"]+","","[^"]+"\)\);(\$\w+)="([^"]+)";eval\(\1\(\2\)+;}~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$res = base64_decode($matches[3]);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateErrorHandler($str)
{
preg_match('~(\$\w+)="[^"]+";\s*(\$\w+)=str_ireplace\("[^"]+","",\1\);(\$\w+)\s*=\s*"([^"]+)";\s*function\s*(\w+)\((\$\w+,?)+\){\s*(\$\w+)=\s*create_function\(\'\',\$\w+\);\s*array_map\(\7,array\(\'\'\)+;\s*}\s*set_error_handler\(\'\5\'\);(\$\w+)=\2\(\3\);user_error\(\8,E_USER_ERROR\);\s*if\s*.+?}~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$res = base64_decode($matches[4]);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateStrtoupper($str)
{
preg_match('~(\$\w+)="([^"]+)";\s*(\$\w+)=strtoupper\s*\((\1\[\d+\]\s*\.?\s*)+\)\s*;\s*if\(\s*isset\s*\(\${\s*\3\s*}\[\d*\s*\'\w+\'\s*\]\s*\)\s*\)\s*{eval\(\${\3\s*}\[\'\w+\']\s*\)\s*;}~smi', $str, $matches);
$find = $matches[0];
$res = $str;
$alph = $matches[2];
$var = $matches[1];
$res = str_replace("{$var}=\"{$alph}\";", '', $res);
for ($i = 0, $iMax = strlen($alph); $i < $iMax; $i++) {
$res = str_replace($var . '[' . $i . '].', "'" . $alph[$i] . "'", $res);
$res = str_replace($var . '[' . $i . ']', "'" . $alph[$i] . "'", $res);
}
$res = str_replace("''", '', $res);
$res = str_replace("' . '", '', $res);
$res = str_replace("' '", '', $res);
preg_match('~(\$\w+)\s*=\s*strtoupper\s*\(\s*\'(\w+)\'\s*\)\s*;~msi', $res, $matches);
$matches[2] = strtoupper($matches[2]);
$res = str_replace($matches[0], '', $res);
$res = preg_replace_callback('~\${\s*\\'. $matches[1] .'\s*}~msi', function ($params) use ($matches) {
return '$' . $matches[2];
}, $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateEval2($str)
{
preg_match('~(\$\w+)\s*=\s*"((?:[^"]|(?<=\\\\)")*)";(\$\w+)\s*=\s*(\1\[\d+\]\.?)+;(\$\w+)\s*=\s*[^;]+;(\$\w+)\s*=\s*"[^"]+";\$\w+\s*=\s*\5\."([^"]+)"\.\6;\3\((\1\[\d+\]\.?)+,\s*\$\w+\s*,"\d+"\);~smi', $str, $matches);
$res = $str;
$find = $matches[0];
$alph = $matches[2];
$var = $matches[1];
for ($i = 0, $iMax = strlen($alph); $i < $iMax; $i++) {
$res = str_replace($var . '[' . $i . '].', "'" . $alph[$i] . "'", $res);
$res = str_replace($var . '[' . $i . ']', "'" . $alph[$i] . "'", $res);
}
$res = str_replace("''", '', $res);
$res = gzinflate(base64_decode(substr($matches[7], 1, -1)));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateEvalEregReplace($str)
{
preg_match('~(\$\w+)\s*=\s*base64_decode\("([^"]+)"\);(\1\s*=\s*ereg_replace\("([^"]+)","([^"]+)",\1\);)+\1=base64_decode\(\1\);eval\(\1\);~msi', $str, $matches);
$find = $matches[0];
$res = base64_decode($matches[2]);
preg_match_all('~(\$\w+)\s*=\s*ereg_replace\("([^"]+)","([^"]+)",\1\);~smi', $str, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$res = preg_replace('/' . $match[2] . '/', $match[3], $res);
}
$res = base64_decode($res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateStrreplace($str)
{
preg_match('~(\$\w+\s*=\s*"[^"]+";\s*)+(\$\w+\s*=\s*\$?\w+\("\w+"\s*,\s*""\s*,\s*"\w+"\);\s*)+\$\w+\s*=\s*\$\w+\("",\s*\$\w+\(\$\w+\("\w+",\s*"",(\s*\$\w+\.?)+\)+;\$\w+\(\);~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$str_replace = '';
$base64_decode = '';
$layer = '';
preg_match_all('~(\$\w+)\s*=\s*\"([^"]+)\"\s*;~msi', $str, $matches, PREG_SET_ORDER);
foreach ($matches as $i => $match) {
$vars[$match[1]] = $match[2];
}
$res = preg_replace_callback('~(\$\w+)\s*=\s*str_replace\("(\w+)",\s*"",\s*"(\w+)"\)~msi',
function ($matches) use (&$vars, &$str_replace) {
$vars[$matches[1]] = str_replace($matches[2], "", $matches[3]);
if ($vars[$matches[1]] == 'str_replace') {
$str_replace = $matches[1];
}
$tmp = $matches[1] . ' = "' . $vars[$matches[1]] . '"';
return $tmp;
}, $res);
$res = preg_replace_callback('~(\$\w+)\s*=\s*\\' . $str_replace . '\("(\w+)",\s*"",\s*"(\w+)"\)~msi',
function ($matches) use (&$vars, &$base64_decode) {
$vars[$matches[1]] = str_replace($matches[2], "", $matches[3]);
if ($vars[$matches[1]] == 'base64_decode') {
$base64_decode = $matches[1];
}
$tmp = $matches[1] . ' = "' . $vars[$matches[1]] . '"';
return $tmp;
}, $res);
$res = preg_replace_callback('~\\' . $base64_decode . '\(\\' . $str_replace . '\("(\w+)",\s*"",\s*([\$\w\.]+)\)~msi',
function ($matches) use (&$vars, &$layer) {
$tmp = explode('.', $matches[2]);
foreach ($tmp as &$item) {
$item = $vars[$item];
}
$tmp = implode('', $tmp);
$layer = base64_decode(str_replace($matches[1], "", $tmp));
return $matches[0];
}, $res);
$res = $layer;
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateSeolyzer($str)
{
preg_match('~\$\w+=\'printf\';(\s*\$\w+\s*=\s*\'[^\']+\'\s*;)+\s*(\$\w+\s*=\s*\$\w+\([^\)]+\);\s*)+(\$\w+\s*=\s*\'[^\']+\';\s*)?(\s*(\$\w+\s*=\s*)?\$\w+\([^)]*\)+;\s*)+(echo\s*\$\w+;)?~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$vars = array();
$base64_decode = '';
$layer = '';
$gzuncompress = '';
preg_match_all('~(\$\w+)\s*=\s*\'([^\']+)\'\s*;~msi', $str, $matches, PREG_SET_ORDER);
foreach ($matches as $i => $match) {
$vars[$match[1]] = $match[2];
if ($match[2] == 'base64_decode') {
$base64_decode = $match[1];
}
}
$res = preg_replace_callback('~\s*=\s*\\' . $base64_decode . '\((\$\w+)\)~msi', function ($matches) use (&$vars, &$gzuncompress, &$layer) {
if (isset($vars[$matches[1]])) {
$tmp = base64_decode($vars[$matches[1]]);
if ($tmp == 'gzuncompress') {
$gzuncompress = $matches[1];
}
$vars[$matches[1]] = $tmp;
$tmp = " = '{$tmp}'";
} else {
$tmp = $matches[1];
}
return $tmp;
}, $res);
if ($gzuncompress !== '') {
$res = preg_replace_callback('~\\' . $gzuncompress . '\(\s*\\' . $base64_decode . '\((\$\w+)\)~msi',
function ($matches) use (&$vars, $gzuncompress, &$layer) {
if (isset($vars[$matches[1]])) {
$tmp = gzuncompress(base64_decode($vars[$matches[1]]));
$layer = $matches[1];
$vars[$matches[1]] = $tmp;
$tmp = "'{$tmp}'";
} else {
$tmp = $matches[1];
}
return $tmp;
}, $res);
$res = $vars[$layer];
} else if (preg_match('~\$\w+\(\s*\\' . $base64_decode . '\((\$\w+)\)~msi', $res)) {
$res = preg_replace_callback('~\$\w+\(\s*\\' . $base64_decode . '\((\$\w+)\)~msi',
function ($matches) use (&$vars, &$layer) {
if (isset($vars[$matches[1]])) {
$tmp = base64_decode($vars[$matches[1]]);
$layer = $matches[1];
$vars[$matches[1]] = $tmp;
$tmp = "'{$tmp}'";
} else {
$tmp = $matches[1];
}
return $tmp;
}, $res);
$res = $vars[$layer];
}
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateCreateFunc($str)
{
preg_match('~(\$\w+)=[create_function".]+;\s*\1=\1\(\'(\$\w+)\',[\'.eval\("\?>".gzinflate\(base64_decode]+\2\)+;\'\);\s*\1\(\'([^\']+)\'\);~msi', $str, $matches);
$find = $matches[0];
$res = ' ?>' . gzinflate(base64_decode($matches[3]));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateCreateFuncConcat($str)
{
preg_match('~((\$\w+)\s*=\s*(([base64_decode\'\.\s]+)|([eval\'\.\s]+)|([create_function\'\.\s]+)|([stripslashes\'\.\s]+)|([gzinflate\'\.\s]+)|([strrev\'\.\s]+)|([str_rot13\'\.\s]+)|([gzuncompress\'\.\s]+)|([urldecode\'\.\s]+)([rawurldecode\'\.\s]+));\s*)+\$\w+\s*=\s*\$\w+\(\'\',(\s*\$\w+\s*\(\s*)+\'[^\']+\'\)+;\s*\$\w+\(\);~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$vars = array();
$res = preg_replace_callback('~(?|(\$\w+)\s*=\s*(([base64_decode\'\.\s]+)|([eval\'\.\s]+)|([create_function\'\.\s]+)|([stripslashes\'\.\s]+)|([gzinflate\'\.\s]+)|([strrev\'\.\s]+)|([str_rot13\'\.\s]+)|([gzuncompress\'\.\s]+)|([urldecode\'\.\s]+)([rawurldecode\'\.\s]+));)~', function($matches) use (&$vars) {
$tmp = str_replace("' . '", '', $matches[0]);
$tmp = str_replace("'.'", '', $tmp);
$value = str_replace("' . '", '', $matches[2]);
$value = str_replace("'.'", '', $value);
$vars[$matches[1]] = substr($value, 1, -1);
return $tmp;
}, $res);
foreach($vars as $key => $var) {
$res = str_replace($key, $var, $res);
$res = str_replace($var . " = '" . $var . "';", '', $res);
$res = str_replace($var . ' = "";', '', $res);
}
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateEvalWrapVar($str)
{
preg_match('~((\$\w+)\s*=\s*(([base64_decode"\'\.\s]+)|([eval"\'\.\s]+)|([create_function"\'\.\s]+)|([stripslashes"\'\.\s]+)|([gzinflate"\'\.\s]+)|([strrev"\'\.\s]+)|([str_rot13"\'\.\s]+)|([gzuncompress"\'\.\s]+)|([urldecode"\'\.\s]+)([rawurldecode"\'\.\s]+));\s*)+\s*@?eval\(\$[^)]+\)+;~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$vars = array();
$res = preg_replace_callback('~(?|(\$\w+)\s*=\s*(([base64_decode"\'\.\s]+)|([eval"\'\.\s]+)|([create_function"\'\.\s]+)|([stripslashes"\'\.\s]+)|([gzinflate"\'\.\s]+)|([strrev"\'\.\s]+)|([str_rot13"\'\.\s]+)|([gzuncompress"\'\.\s]+)|([urldecode"\'\.\s]+)([rawurldecode"\'\.\s]+));)~msi', function($matches) use (&$vars) {
$tmp = str_replace("' . '", '', $matches[0]);
$tmp = str_replace("'.'", '', $tmp);
$value = str_replace("' . '", '', $matches[2]);
$value = str_replace("'.'", '', $value);
$vars[$matches[1]] = substr($value, 1, -1);
return $tmp;
}, $res);
$temp = substr($res, strpos($res, '@eval'));
$temp1 = $temp;
foreach($vars as $key => $var) {
$temp = str_replace($key, $var, $temp);
}
$res = str_replace($temp1, $temp, $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateForEach($str)
{
preg_match('~(?(DEFINE)(?\'foreach\'(?:/\*\w+\*/)?\s*foreach\(\[[\d,]+\]\s*as\s*\$\w+\)\s*\{\s*\$\w+\s*\.=\s*\$\w+\[\$\w+\];\s*\}\s*(?:/\*\w+\*/)?\s*))(\$\w+)\s*=\s*"([^"]+)";\s*\$\w+\s*=\s*"";(?P>foreach)if\(isset\(\$_REQUEST\s*(?:/\*\w+\*/)?\["\$\w+"\]\)+\{\s*\$\w+\s*=\s*\$_REQUEST\s*(?:/\*\w+\*/)?\["\$\w+"\];(?:\s*\$\w+\s*=\s*"";\s*)+(?P>foreach)+\$\w+\s*=\s*\$\w+\([create_function\'\.]+\);\s*\$\w+\s*=\s*\$\w+\("",\s*\$\w+\(\$\w+\)\);\s*\$\w+\(\);\s*(?:exit\(\);)?\s*\}~mis', $str, $matches);
$find = $matches[0];
$alph = $matches[3];
$vars = array();
$res = $str;
preg_replace('~\s*/\*\w+\*/\s*~msi', '', $res);
$res = preg_replace_callback('~foreach\(\[([\d,]+)\]\s*as\s*\$\w+\)\s*\{\s*(\$\w+)\s*\.=\s*\$\w+\[\$\w+\];\s*\}~mis', function($matches) use ($alph, &$vars) {
$chars = explode(',', $matches[1]);
$value = '';
foreach ($chars as $char) {
$value .= $alph[$char];
}
$vars[$matches[2]] = $value;
return "{$matches[2]} = '{$value}';";
}, $res);
foreach($vars as $key => $var) {
$res = str_replace($key, $var, $res);
$res = str_replace($var . " = '" . $var . "';", '', $res);
$res = str_replace($var . ' = "";', '', $res);
}
preg_match('~(\$\w+)\s*=\s*strrev\([create_function\.\']+\);~ms', $res, $matches);
$res = str_replace($matches[0], '', $res);
$res = str_replace($matches[1], 'create_function', $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateSubst2($str)
{
preg_match('~(\$\w+)="([^"])+(.{0,70}\1.{0,400})+;\s*}~msi', $str, $matches);
$find = $matches[0];
$res = $str;
preg_match('~(\$\w+)="(.+?)";~msi', $str, $matches);
$alph = stripcslashes($matches[2]);
$var = $matches[1];
for ($i = 0, $iMax = strlen($alph); $i < $iMax; $i++) {
$res = str_replace($var . '[' . $i . '].', "'" . $alph[$i] . "'", $res);
$res = str_replace($var . '[' . $i . ']', "'" . $alph[$i] . "'", $res);
}
$res = str_replace("''", '', $res);
preg_match_all('~(\$GLOBALS\[\'\w{1,40}\'\])\s*=\s*\'(([^\'\\\\]++|\\\\.)*)\';~msi', $res, $matches, PREG_SET_ORDER);
foreach ($matches as $index => $var) {
$res = str_replace($var[1], $var[2], $res);
$res = str_replace($var[2] . " = '" . $var[2] . "';", '', $res);
}
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateAssert($str)
{
preg_match('~(\$\w+)\s*=(?:\s*(?:(?:["\'][a-z0-9][\'"])|(?:chr\s*\(\d+\))|(?:[\'"]\\\\x[0-9a-f]+[\'"]))\s*?\.?)+;\s*(\$\w+)\s*=(?:\s*(?:(?:["\'][a-z0-9][\'"])|(?:chr\s*\(\d+\))|(?:[\'"]\\\\x[0-9a-f]+[\'"]))\s*?\.?)+;\s*@?\1\s*\(@?\2\s*\([\'"]([^\'"]+)[\'"]\)+;~msi', $str, $matches);
$find = $matches[0];
$res = base64_decode($matches[3]);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateUrlDecode2($str)
{
preg_match('~(\$[\w{1,40}]+)=(urldecode|base64_decode)\(?[\'"]([\w+%=-]+)[\'"]\);(\s*\$\w+\.?=(\$\w+\{\d+\}\s*[\.;]?\s*)+)+((\$\w+=["\']([^\'"]+)[\'"];\s*eval\(\'\?>\'\.[\$\w\(\)\*,\s]+);|(eval\(\$\w+\([\'"]([^\'"]+)[\'"]\)+;))~msi', $str, $matches);
$find = $matches[0];
$res = $str;
if (isset($matches[10])) {
$res = base64_decode($matches[10]);
}
if (preg_match('~\$\w+=["\']([^\'"]+)[\'"];\s*eval\(\'\?>\'\.[\$\w\(\)\*,\s]+;~msi', $res, $matches)) {
$res = base64_decode(strtr(substr($matches[1], 52*2), substr($matches[1], 52, 52), substr($matches[1], 0, 52)));
}
if (preg_match('~function\s*(\w+)\(\$\w+\)[\w{\$=\s*();<+\[\]\-]+\}\s+return[\$\s\w;]+}eval\(\1\("([\w\/+=]+)?"\)\);~', $res, $match)) {
$res = gzinflate(base64_decode($match[2]));
for ($i=0; $i < strlen($res); $i++)
{
$res[$i] = chr(ord($res[$i])-1);
}
$res = str_replace($find, $res, $str);
return $res;
}
$res = str_replace($find, ' ?>' . $res, $str);
return $res;
}
private function deobfuscatePHPMyLicense($str)
{
preg_match('~\$\w+\s*=\s*base64_decode\s*\([\'"][^\'"]+[\'"]\);\s*if\s*\(!function_exists\s*\("rotencode"\)\).{0,1000}eval\s*\(\$\w+\s*\(base64_decode\s*\([\'"]([^"\']+)[\'"]\)+;~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$hang = 10;
while(preg_match('~eval\s*\(\$\w+\s*\(base64_decode\s*\([\'"]([^"\']+)[\'"]\)+;~msi', $res, $matches) && $hang--) {
$res = gzinflate(base64_decode($matches[1]));
}
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateEdoced_46esab($str)
{
preg_match('~(\$\w+)=[\'"]([^"\']+)[\'"];(\$\w+)=strrev\(\'edoced_46esab\'\);eval\(\3\([\'"]([^\'"]+)[\'"]\)+;~msi', $str, $matches);
$find = $matches[0];
$res = '';
$decoder = base64_decode($matches[4]);
preg_match('~(\$\w+)=base64_decode\(\$\w+\);\1=strtr\(\1,[\'"]([^\'"]+)[\'"],[\'"]([^\'"]+)[\'"]\);~msi', $decoder, $matches2);
$res = base64_decode($matches[2]);
$res = strtr($res, $matches2[2], $matches2[3]);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateEvalVarVar($str)
{
preg_match('~\$\{"GLOBALS"\}\[[\'"](\w+)[\'"]\]=["\'](\w+)[\'"];\$\{"GLOBALS"\}\[[\'"](\w+)[\'"]\]=["\']\2[\'"];(\${\$\{"GLOBALS"\}\[[\'"]\3[\'"]\]})=[\'"]([^\'"]+)[\'"];eval.{10,50}?(\$\{\$\{"GLOBALS"\}\[[\'"]\1[\'"]\]\})\)+;~msi', $str, $matches);
$find = $matches[0];
$res = str_replace($matches[4], '$' . $matches[2], $str);
$res = str_replace($matches[6], '$' . $matches[2], $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateEscapes($str)
{
preg_match('~\$\{"(.{1,20}?(\\\\x[0-9a-f]{2})+)+.?";@?eval\s*\(\s*([\'"?>.]+)?@?\s*(base64_decode\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|eval\s*\()+\(?\$\{\$\{"[^\)]+\)+;~msi', $str, $matches);
$find = $matches[0];
$res = stripcslashes($str);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateparenthesesString($str)
{
$hangs = 5;
$res = $str;
$find = '';
while (preg_match('~for\((\$\w+)=\d+,(\$\w+)=\'([^\$]+)\',(\$\w+)=\'\';@?ord\(\2\[\1\]\);\1\+\+\)\{if\(\1<\d+\)\{(\$\w+)\[\2\[\1\]\]=\1;\}else\{\$\w+\.\=@?chr\(\(\5\[\2\[\1\]\]<<\d+\)\+\(\5\[\2\[\+\+\1\]\]\)\);\}\}\s*.{0,500}eval\(\4\);(if\(isset\(\$_(GET|REQUEST|POST|COOKIE)\[[\'"][^\'"]+[\'"]\]\)\)\{[^}]+;\})?~msi', $res, $matches) && $hangs--) {
if($hangs == 4) {
$find = $matches[0];
}
$res = '';
$temp = array();
$matches[3] = stripcslashes($matches[3]);
for($i=0, $iMax = strlen($matches[3]); $i < $iMax; $i++)
{
if($i < 16) $temp[$matches[3][$i]] = $i;
else $res .= @chr(($temp[$matches[3][$i]]<<4) + ($temp[$matches[3][++$i]]));
}
}
if(!isset($matches[6])) {
//$xor_key = 'SjJVkE6rkRYj';
$xor_key = $res^"\n//adjust sy"; //\n//adjust system variables";
$res = $res ^ substr(str_repeat($xor_key, (strlen($res) / strlen($xor_key)) + 1), 0, strlen($res));
}
if(substr($res,0,12)=="\n//adjust sy") {
$res = str_replace($find, $res, $str);
return $res;
} else return $str;
}
private function deobfuscateEvalInject($str)
{
$res = $str;
preg_match('~(\$\w{1,40})\s*=\s*[\'"]([^\'"]*)[\'"]\s*;\s*(\$\w{1,40}\s*=\s*(strtolower|strtoupper)\s*\((\s*\1[\[\{]\s*\d+\s*[\]\}]\s*\.?\s*)+\);\s*)+\s*if\s*\(\s*isset\s*\(\s*\$\{\s*\$\w{1,40}\s*\}\s*\[\s*[\'"][^\'"]*[\'"]\s*\]\s*\)\s*\)\s*\{\s*eval\s*\(\s*\$\w{1,40}\s*\(\s*\$\s*\{\s*\$\w{1,40}\s*\}\s*\[\s*[\'"][^\'"]*[\'"]\s*\]\s*\)\s*\)\s*;\s*\}\s*~msi', $str, $matches);
$find = $matches[0];
$alph = $matches[2];
for ($i = 0, $iMax = strlen($alph); $i < $iMax; $i++) {
$res = str_replace($matches[1] . '[' . $i . '].', "'" . $alph[$i] . "'", $res);
$res = str_replace($matches[1] . '[' . $i . ']', "'" . $alph[$i] . "'", $res);
}
$res = str_replace("''", '', $res);
$res = str_replace("' '", '', $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateWebshellObf($str)
{
$res = $str;
preg_match('~function\s*(\w{1,40})\s*\(\s*(\$\w{1,40})\s*,\s*(\$\w{1,40})\s*\)\s*\{\s*(\$\w{1,40})\s*=\s*str_rot13\s*\(\s*gzinflate\s*\(\s*str_rot13\s*\(\s*base64_decode\s*\(\s*[\'"]([^\'"]*)[\'"]\s*\)\s*\)\s*\)\s*\)\s*;\s*(if\s*\(\s*\$\w+\s*==[\'"][^\'"]*[\'"]\s*\)\s*\{\s*(\$\w{1,40})\s*=(\$\w+[\{\[]\d+[\}\]]\.?)+;return\s*(\$\w+)\(\3\);\s*\}\s*else\s*)+\s*if\s*\(\s*\$\w+\s*==[\'"][^\'"]*[\'"]\s*\)\s*\{\s*return\s*eval\(\3\);\s*\}\s*\};\s*(\$\w{1,40})\s*=\s*[\'"][^\'"]*[\'"];(\s*\10\([\'"][^\'"]*[\'"],)+\s*[\'"]([^\'"]*)[\'"]\s*\)+;~msi',$str, $matches);
$find = $matches[0];
$alph = str_rot13(gzinflate(str_rot13(base64_decode($matches[5]))));
for ($i = 0, $iMax = strlen($alph); $i < $iMax; $i++) {
$res = str_replace($matches[4] . '{' . $i . '}.', "'" . $alph[$i] . "'", $res);
$res = str_replace($matches[4] . '{' . $i . '}', "'" . $alph[$i] . "'", $res);
}
$res = str_replace("''", '', $res);
$res = base64_decode(gzinflate(str_rot13(convert_uudecode(gzinflate(base64_decode(strrev($matches[12])))))));
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateXorFName($str)
{
preg_match('~(\$\w+)\s*=\s*basename\s*\(trim\s*\(preg_replace\s*\(rawurldecode\s*\([\'"][%0-9a-f\.]+["\']\),\s*\'\',\s*__FILE__\)\)\);\s*(\$\w+)\s*=\s*["\']([^\'"]+)["\'];\s*eval\s*\(rawurldecode\s*\(\2\)\s*\^\s*substr\s*\(str_repeat\s*\(\1,\s*\(strlen\s*\(\2\)/strlen\s*\(\1\)\)\s*\+\s*1\),\s*0,\s*strlen\s*\(\2\)\)\);~msi', $str, $matches);
$find = $matches[0];
$xored = rawurldecode($matches[3]);
$xor_key = $xored ^ 'if (!defined(';
$php = $xored ^ substr(str_repeat($xor_key, (strlen($matches[3]) / strlen($xor_key)) + 1), 0, strlen($matches[3]));
preg_match('~\$\w{1,40}\s*=\s*((\'[^\']+\'\s*\.?\s*)+);\s*\$\w+\s*=\s*Array\(((\'\w\'=>\'\w\',?\s*)+)\);~msi', $php, $matches);
$matches[1] = str_replace(array(" ", "\r", "\n", "\t", "'.'"), '', $matches[1]);
$matches[3] = str_replace(array(" ", "'", ">"), '', $matches[3]);
$temp = explode(',', $matches[3]);
$array = array();
foreach ($temp as $value) {
$temp = explode("=", $value);
$array[$temp[0]] = $temp[1];
}
$res = '';
for ($i=0, $iMax = strlen($matches[1]); $i < $iMax; $i++) {
$res .= isset($array[$matches[1][$i]]) ? $array[$matches[1][$i]] : $matches[1][$i];
}
$res = substr(rawurldecode($res), 1, -2);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateSubstCreateFunc($str)
{
preg_match('~(\$\w{1,40})=\'(([^\'\\\\]|\\\\.)*)\';\s*((\$\w{1,40})=(\1\[\d+].?)+;\s*)+(\$\w{1,40})=\'\';\s*(\$\w{1,40})\(\7,\$\w{1,40}\.\"([^\"]+)\"\.\$\w{1,40}\.\5\);~msi', $str, $matches);
$find = $matches[0];
$php = base64_decode($matches[9]);
preg_match('~(\$\w{1,40})=(\$\w{1,40})\("([^\']+)"\)~msi', $php, $matches);
$matches[3] = base64_decode($matches[3]);
$php = '';
for ($i = 1, $iMax = strlen($matches[3]); $i < $iMax; $i++) {
if ($i % 2) {
$php .= substr($matches[3], $i, 1);
}
}
$php = str_replace($find, $php, $str);
return $php;
}
private function deobfuscateZeura($str)
{
preg_match('~(\$\w{1,40})=file\(__FILE__\);if\(!function_exists\(\"([^\"]*)\"\)\)\{function\s*\2\((\$\w{1,40}),(\$\w{1,40})=\d+\)\{(\$\w{1,40})=implode\(\"[^\"]*\",\3\);(\$\w{1,40})=array\((\d+),(\d+),(\d+)\);if\(\4==0\)\s*(\$\w{1,40})=substr\(\5,\6\[\d+\],\6\[\d+\]\);elseif\(\4==1\)\s*\10=substr\(\5,\6\[\d+\]\+\6\[\d+\],\6\[\d+\]\);else\s*\10=trim\(substr\(\5,\6\[\d+\]\+\6\[\d+\]\+\6\[\d+\]\)\);return\s*\(\10\);\}\}eval\(\w{1,40}\(\2\(\1,2\),\2\(\1,1\)\)\);__halt_compiler\(\);[\w\+\=/]+~msi', $str, $matches);
$offset = intval($matches[8]) + intval($matches[9]);
$obfPHP = explode('__halt_compiler();', $str);
$obfPHP = end($obfPHP);
$php = gzinflate(base64_decode(substr($obfPHP, $offset)));
$php = stripcslashes($php);
$php = str_replace($matches[0], $php, $str);
return $php;
}
private function deobfuscateSourceCop($str)
{
preg_match('~if\(\!function_exists\(\'findsysfolder\'\)\){function findsysfolder\(\$fld\).+\$REXISTHEDOG4FBI=\'([^\']+)\';\$\w+=\'[^\']+\';\s*eval\(\w+\(\'([^\']+)\',\$REXISTHEDOG4FBI\)\);~msi', $str, $matches);
$key = $matches[2];
$obfPHP = $matches[1];
$res = '';
$index = 0;
$len = strlen($key);
$temp = hexdec('&H' . substr($obfPHP, 0, 2));
for ($i = 2, $iMax = strlen($obfPHP); $i < $iMax; $i += 2) {
$bytes = hexdec(trim(substr($obfPHP, $i, 2)));
$index = (($index < $len) ? $index + 1 : 1);
$decoded = $bytes ^ ord(substr($key, $index - 1, 1));
if ($decoded <= $temp) {
$decoded = 255 + $decoded - $temp;
} else {
$decoded = $decoded - $temp;
}
$res = $res . chr($decoded);
$temp = $bytes;
}
$res = str_replace($matches[0], $res, $str);
return $res;
}
private function deobfuscateGlobalsArray($str)
{
$res = $str;
preg_match('~\$\w+\s*=\s*\d+;\s*\$GLOBALS\[\'[^\']+\'\]\s*=\s*Array\(\);\s*global\s*\$\w+;(\$\w{1,40})\s*=\s*\$GLOBALS;\$\{"\\\\x[a-z0-9\\\\]+"\}\[(\'\w+\')\]\s*=\s*\"(([^\"\\\\]|\\\\.)*)\";\1\[(\1\[\2\]\[\d+\].?).+?exit\(\);\}+~msi', $str, $matches);
$alph = stripcslashes($matches[3]);
$res = preg_replace('~\${"[\\\\x0-9a-f]+"}\[\'\w+\'\]\s*=\s*"[\\\\x0-9a-f]+";~msi', '', $res);
for ($i = 0, $iMax = strlen($alph); $i < $iMax; $i++) {
$res = str_replace($matches[1] .'[' . $matches[2] . ']' . '[' . $i . '].', "'" . $alph[$i] . "'", $res);
$res = str_replace($matches[1] .'[' . $matches[2] . ']' . '[' . $i . ']', "'" . $alph[$i] . "'", $res);
}
$res = str_replace("''", '', $res);
preg_match_all('~\\' . $matches[1] . '\[(\'\w+\')]\s*=\s*\'(\w+)\';~msi', $res, $funcs);
$vars = $funcs[1];
$func = $funcs[2];
foreach ($vars as $index => $var) {
$res = str_replace($matches[1] . '[' . $var . ']', $func[$index], $res);
}
foreach ($func as $remove) {
$res = str_replace($remove . " = '" . $remove . "';", '', $res);
$res = str_replace($remove . "='" . $remove . "';", '', $res);
}
$res = str_replace($matches[0], $res, $str);
return $res;
}
private function deobfuscateXbrangwolf($str)
{
preg_match('~(\${(["\w\\\\]+)}\[["\w\\\\]+\]=["\w\\\\]+;)+((\${\${(["\w\\\\]+)}\[["\w\\\\]+\]}).?=((urldecode\(["%\w]+\);)|(\${\${["\w\\\\]+}\[["\w\\\\]+\]}{\d+}.?)+;))+eval\(\${\${["\w\\\\]+}\[["\w\\\\]+\]}\(["\w+=]+\)\);~msi', $str, $match);
return $match[0];
}
private function deobfuscateObfB64($str)
{
preg_match('~(\$\w{1,50}\s*=\s*array\((\'\d+\',?)+\);)+\$\w{1,40}=\"([^\"]+)\";if\s*\(!function_exists\(\"\w{1,50}\"\)\)\s*\{\s*function\s*[^\}]+\}\s*return\s*\$\w+;\}[^}]+}~msi', $str, $matches);
$res = base64_decode($matches[3]);
$res = str_replace($matches[0], $res, $str);
return $res;
}
private function deobfuscateArrayOffsets($str)
{
$vars = array();
preg_match('~(\$\w{1,40})\s*=\s*\'([^\']*)\';\s*(\$\w{1,40})\s*=\s*explode\s*\((chr\s*\(\s*\(\d+\-\d+\)\)),substr\s*\(\1,\s*\((\d+\-\d+)\),\s*\(\s*(\d+\-\d+)\)\)\);.+\1\s*=\s*\$\w+[+\-\*]\d+;~msi', $str, $matches);
$find = $matches[0];
$obfPHP = $matches[2];
$matches[4] = Helpers::calc($matches[4]);
$matches[5] = intval(Helpers::calc($matches[5]));
$matches[6] = intval(Helpers::calc($matches[6]));
$func = explode($matches[4], strtolower(substr($obfPHP, $matches[5], $matches[6])));
$func[1] = strrev($func[1]);
$func[2] = strrev($func[2]);
preg_match('~\$\w{1,40}\s=\sexplode\((chr\(\(\d+\-\d+\)\)),\'([^\']+)\'\);~msi', $str, $matches);
$matches[1] = Helpers::calc($matches[1]);
$offsets = explode($matches[1], $matches[2]);
$res = '';
for ($i = 0; $i < (sizeof($offsets) / 2); $i++) {
$res .= substr($obfPHP, $offsets[$i * 2], $offsets[($i * 2) + 1]);
}
preg_match('~return\s*\$\w{1,40}\((chr\(\(\d+\-\d+\)\)),(chr\(\(\d+\-\d+\)\)),\$\w{1,40}\);~msi', $str, $matches);
$matches[1] = Helpers::calc($matches[1]);
$matches[2] = Helpers::calc($matches[2]);
$res = Helpers::stripsquoteslashes(str_replace($matches[1], $matches[2], $res));
$res = "<?php\n" . $res . "?>";
preg_match('~(\$\w{1,40})\s=\simplode\(array_map\(\"[^\"]+\",str_split\(\"(([^\"\\\\]++|\\\\.)*)\"\)\)\);(\$\w{1,40})\s=\s\$\w{1,40}\(\"\",\s\1\);\s\4\(\);~msi', $res, $matches);
$matches[2] = stripcslashes($matches[2]);
for ($i=0, $iMax = strlen($matches[2]); $i < $iMax; $i++) {
$matches[2][$i] = chr(ord($matches[2][$i])-1);
}
$res = str_replace($matches[0], $matches[2], $res);
preg_match_all('~(\$\w{1,40})\s*=\s*\"(([^\"\\\\]++|\\\\.)*)\";~msi', $res, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$vars[$match[1]] = stripcslashes($match[2]);
}
preg_match_all('~(\$\w{1,40})\s*=\s*\'(([^\'\\\\]++|\\\\.)*)\';~msi', $res, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$vars[$match[1]] = Helpers::stripsquoteslashes($match[2]);
}
preg_match('~(\$\w{1,40})\s*=\s*\"\\\\x73\\\\164\\\\x72\\\\137\\\\x72\\\\145\\\\x70\\\\154\\\\x61\\\\143\\\\x65";\s(\$\w{1,40})\s=\s\'(([^\'\\\\]++|\\\\.)*)\';\seval\(\1\(\"(([^\"\\\\]++|\\\\.)*)\",\s\"(([^\"\\\\]++|\\\\.)*)\",\s\2\)\);~msi', $res, $matches);
$matches[7] = stripcslashes($matches[7]);
$matches[3] = Helpers::stripsquoteslashes(str_replace($matches[5], $matches[7], $matches[3]));
$res = str_replace($matches[0], $matches[3], $res);
preg_match_all('~(\$\w{1,40})\s*=\s*\"(([^\"\\\\]++|\\\\.)*)\";~msi', $res, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$vars[$match[1]] = stripcslashes($match[2]);
}
preg_match_all('~(\$\w{1,40})\s*=\s*\'(([^\'\\\\]++|\\\\.)*)\';~msi', $res, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$vars[$match[1]] = Helpers::stripsquoteslashes($match[2]);
}
preg_match('~\$\w{1,40}\s=\sarray\(((\'(([^\'\\\\]++|\\\\.)*)\',?(\.(\$\w{1,40})\.)?)+)\);~msi', $res, $matches);
foreach ($vars as $var => $value) {
$matches[1] = str_replace("'." . $var . ".'", $value, $matches[1]);
}
$array2 = explode("','", substr($matches[1], 1, -1));
preg_match('~eval\(\$\w{1,40}\(array\((((\"[^\"]\"+),?+)+)\),\s(\$\w{1,40}),\s(\$\w{1,40})\)\);~msi', $res, $matches);
$array1 = explode('","', substr($matches[1], 1, -1));
$temp = array_keys($vars);
$temp = $temp[9];
$arr = explode('|', $vars[$temp]);
$off=0;
$funcs=array();
for ($i = 0, $iMax = sizeof($arr); $i < $iMax; $i++) {
if ($i == 0) {
$off = 0;
} else {
$off = $arr[$i - 1] + $off;
}
$len = $arr[$i];
$temp = array_keys($vars);
$temp = $temp[7];
$funcs[]= substr($vars[$temp], $off, $len);
}
for ($i = 0; $i < 5; $i++) {
if ($i % 2 == 0) {
$funcs[$i] = strrev($funcs[$i]);
$g = substr($funcs[$i], strpos($funcs[$i], "9") + 1);
$g = stripcslashes($g);
$v = explode(":", substr($funcs[$i], 0, strpos($funcs[$i], "9")));
for ($j = 0, $jMax = sizeof($v); $j < $jMax; $j++) {
$q = explode("|", $v[$j]);
$g = str_replace($q[0], $q[1], $g);
}
$funcs[$i] = $g;
} else {
$h = explode("|", strrev($funcs[$i]));
$d = explode("*", $h[0]);
$b = $h[1];
for ($j = 0, $jMax = sizeof($d); $j < $jMax; $j++) {
$b = str_replace($j, $d[$j], $b);
}
$funcs[$i] = $b;
}
}
$temp = array_keys($vars);
$temp = $temp[8];
$funcs[] = str_replace('9', ' ', strrev($vars[$temp]));
$funcs = implode("\n", $funcs);
preg_match('~\$\w{1,40}\s=\s\'.+?eval\([^;]+;~msi', $res, $matches);
$res = str_replace($matches[0], $funcs, $res);
$res = stripcslashes($res);
$res = str_replace('}//}}', '}}', $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateXoredVar($str)
{
$res = $str;
preg_match('~(\$\w{1,40})\s*=\s*\'(\\\\.|[^\']){0,100}\';\s*\$\w+\s*=\s*\'(\\\\.|[^\']){0,100}\'\^\1;[^)]+\)+;\s*\$\w+\(\);~msi', $str, $matches);
$find = $matches[0];
preg_match_all('~(\$\w{1,40})\s*=\s*\'((\\\\.|[^\'])*)\';~msi', $str, $matches, PREG_SET_ORDER);
$vars = array();
foreach ($matches as $match) {
$vars[$match[1]]=$match[2];
}
preg_match_all('~(\$\w{1,40})\s*=\s*\'((\\\\.|[^\'])*)\'\^(\$\w+);~msi', $str, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
if (isset($vars[$match[4]])) {
$vars[$match[1]]=$match[2]^$vars[$match[4]];
$res = str_replace($match[0], $match[1] . "='" . $vars[$match[1]] . "';", $res);
}
}
preg_match_all('~(\$\w{1,40})\s*=\s*(\$\w+)\^\'((\\\\.|[^\'])*)\';~msi', $res, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
if (isset($vars[$match[2]])) {
$vars[$match[1]]=$match[4]^$vars[$match[2]];
$res = str_replace($match[0], $match[1] . "='" . $vars[$match[1]] . "';", $res);
}
}
preg_match_all('~\'((\\\\.|[^\'])*)\'\^(\$\w+)~msi', $res, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
if (isset($vars[$match[3]])) {
$res = str_replace($match[0], "'" . addcslashes($match[1]^$vars[$match[3]], '\\\'') . "'", $res);
}
}
foreach ($vars as $var => $value) {
$res = str_replace($var, $value, $res);
$res = str_replace($value . "='" . $value . "';", '', $res);
}
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscatePhpMess($str)
{
$res = '';
preg_match('~(\$\w{1,40})=base64_decode\(\'[^\']+\'\);(\$\w+)=base64_decode\(\'[^\']+\'\);(\$\w+)=base64_decode\(\'([^\']+)\'\);eval\(\1\(gzuncompress\(\2\(\3\)\)\)\);~msi', $str, $matches);
$res = base64_decode(gzuncompress(base64_decode(base64_decode($matches[4]))));
$res = str_replace($matches[0], $res, $str);
return $res;
}
private function deobfuscatePregReplaceSample05($str)
{
$res = '';
preg_match('~(\$\w{1,40})\s*=\s*\"([^\"]+)\";\s*\$\w+\s*=\s*\$\w+\(\1,\"([^\"]+)\",\"([^\"]+)\"\);\s*\$\w+\(\"[^\"]+\",\"[^\"]+\",\"\.\"\);~msi', $str, $matches);
$res = strtr($matches[2], $matches[3], $matches[4]);
$res = base64_decode($res);
$res = str_replace($matches[0], $res, $str);
return $res;
}
private function deobfuscatePregReplaceB64($str)
{
$res = '';
preg_match('~(\$\w{1,40})\s*=\s*\w+\(\'.+?\'\);\s*(\$\w+)\s*=\s*\w+\(\'.+?\'\);\s*(\$\w+)\s*=\s*\"([^\"]+)\";\s*(\$\w+)\s*=\s*.+?;\s*\2\(\5,\"[^\']+\'\3\'[^\"]+\",\"\.\"\);~msi', $str, $matches);
$find = $matches[0];
$res = str_replace($find, base64_decode($matches[4]), $str);
$res = stripcslashes($res);
preg_match('~eval\(\${\$\{"GLOBALS"\}\[\"\w+\"\]}\(\${\$\{"GLOBALS"\}\[\"\w+\"]}\(\"([^\"]+)\"\)\)\);~msi', $res, $matches);
$res = gzuncompress(base64_decode($matches[1]));
preg_match('~eval\(\$\w+\(\$\w+\("([^"]+)"\)\)\);~msi', $res, $matches);
$res = gzuncompress(base64_decode($matches[1]));
preg_match('~eval\(\$\w+\(\$\w+\("([^"]+)"\)\)\);~msi', $res, $matches);
$res = gzuncompress(base64_decode($matches[1]));
preg_match_all('~\$(\w+)\s*(\.)?=\s*("[^"]*"|\$\w+);~msi', $res, $matches, PREG_SET_ORDER);
$var = $matches[0][1];
$vars = array();
foreach ($matches as $match) {
if($match[2]!=='.') {
$vars[$match[1]] = substr($match[3], 1, -1);
}
else {
$vars[$match[1]] .= $vars[substr($match[3], 1)];
}
}
$res = str_replace("srrKePJUwrMZ", "=", $vars[$var]);
$res = gzuncompress(base64_decode($res));
preg_match_all('~function\s*(\w+)\(\$\w+,\$\w+\)\{.+?}\s*};\s*eval\(((\1\(\'(\w+)\',)+)\s*"([\w/\+]+)"\)\)\)\)\)\)\)\);~msi', $res, $matches);
$decode = array_reverse(explode("',", str_replace($matches[1][0] . "('", '', $matches[2][0])));
array_shift($decode);
$arg = $matches[5][0];
foreach ($decode as $val) {
$arg = Helpers::someDecoder2($val, $arg);
}
$res = $arg;
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateDecoder($str)
{
preg_match('~if\(!function_exists\(\"(\w+)\"\)\){function \1\(.+eval\(\1\(\"([^\"]+)\"\)\);~msi', $str, $matches);
$res = Helpers::someDecoder($matches[2]);
$res = str_replace($matches[0], $res, $str);
return $res;
}
private function deobfuscateGBE($str)
{
preg_match('~(\$\w{1,40})=\'([^\']+)\';\1=gzinflate\(base64_decode\(\1\)\);\1=str_replace\(\"__FILE__\",\"\'\$\w+\'\",\1\);eval\(\1\);~msi', $str, $matches);
$res = str_replace($matches[0], gzinflate(base64_decode($matches[2])), $str);
return $res;
}
private function deobfuscateGBZ($str)
{
preg_match('~(\$\w{1,40})\s*=\s*\"riny\(\"\.(\$\w+)\(\"base64_decode\"\);\s*(\$\w+)\s*=\s*\2\(\1\.\'\("([^"]+)"\)\);\'\);\s*\$\w+\(\3\);~msi', $str, $matches);
$res = str_replace($matches[0], base64_decode(str_rot13($matches[4])), $str);
return $res;
}
private function deobfuscateBitrix($str)
{
preg_match('~(\$GLOBALS\[\s*[\'"]_+\w{1,60}[\'"]\s*\])\s*=\s*\s*array\s*\(\s*base64_decode\s*\(.+?((.+?\1\[\d+\]).+?)+[^;]+;(\s*include\(\$_\d+\);)?}?((.+?___\d+\(\d+\))+[^;]+;)?(.*?(\$[a-z]+).+\8_\d+;)?(echo\s*\$\w+;})?~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$funclist = array();
$strlist = array();
$res = preg_replace("|[\"']\s*\.\s*['\"]|smi", '', $res);
$hangs = 0;
while (preg_match('~(?:min|max|round)?\(\s*\d+[\.\,\|\s\|+\|\-\|\*\|\/]([\d\s\.\,\+\-\*\/]+)?\)~msi', $res) && $hangs < 15) {
$res = preg_replace_callback('~(?:min|max|round)?\(\s*\d+[\.\,\|\s\|+\|\-\|\*\|\/]([\d\s\.\,\+\-\*\/]+)?\)~msi', array("Helpers","calc"), $res);
$hangs++;
}
$res = preg_replace_callback(
'|base64_decode\(["\'](.*?)["\']\)|smi',
function ($matches) {
return '"' . base64_decode($matches[1]) . '"';
},
$res
);
if (preg_match_all('|\$GLOBALS\[[\'"](.+?)[\'"]\]\s*=\s*Array\((.+?)\);|smi', $res, $founds, PREG_SET_ORDER)) {
foreach ($founds as $found) {
$varname = $found[1];
$funclist[$varname] = explode(',', $found[2]);
$funclist[$varname] = array_map(function ($value) {
return trim($value, "'\"");
}, $funclist[$varname]);
$res = preg_replace_callback(
'|\$GLOBALS\[[\'"]' . $varname . '[\'"]\]\[(\d+)\]|smi',
function ($matches) use ($varname, $funclist) {
return str_replace(array('"',"'"), '', $funclist[$varname][$matches[1]]);
},
$res
);
$res = str_replace($found[0], '', $res);
}
}
$array_temp = [];
if (preg_match_all('~function\s*(\w{1,60})\(\$\w+\){\$\w{1,60}\s*=\s*Array\((.{1,30000}?)\);\s*return\s*base64_decode[^}]+}~msi', $res, $founds, PREG_SET_ORDER)) {
foreach ($founds as $found) {
$strlist = explode(',', $found[2]);
$array_temp[$found[1]] = array_map('base64_decode', $strlist);
$res = preg_replace_callback(
'|' . $found[1] . '\((\d+)\)|smi',
function ($matches) use ($strlist) {
return "'" . base64_decode($strlist[$matches[1]]) . "'";
},
$res
);
$res = str_replace($found[0], '', $res);
}
}
$res = preg_replace('~\'\s*\.\s*\'~', '', $res);
if (preg_match_all('~\s*function\s*(_+(.{1,60}?))\(\$[_0-9]+\)\s*\{\s*static\s*\$([_0-9]+)\s*=\s*(true|false);.{1,30000}?\$\3\s*=\s*array\((.*?)\);\s*return\s*base64_decode\(\$\3~smi', $res, $founds, PREG_SET_ORDER)) {
foreach ($founds as $found) {
$strlist = explode('",', $found[5]);
$strlist = implode("',", $strlist);
$strlist = explode("',", $strlist);
$res = preg_replace_callback(
'|' . $found[1] . '\((\d+(\.\d+)?)\)|sm',
function ($matches) use ($strlist) {
return $strlist[$matches[1]] . '"';
},
$res
);
}
}
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateLockIt($str)
{
preg_match('~(\$[O0]*=__FILE__;)?\$[O0]*=urldecode\(\'[%a-f0-9]+\'\);(\$(GLOBALS\[\')?[O0]*(\'\])?=(\d+);)?\s*(\$(GLOBALS\[\')?[O0]*(\'\])?\.?=(\$(GLOBALS\[\')?[O0]*(\'\])?([\{\[]\d+[\}\]])?\.?)+;)+[^\?]+\?\>[\s\w\~\=\/\+\\\\\^\{\`\%]+~msi', $str, $matches);
$find = $matches[0];
$prefix = $matches[1];
$obfPHP = $str;
$phpcode = base64_decode(Helpers::getTextInsideQuotes(Helpers::getEvalCode($obfPHP)));
$hexvalues = Helpers::getHexValues($phpcode);
$tmp_point = Helpers::getHexValues($obfPHP);
if (isset($tmp_point[0]) && $tmp_point[0]!=='') {
$pointer1 = hexdec($tmp_point[0]);
}
if (isset($matches[5]) && $matches[5]!=='') {
$pointer1 = $matches[5];
}
$needles = Helpers::getNeedles($phpcode);
if ($needles[2]=='__FILE__') {
$needle = $needles[0];
$before_needle = $needles[1];
preg_match('~\$_F=__FILE__;\$_X=\'([^\']+)\';\s*eval\s*\(\s*\$?\w{1,60}\s*\(\s*[\'"][^\'"]+[\'"]\s*\)\s*\)\s*;~msi', $str, $matches);
$res = base64_decode($matches[1]);
$phpcode = strtr($res, $needle, $before_needle);
} else {
$needle = $needles[count($needles) - 2];
$before_needle = end($needles);
if (preg_match('~\$\w{1,40}\s*=\s*__FILE__;\s*\$\w{1,40}\s*=\s*([\da-fx]+);\s*eval\s*\(\$?\w+\s*\([\'"][^\'"]+[\'"]\)\);\s*return\s*;\s*\?>(.+)~msi', $str, $matches)) {
$pointer1 = $matches[1];
if (strpos($pointer1, '0x')!==false) {
$pointer1 = hexdec($pointer1);
}
}
$temp = strtr($obfPHP, $needle, $before_needle);
$end = 8;
for ($i = strlen($temp) - 1; $i > strlen($temp) - 15; $i--) {
if ($temp[$i] == '=') {
$end = strlen($temp) - 1 - $i;
}
}
$phpcode = base64_decode(substr($temp, strlen($temp) - $pointer1 - $end, $pointer1));
}
$phpcode = str_replace($find, $prefix . $phpcode, $str);
return $phpcode;
}
private function deobfuscateB64inHTML($str)
{
$obfPHP = $str;
$phpcode = base64_decode(Helpers::getTextInsideQuotes(Helpers::getEvalCode($obfPHP)));
$needles = Helpers::getNeedles($phpcode);
$needle = $needles[count($needles) - 2];
$before_needle = end($needles);
if (preg_match('~\$\w{1,40}\s*=\s*(__FILE__|__LINE__);\s*\$\w{1,40}\s*=\s*(\d+);\s*eval(\s*\()+\$?\w+\s*\([\'"][^\'"]+[\'"](\s*\))+;\s*return\s*;\s*\?>(.+)~msi', $str, $matches)) {
$pointer1 = $matches[2];
}
$temp = strtr($obfPHP, $needle, $before_needle);
$end = 8;
for ($i = strlen($temp) - 1; $i > strlen($temp) - 15; $i--) {
if ($temp[$i] == '=') {
$end = strlen($temp) - 1 - $i;
}
}
$phpcode = base64_decode(substr($temp, strlen($temp) - $pointer1 - ($end-1), $pointer1));
$phpcode = str_replace($matches[0], $phpcode, $str);
return $phpcode;
}
private function deobfuscateStrtrFread($str)
{
preg_match('~\$[O0]+=\(base64_decode\(strtr\(fread\(\$[O0]+,(\d+)\),\'([^\']+)\',\'([^\']+)\'\)\)\);eval\([^\)]+\)+;~msi', $str, $layer2);
$str = explode('?>', $str);
$str = end($str);
$res = substr($str, $layer2[1], strlen($str));
$res = base64_decode(strtr($res, $layer2[2], $layer2[3]));
$res = str_replace($layer2[0], $res, $str);
return $res;
}
private function deobfuscateStrtrBase64($str)
{
preg_match('~(\$\w{1,40})="([\w\]\[\<\&\*\_+=/]{300,})";\$\w+=\$\w+\(\1,"([\w\]\[\<\&\*\_+=/]+)","([\w\]\[\<\&\*\_+=/]+)"\);~msi', $str, $matches);
$str = strtr($matches[2], $matches[3], $matches[4]);
$res = base64_decode($str);
$res = str_replace($matches[0], $res, $str);
return $res;
}
private function deobfuscateByteRun($str)
{
preg_match('~\$_F=__FILE__;\$_X=\'([^\']+)\';\s*eval\s*\(\s*\$?\w{1,60}\s*\(\s*[\'"][^\'"]+[\'"]\s*\)\s*\)\s*;~msi', $str, $matches);
$res = base64_decode($matches[1]);
$res = strtr($res, '123456aouie', 'aouie123456');
$res = str_replace($matches[0], $res, $str);
return $res;
}
private function deobfuscateExplodeSubst($str)
{
preg_match('~\$\w+\s*=\s*array\((\'[^\']+\',?)+\);\s*.+?(\$_\w{1,40}\[\w+\])\s*=\s*explode\(\'([^\']+)\',\s*\'([^\']+)\'\);.+?(\2\[[a-fx\d]+\])\(\);(.+?\2)+.+}~msi', $str, $matches);
$find = $matches[0];
$res = $str;
preg_match_all('~function ([\w_]+)\(~msi', $res, $funcs);
preg_match('~(\$_\w+\[\w+\])\s*=\s*explode\(\'([^\']+)\',\s*\'([^\']+)\'\);.+?(\1\[[a-fx\d]+\])\(\);~msi', $res, $matches);
$subst_array = explode($matches[2], $matches[3]);
$subst_var = $matches[1];
$res = preg_replace_callback('~((\$_GET\[[O0]+\])|(\$[O0]+))\[([a-fx\d]+)\]~msi', function ($matches) use ($subst_array, $funcs) {
if (function_exists($subst_array[hexdec($matches[4])]) || in_array($subst_array[hexdec($matches[4])], $funcs[1])) {
return $subst_array[hexdec($matches[4])];
} else {
return "'" . $subst_array[hexdec($matches[4])] . "'";
}
}, $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateSubst($str)
{
preg_match('~(\$[\w{1,40}]+)\s*=\s*\'([\w+%=\-\#\\\\\'\*]+)\';(\$[\w+]+)\s*=\s*Array\(\);(\3\[\]\s*=\s*(\1\[\d+\]\.?)+;+)+(.+\3)[^}]+}~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$alph = stripcslashes($matches[2]);
$funcs = $matches[4];
for ($i = 0, $iMax = strlen($alph); $i < $iMax; $i++) {
$res = str_replace($matches[1] . '[' . $i . '].', "'" . $alph[$i] . "'", $res);
$res = str_replace($matches[1] . '[' . $i . ']', "'" . $alph[$i] . "'", $res);
}
$res = str_replace("''", '', $res);
$var = $matches[3];
preg_match_all('~\\' . $var . '\[\]\s*=\s*\'([\w\*\-\#]+)\'~msi', $res, $matches);
for ($i = 0, $iMax = count($matches[1]); $i <= $iMax; $i++) {
if (@function_exists($matches[1][$i])) {
$res = str_replace($var . '[' . $i . ']', $matches[1][$i], $res);
} else {
$res = @str_replace($var . '[' . $i . ']', "'" . $matches[1][$i] . "'", $res);
}
}
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateUrldecode($str)
{
preg_match('~(\$\w+=\'[^\']+\';\s*)+(\$[\w{1,40}]+)=(urldecode|base64_decode){0,1}\(?[\'"]([\w+%=-]+)[\'"]\)?;(\$[\w+]+=(\$(\w+\[\')?[O_0]*(\'\])?([\{\[]\d+[\}\]])?\.?)+;)+[^\?]+(\?\>[\w\~\=\/\+]+|.+\\\\x[^;]+;)~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$res = stripcslashes($res);
if ($matches[3] == "urldecode") {
$alph = urldecode($matches[4]);
$res = str_replace('urldecode(\'' . $matches[4] . '\')', "'" . $alph . "'", $res);
} elseif ($matches[3] == 'base64_decode') {
$alph = base64_decode($matches[4]);
$res = str_replace('base64_decode(\'' . $matches[4] . '\')', "'" . $alph . "'", $res);
} else {
$alph = $matches[4];
}
for ($i = 0, $iMax = strlen($alph); $i < $iMax; $i++) {
$res = str_replace($matches[2] . '[' . $i . '].', "'" . $alph[$i] . "'", $res);
$res = str_replace($matches[2] . '[' . $i . ']', "'" . $alph[$i] . "'", $res);
$res = str_replace($matches[2] . '{' . $i . '}.', "'" . $alph[$i] . "'", $res);
$res = str_replace($matches[2] . '{' . $i . '}', "'" . $alph[$i] . "'", $res);
}
$res = str_replace("''", '', $res);
preg_match_all('~\$(\w+)\s*=\s*\'([\w\*\-\#]+)\'~msi', $res, $matches, PREG_SET_ORDER);
for ($i = 0, $iMax = count($matches); $i < $iMax; $i++) {
if (@function_exists($matches[$i][2])) {
$res = str_replace('$' . $matches[$i][1], $matches[$i][2], $res);
$res = str_replace('${"GLOBALS"}["' . $matches[$i][1] . '"]', $matches[$i][2], $res);
} else {
$res = str_replace('$' . $matches[$i][1], "'" . $matches[$i][2] . "'", $res);
$res = str_replace('${"GLOBALS"}["' . $matches[$i][1] . '"]', "'" . $matches[$i][2] . "'", $res);
}
$res = str_replace("'" . $matches[$i][2] . "'='" . $matches[$i][2] . "';", '', $res);
$res = str_replace($matches[$i][2] . "='" . $matches[$i][2] . "';", '', $res);
$res = str_replace($matches[$i][2] . "=" . $matches[$i][2] . ';', '', $res);
}
$res = Helpers::replaceCreateFunction($res);
preg_match('~\$([0_O]+)\s*=\s*function\s*\((\$\w+)\)\s*\{\s*\$[O_0]+\s*=\s*substr\s*\(\2,(\d+),(\d+)\);\s*\$[O_0]+\s*=\s*substr\s*\(\2,([\d-]+)\);\s*\$[O_0]+\s*=\s*substr\s*\(\2,(\d+),strlen\s*\(\2\)-(\d+)\);\s*return\s*gzinflate\s*\(base64_decode\s*\(\$[O_0]+\s*\.\s*\$[O_0]+\s*\.\s*\$[O_0]+\)+;~msi', $res, $matches);
$res = preg_replace_callback('~\$\{"GLOBALS"}\["' . $matches[1] . '"\]\s*\(\'([^\']+)\'\)~msi', function ($calls) use ($matches) {
$temp1 = substr($calls[1], $matches[3], $matches[4]);
$temp2 = substr($calls[1], $matches[5]);
$temp3 = substr($calls[1], $matches[6],strlen($calls[1]) - $matches[7]);
return "'" . gzinflate(base64_decode($temp1 . $temp3 . $temp2)) . "'";
}, $res);
$res = str_replace($find, $res, $str);
return $res;
}
public function unwrapFuncs($string, $level = 0)
{
$close_tag = false;
$res = '';
if (trim($string) == '') {
return '';
}
if ($level > 100) {
return '';
}
if ((($string[0] == '\'') || ($string[0] == '"')) && (substr($string, 1, 2) != '?>')) {
if($string[0] == '"' && preg_match('~\\\\x\d+~', $string)) {
return stripcslashes($string);
} else {
return substr($string, 1, -2);
}
} elseif ($string[0] == '$') {
preg_match('~\$\w{1,40}~', $string, $string);
$string = $string[0];
$matches = array();
if (!@preg_match_all('~\\' . $string . '\s*=\s*("((.*?[^\\\\])??((\\\\\\\\)+)?+)");~msi', $this->full_source, $matches)) {
@preg_match_all('~\\' . $string . '\s*=\s*(\'((.*?[^\\\\])??((\\\\\\\\)+)?+)\');~msi', $this->full_source, $matches);
$str = @$matches[1][0];
} else {
$str = $matches[1][0];
}
$this->cur = str_replace($matches[0][0], '', $this->cur);
$this->text = str_replace($matches[0][0], '', $this->text);
return substr($str, 1, -1);
} else {
$pos = strpos($string, '(');
$function = substr($string, 0, $pos);
$arg = $this->unwrapFuncs(substr($string, $pos + 1), $level + 1);
if (strpos($function, '?>') !== false) {
$function = str_replace("'?>'.", "", $function);
$function = str_replace('"?>".', "", $function);
$function = str_replace("'?>' .", "", $function);
$function = str_replace('"?>" .', "", $function);
$close_tag = true;
}
$function = str_replace(array('@',' '), '', $function);
$safe = Helpers::isSafeFunc($function);
if ($safe) {
if ($function == 'pack') {
$args = explode(',', $arg);
$args[0] = substr(trim($args[0]), 0, -1 );
$args[1] = substr(trim($args[1]), 1);
$res = @$function($args[0], $args[1]);
} else {
$res = @$function($arg);
}
} else {
$res = $arg;
}
if ($close_tag) {
$res = "?> " . $res;
$close_tag = false;
}
return $res;
}
}
private function deobfuscateEvalFunc($str)
{
$res = $str;
$res = stripcslashes($res);
preg_match('~function\s*(\w{1,40})\((\$\w{1,40})\)\s*\{\s*(\$\w{1,40})\s*=\s*\"base64_decode\";\s*(\$\w{1,40})\s*=\s*\"gzinflate\";\s*return\s*\4\(\3\(\2\)\);\s*\}\s*\$\w{1,40}\s*=\s*\"[^\"]*\";\s*\$\w{1,40}\s*=\s*\"[^\"]*\";\s*eval\(\1\(\"([^\"]*)\"\)\);~msi', $res, $matches);
$res = gzinflate(base64_decode($matches[5]));
$res = str_replace($str, $res, $str);
return $res;
}
private function deobfuscateEvalHex($str)
{
preg_match('~eval\s*\("(\\\\x?\d+[^"]+)"\);~msi', $str, $matches);
$res = stripcslashes($matches[1]);
$res = str_replace($matches[1], $res, $res);
$res = str_replace($matches[0], $res, $str);
return $res;
}
private function deobfuscateEvalVarConcat($str)
{
preg_match('~((\$\w+)\s*\.=\s*"[^"]+";\s*)+eval\((\$\w+\s*\.?\s*)+\)~msi', $str, $matches);
$find = $matches[0];
$res = $str;
preg_match_all('~(\$\w+)\s*\.=\s*"([^"]+)";~msi', $str, $matches, PREG_SET_ORDER);
$vars = [];
foreach ($matches as $match) {
$res = str_replace($match[0], '', $res);
$res = str_replace($match[1], '"' . $match[2] . '"', $res);
}
$res = preg_replace('/[\'"]\s*?\.+\s*?[\'"]/smi', '', $res);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateEvalVar($str)
{
preg_match('~((\$\w+)\s*=\s*[\'"]([^\'"]+)[\'"];\s*)+\s*.{0,10}?@?eval\s*\(\s*([\'"?>.\s]+)?\(?(base64_decode\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|htmlspecialchars_decode\s*\()+(\({0,1}[\s"\']?(\$\w+)[\s"\']?\){0,1})\)+;~msi', $str, $matches);
$find = $matches[0];
$evalVar = $matches[7];
$val = '';
if (!@preg_match_all('~\\' . $evalVar . '\s*=\s*("((.*?[^\\\\])??((\\\\\\\\)+)?+)");~msi', $str, $matches)) {
@preg_match_all('~\\' . $evalVar . '\s*=\s*(\'((.*?[^\\\\])??((\\\\\\\\)+)?+)\');~msi', $str, $matches);
$val = @$matches[1][0];
} else {
$val = $matches[1][0];
}
$res = str_replace($matches[0][0], '', $str);
$val = substr($val, 1, -1);
$text = "'" . addcslashes(stripcslashes($val), "\\'") . "'";
$string = str_replace($evalVar, $text, $res);
$string = preg_replace('~\(\s*\\' . $evalVar . '~msi', '(' . $text, $string);
$res = str_replace($find, $string, $str);
return $res;
}
private function deobfuscateEval($str)
{
$res = $str;
if (preg_match('~(preg_replace\(["\']/\.\*?/[^"\']+["\']\s*,\s*)[^\),]+(?:[\)\\\\0-5]+;[\'"])?(,\s*["\'][^"\']*["\'])\)+;~msi', $res, $matches)) {
$res = str_replace($matches[1], 'eval(', $res);
$res = str_replace($matches[2], '', $res);
return $res;
}
if (strpos($res, 'e\x76al') !== false
|| strpos($res, '\x29') !== false
|| strpos($res, 'base64_decode("\\x') !== false
) {
$res = stripcslashes($res);
}
if (strpos($res, '"."') !== false) {
$res = str_replace('"."', '', $res);
}
if (preg_match('~((\$\w+)\s*=\s*create_function\(\'\',\s*)[^\)]+\)+;\s*(\2\(\);)~msi', $res, $matches)) {
$res = str_replace($matches[1], 'eval(', $res);
$res = str_replace($matches[3], '', $res);
return $res;
}
if (preg_match('~eval\s*/\*[\w\s\.:,]+\*/\s*\(~msi', $res, $matches)) {
$res = str_replace($matches[0], 'eval(', $res);
return $res;
}
preg_match('~@?eval\s*\(\s*([\'"?>.\s]+)?@?\s*\(?\s*(base64_decode\s*\(|pack\s*\(\'H\*\',|convert_uudecode\s*\(|htmlspecialchars_decode\s*\(|stripslashes\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|eval\s*\()+.*?[^\'")]+((\s*\.?[\'"]([^\'";]+[\'"]*\s*)+)?\s*[\'"\);]+)+~msi', $res, $matches);
$string = $matches[0];
if (preg_match('~\$_(POST|GET|REQUEST|COOKIE)~ms', $res)) {
return $res;
}
$string = substr($string, 5, strlen($string) - 7);
$res = $this->unwrapFuncs($string);
$res = str_replace($str, $res, $str);
return $res;
}
private function deobfuscateEcho($str)
{
$res = $str;
preg_match('~@?echo\s*([\'"?>.\s]+)?@?\s*(base64_decode\s*\(|stripslashes\s*\(|gzinflate\s*\(|strrev\s*\(|str_rot13\s*\(|gzuncompress\s*\(|urldecode\s*\(|rawurldecode\s*\(|eval\s*\()+.*?[^\'")]+((\s*\.?[\'"]([^\'";]+\s*)+)?\s*[\'"\);]+)+~msi', $res, $matches);
$string = $matches[0];
if (preg_match('~\$_(POST|GET|REQUEST|COOKIE)~ms', $res)) {
return $res;
}
$string = substr($string, 5, strlen($string) - 7);
$res = $this->unwrapFuncs($string);
$res = str_replace($str, $res, $str);
return $res;
}
private function deobfuscateFOPO($str)
{
preg_match('~(\$\w{1,40})\s*=\s*\"(\\\\142|\\\\x62)[0-9a-fx\\\\]+";\s*@?eval\s*\(\1\s*\([^\)]+\)+\s*;~msi', $str, $matches);
$phpcode = Helpers::formatPHP($str);
$phpcode = base64_decode(Helpers::getTextInsideQuotes(Helpers::getEvalCode($phpcode)));
if (preg_match('~eval\s*\(\s*\$[\w|]+\s*\(\s*\$[\w|]+\s*\(~msi', $phpcode)) {
preg_match_all('~\$\w+\(\$\w+\(\$\w+\("[^"]+"\)+~msi', $phpcode, $matches2);
@$phpcode = gzinflate(base64_decode(str_rot13(Helpers::getTextInsideQuotes(end(end($matches2))))));
$old = '';
$hangs = 0;
while (($old != $phpcode) && (strlen(strstr($phpcode, 'eval($')) > 0) && $hangs < 30) {
$old = $phpcode;
$funcs = explode(';', $phpcode);
if (count($funcs) == 5) {
$phpcode = gzinflate(base64_decode(str_rot13(Helpers::getTextInsideQuotes(Helpers::getEvalCode($phpcode)))));
} elseif (count($funcs) == 4) {
$phpcode = gzinflate(base64_decode(Helpers::getTextInsideQuotes(Helpers::getEvalCode($phpcode))));
}
$hangs++;
}
$res = str_replace($matches[0], substr($phpcode, 2), $str);
} else {
$res = str_replace($matches[0], $phpcode, $str);
}
return $res;
}
private function deobfuscateFakeIonCube($str)
{
$subst_value = 0;
preg_match('~if\s*\(\!extension_loaded\(\'IonCube_loader\'\)\).+pack\(\"H\*\",\s*\$__ln\(\"/\[A-Z,\\\\r,\\\\n\]/\",\s*\"\",\s*substr\(\$__lp,\s*([0-9a-fx]+\-[0-9a-fx]+)\)\)\)[^\?]+\?\>\s*[0-9a-z\r\n]+~msi', $str, $matches);
$matches[1] = Helpers::calc($matches[1]);
$subst_value = intval($matches[1])-21;
$code = @pack("H*", preg_replace("/[A-Z,\r,\n]/", "", substr($str, $subst_value)));
$res = str_replace($matches[0], $code, $str);
return $res;
}
private function deobfuscateCobra($str)
{
preg_match('~explode\(\"\*\*\*\",\s*\$\w+\);\s*eval\(eval\(\"return strrev\(base64_decode\([^\)]+\)+;~msi', $str, $matches);
$find = $matches[0];
$res = $str;
$res = preg_replace_callback(
'~eval\(\"return strrev\(base64_decode\(\'([^\']+)\'\)\);\"\)~msi',
function ($matches) {
return strrev(base64_decode($matches[1]));
},
$res
);
$res = preg_replace_callback(
'~eval\(gzinflate\(base64_decode\(\.\"\'([^\']+)\'\)\)\)\;~msi',
function ($matches) {
return gzinflate(base64_decode($matches[1]));
},
$res
);
preg_match('~(\$\w{1,40})\s*=\s*\"([^\"]+)\"\;\s*\1\s*=\s*explode\(\"([^\"]+)\",\s*\s*\1\);~msi', $res, $matches);
$var = $matches[1];
$decrypt = base64_decode(current(explode($matches[3], $matches[2])));
$decrypt = preg_replace_callback(
'~eval\(\"return strrev\(base64_decode\(\'([^\']+)\'\)\);\"\)~msi',
function ($matches) {
return strrev(base64_decode($matches[1]));
},
$decrypt
);
$decrypt = preg_replace_callback(
'~eval\(gzinflate\(base64_decode\(\.\"\'([^\']+)\'\)\)\)\;~msi',
function ($matches) {
return gzinflate(base64_decode($matches[1]));
},
$decrypt
);
preg_match('~if\(\!function_exists\(\"(\w+)\"\)\)\s*\{\s*function\s*\1\(\$string\)\s*\{\s*\$string\s*=\s*base64_decode\(\$string\)\;\s*\$key\s*=\s*\"(\w+)\"\;~msi', $decrypt, $matches);
$decrypt_func = $matches[1];
$xor_key = $matches[2];
$res = preg_replace_callback(
'~\\' . $var . '\s*=\s*.*?eval\(' . $decrypt_func . '\(\"([^\"]+)\"\)\)\;\"\)\;~msi',
function ($matches) use ($xor_key) {
$string = base64_decode($matches[1]);
$key = $xor_key;
$xor = "";
for ($i = 0, $iMax = strlen($string); $i < $iMax;) {
for ($j = 0, $jMax = strlen($key); $j < $jMax; $j++,$i++) {
if (isset($string[$i])) {
$xor .= $string[$i] ^ $key[$j];
}
}
}
return $xor;
},
$res
);
$res = str_replace($find, $res, $str);
return $res;
}
private function deobfuscateFlamux($str)
{
preg_match('~[\'".]+(\$\w+\s*=\s*[\'"]\w+[\'"];)+(\$\w+=\$\w+[\'.]+\$\w+;)+(\$\w+=(str_rot13|base64_decode|gzinflate)\(\$\w+\);)+eval\(\$\w+\);~msi', $str, $matches);
$str = $matches[0];
$vars = [];
preg_match_all('~(\$\w+=[\'"]\w+[\'"];)~', $str, $match);
foreach ($match[0] as $var) {
$split = explode('=', str_replace(';', '', $var));
$vars[$split[0]] = $split[1];
}
$res = '';
preg_match_all('~(\$\w+=\$\w+[\'.]+\$\w+;)~', $str, $match);
for ($i = 0, $iMax = count($match[0]); $i < $iMax; $i++) {
$split = explode('=', str_replace(';', '', $match[0][$i]));
$concats = explode('.', $split[1]);
$str_to_concat = '';
foreach ($concats as $concat) {
$str_to_concat .= $vars[$concat] ?? '';
}
$vars[$split[0]] = $str_to_concat;
if ($i === ($iMax - 1)) {
$res = gzinflate(base64_decode(base64_decode(str_rot13($str_to_concat))));
}
}
return $res;
}
private function deobfuscateDarkShell($str)
{
preg_match('~(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+(echo)\s*"(?:[<\w\\\\>\/\s={:}#]+);(?:[\\\\\w\-:]+;)+(?:[\\\\\w}:{\s#]+;)+(?:[\\\\\w}:{#\-\s]+;)+[\\\\\w}<\/]+";\$\w+=["\\\\\w]+;(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";error_reporting\(\d\);\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;set_time_limit\(\d\);\$\w+=["\\\\\w]+;(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+(if\(empty\()[\$_\w\["\\\\\]]+\)\){\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\w()]+;(}else{)\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;}chdir\(\${\$\w+}\);\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=htmlentities\(\$[_\w\["\\\\\].?]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);\1[<\\\\\w>\/"]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";(?:\$\w+=["\w\\\\]+;)+(?:\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;)+\$\w+=["\w\\\\]+;\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["\\\\\w<>=\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w=\s\/<>]+;(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\1["<\\\\\w\s\'.\${}>\/]+;\1["<\\\\\w>\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."&\w\\\\\'<\/]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;\1["<\\\\\w>\s=\'.\${}&\/]+;(?:\1["<\\\\\w>\/]+;)+\$\w+=["\\\\\w]+;\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";switch\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\){case"[\w\\\\\s]+":(?:\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;)+\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){(?:\$\w+=["\\\\\w]+;)+(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=fopen\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},"\w"\);\$\w+=["\\\\\w]+;\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=(?:(?|fread|filesize)\(\${\$\w+},?)+\)\);\${\$\w+}=str_replace\("[\w\\\\\s]+",[<\w\\\\>"]+,\${\$\w+}\);\1["\\\\\w<>=\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w=\s\/<>&\${}\']+;\1["\\\\\w\s.:]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\."[\w\\\\\s]+";\1["\\\\\w\s\'=]+\.\${\$\w+}\.["<\w\\\\>]+;\1["<\\\\\w>\s=\'\/;]+\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";(?:\$\w+=["\w\\\\]+;)+\${\$\w+}=fopen\(\${\$\w+},"\w"\);if\(fwrite\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\s\\\\\w]+;\3\1["\\\\\w\s.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\\\\\w]+;}}fclose\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);(break;case")[\w\\\\\s]+":\${\$\w+}=[\$_\w\["\]\\\\]+;if\(unlink\([\${}\w]+\)\){\1\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["\s\w\\\\.>]+;\3\$\w+=["\w\\\\]+;\1["\\\\\w\s.${}<]+;}\4[\w\\\\\s]+":(?:\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;)+\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["<\w\\\\\s=.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}.["\\\\\w&.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\s=]+;(?:\1["\w\\\\:\s\'><=\/]+;)+\3(?:\$\w+=["\w\\\\]+;)+if\(copy\(\${\$\w+},\${\$\w+}\)\){\1"[\w\\\\\s]+";\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+;}}\4[\w\\\\\s]+":(?:\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;)+\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\'\\\\\w\s=>]+;\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\1["\\\\\w\s\'=>\/;]+\3if\(rename\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3\$\w+=["\w\\\\]+;\1"[\w\\\\\s]+"\.\${\$\w+}[."\\\\\w>;]+}}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\${\$\w+}=[\$_\w\["\]\\\\]+;\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["\\\\\w\s\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["\\\\\w=.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["\\\\\w\s>]+;(?:\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;)+\1["\\\\\w\s=\'<\/;]+\3if\(rename\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+;}}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;if\(rmdir\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3\$\w+=["\\\\\w]+;\1"[\w\\\\\s]+"\.\${\$\w+}[."\\\\\w]+;}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";system\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\2\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\$\w+=["\w\\\\]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3\$\w+=["\w\\\\]+;if\(\${\$\w+}=fopen\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},"\w"\)\){\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;\3\$\w+=["\w\\\\]+;\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;}\$\w+=["\w\\\\]+;fclose\(\${\$\w+}\);}\4[\w\\\\\s]+":\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=[\$_\w\["\\\\\]]+;\${\$\w+}=basename\([\$_\w\["\\\\\]]+\);\2\${\$\w+}\)\){\1["<\\\\\w\s=\'.]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\.["&\w\\\\\s=\/\-\'>]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";if\(move_uploaded_file\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]},\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;unlink\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);\3\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+;}}\4[\w\\\\\s]+":\${\$\w+}=[\$_\w\["\]\\\\]+;\2\${\$\w+}\)\){(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;\3\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=explode\(":",\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);if\(\(!is_numeric\(\${\$\w+}\[\d\]\)\)or\(!is_numeric\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\[\d\]\)\)\){\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;\3(?:\$\w+=["\w\\\\]+;)+\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\w\\\\]+;(?:\${\$\w+}=\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\[\d\];)+\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;while\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}<=\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\){\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\$\w+=["\\\\\w]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=\d;\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=fsockopen\(\$\w+,\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)or\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=\d;if\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}==\d\){\$\w+=["\\\\\w]+;echo\${\$\w+}\.["\\\\\w>]+;}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\+\+;fclose\(\${\$\w+}\);}}}break;}clearstatcache\(\);(?:\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;){2}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=scandir\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\);foreach\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\s\w+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\){if\(is_file\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\){(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";)+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=round\(filesize\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\/\d+,\d\);\$\w+=["\w\\\\]+;\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\/\w\\\\>;]+\$\w+=["\\\\\w]+;\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\s<\/>]+;\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w=&]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\/<>;]+\$\w+=["\\\\\w]+;\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+\${\$\w+}[.">\w\\\\\/<]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;)+\3(?:\$\w+=["\\\\\w]+;){2}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=scandir\(\${\$\w+}\);(?:\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";){2}\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}=count\(\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}\)\-\d;\1"[\w\\\\\s]+"\.\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."<\w>\\\\=&]+\/\w+>";\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]="[\w\\\\\s]+";\1["<\\\\\w>.\s=]+\${\${"[\w\\\\\s]+"}\["[\w\\\\\s]+"\]}[."\\\\\w\s=<\/]+;(?:\1["\\\\\w\s=.\${}\[\]&\':\/<>]+;){3}}}\1["\\\\\w:\s.\$\[\]>()_\'<\/%]+;~msi', $str, $matches);
$str = stripcslashes($matches[0]);
return $str;
}
}
/**
* Class Factory.
*/
class Factory
{
/**
* @var Factory
*/
private static $instance;
/**
* @var array
*/
private static $config;
/**
* Factory constructor.
*
* @throws Exception
*/
private function __construct()
{
}
/**
* Instantiate and return a factory.
*
* @return Factory
* @throws Exception
*/
public static function instance()
{
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Configure a factory.
*
* This method can be called only once.
*
* @param array $config
* @throws Exception
*/
public static function configure($config = [])
{
if (self::isConfigured()) {
throw new Exception('The Factory::configure() method can be called only once.');
}
self::$config = $config;
}
/**
* Return whether a factory is configured or not.
*
* @return bool
*/
public static function isConfigured()
{
return self::$config !== null;
}
/**
* Creates and returns an instance of a particular class.
*
* @param string $class
*
* @param array $constructorArgs
* @return mixed
* @throws Exception
*/
public function create($class, $constructorArgs = [])
{
if (!isset(self::$config[$class])) {
throw new Exception("The factory is not contains configuration for '{$class}'.");
}
if (is_callable(self::$config[$class])) {
return call_user_func(self::$config[$class], $constructorArgs);
} else {
return new self::$config[$class](...$constructorArgs);
}
}
}
class Template
{
protected $html;
protected $variables = [];
/**
* Template constructor.
*
* @param string $html
*/
public function __construct($html)
{
$this->html = $html;
}
/**
* @param $html
*
* @return Template
*/
public static function create($html)
{
return new static($html);
}
/**
* @param $key
* @param $value
*/
public function set($key, $value)
{
$this->variables[$key] = $value;
}
/**
* @return string
*/
public function render()
{
if (!empty($this->variables)) {
foreach ($this->variables as $key => $value) {
$this->html = str_replace("@@$key@@", $value, $this->html);
}
}
return $this->html;
}
}
class Translate
{
const LANG_EN = 'EN';
const LANG_RU = 'RU';
/**
* @var string
*/
private static $lang = self::LANG_EN;
/**
* @param $lang
*/
public static function setLang($lang)
{
self::$lang = $lang;
}
/**
* @param string $key
* @param null|array $params
*
* @param null|string $language
*
* @return string
*/
public static function getStr($key, $params = null, $language = null)
{
if ($language && in_array($language, [self::LANG_RU, self::LANG_EN])) {
$lang = $language;
} else {
$lang = self::$lang;
}
$result = ($lang === self::LANG_RU) ? TranslateList::RU[$key] : TranslateList::EN[$key];
if ($params && is_array($params) && !empty($params)) {
return vsprintf($result, $params);
}
return $result;
}
}