%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/alliance/domains/congress-eldw.eu/public_html/
Upload File :
Create Path :
Current File : /home/alliance/domains/congress-eldw.eu/public_html/ai-bolit.php

<?php
///////////////////////////////////////////////////////////////////////////
// Created and developed by Greg Zemskov, Revisium Company
// Email: audit@revisium.com, http://revisium.com/ai/

// Commercial usage is not allowed without a license purchase or written permission of the author
// Source code and signatures usage is not allowed

// Certificated in Federal Institute of Industrial Property in 2012
// http://revisium.com/ai/i/mini_aibolit.jpg

////////////////////////////////////////////////////////////////////////////
// Запрещено использование скрипта в коммерческих целях без приобретения лицензии.
// Запрещено использование исходного кода скрипта и сигнатур.
//
// По вопросам приобретения лицензии обращайтесь в компанию "Ревизиум": http://www.revisium.com
// audit@revisium.com
// На скрипт получено авторское свидетельство в Роспатенте
// http://revisium.com/ai/i/mini_aibolit.jpg
///////////////////////////////////////////////////////////////////////////
ini_set('memory_limit', '1G');
ini_set('xdebug.max_nesting_level', 500);

$int_enc = @ini_get('mbstring.internal_encoding');
        
define('SHORT_PHP_TAG', strtolower(ini_get('short_open_tag')) == 'on' || strtolower(ini_get('short_open_tag')) == 1 ? true : false);

// Put any strong password to open the script from web
// Впишите вместо put_any_strong_password_here сложный пароль	 

define('PASS', '????????????????'); 

//////////////////////////////////////////////////////////////////////////

if (isCli()) {
	if (strpos('--eng', $argv[$argc - 1]) !== false) {
		  define('LANG', 'EN');  
	}
} else {
   define('NEED_REPORT', true);
}
	
if (!defined('LANG')) {
   define('LANG', 'EN');  
}	

// put 1 for expert mode, 0 for basic check and 2 for paranoic mode
// установите 1 для режима "Эксперта", 0 для быстрой проверки и 2 для параноидальной проверки (для лечения сайта) 
define('AI_EXPERT_MODE', 1); 

define('REPORT_MASK_PHPSIGN', 1);
define('REPORT_MASK_SPAMLINKS', 2);
define('REPORT_MASK_DOORWAYS', 4);
define('REPORT_MASK_SUSP', 8);
define('REPORT_MASK_CANDI', 16);
define('REPORT_MASK_WRIT', 32);
define('REPORT_MASK_FULL', REPORT_MASK_PHPSIGN | REPORT_MASK_DOORWAYS | REPORT_MASK_SUSP
/* <-- remove this line to enable "recommendations"  

| REPORT_MASK_SPAMLINKS 

 remove this line to enable "recommendations" --> */
);

define('AI_HOSTER', 0); 

define('AI_EXTRA_WARN', 0);

$defaults = array(
	'path' => dirname(__FILE__),
	'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' => '600K',
	'site_url' => '', // website url
	'no_rw_dir' => 0,
    	'skip_ext' => '',
        'skip_cache' => false,
	'report_mask' => REPORT_MASK_FULL
);

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('DOUBLECHECK_FILE', 'AI-BOLIT-DOUBLECHECK.php');

if ((isset($_SERVER['OS']) && stripos('Win', $_SERVER['OS']) !== false)/* && stripos('CygWin', $_SERVER['OS']) === false)*/) {
   define('DIR_SEPARATOR', '\\');
}

$g_SuspiciousFiles = array('cgi', 'pl', 'o', 'so', 'py', 'sh', 'phtml', 'php3', 'php4', 'php5', 'php6', 'php7', 'pht', 'shtml');
$g_SensitiveFiles = array_merge(array('php', 'js', 'htaccess', 'html', 'htm', 'tpl', 'inc', 'css', 'txt', 'sql', 'ico', '', 'susp', 'suspected', 'zip', 'tar'), $g_SuspiciousFiles);
$g_CriticalFiles = array('php', 'htaccess', 'cgi', 'pl', 'o', 'so', 'py', 'sh', 'phtml', 'php3', 'php4', 'php5', 'php6', 'php7', 'pht', 'shtml', 'susp', 'suspected', 'infected', 'vir', 'ico', '');
$g_CriticalEntries = '^\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';
$g_VirusFiles = array('js', 'html', 'htm', 'suspicious');
$g_VirusEntries = '<\s*script|<\s*iframe|<\s*object|<\s*embed|fromCharCode|setTimeout|setInterval|location\.|document\.|window\.|navigator\.|\$(this)\.';
$g_PhishFiles = array('js', 'html', 'htm', 'suspected', 'php', 'pht', 'php7');
$g_PhishEntries = '<\s*title|<\s*html|<\s*form|<\s*body|bank|account';
$g_ShortListExt = array('php', 'php3', 'php4', 'php5', 'php6', 'php7', 'pht', 'html', 'htm', 'phtml', 'shtml', 'khtml', '', 'ico', 'txt');

if (LANG == 'RU') {
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// RUSSIAN INTERFACE
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$msg1 = "\"Отображать по _MENU_ записей\"";
$msg2 = "\"Ничего не найдено\"";
$msg3 = "\"Отображается c _START_ по _END_ из _TOTAL_ файлов\"";
$msg4 = "\"Нет файлов\"";
$msg5 = "\"(всего записей _MAX_)\"";
$msg6 = "\"Поиск:\"";
$msg7 = "\"Первая\"";
$msg8 = "\"Предыдущая\"";
$msg9 = "\"Следующая\"";
$msg10 = "\"Последняя\"";
$msg11 = "\": активировать для сортировки столбца по возрастанию\"";
$msg12 = "\": активировать для сортировки столбцов по убыванию\"";

define('AI_STR_001', 'Отчет сканера <a href="https://revisium.com/ai/">AI-Bolit</a> v@@VERSION@@:');
define('AI_STR_002', 'Обращаем внимание на то, что большинство CMS <b>без дополнительной защиты</b> рано или поздно <b>взламывают</b>.<p> Компания <a href="https://revisium.com/">"Ревизиум"</a> предлагает услугу превентивной защиты сайта от взлома с использованием уникальной <b>процедуры "цементирования сайта"</b>. Подробно на <a href="https://revisium.com/ru/client_protect/">странице услуги</a>. <p>Лучшее лечение &mdash; это профилактика.');
define('AI_STR_003', 'Не оставляйте файл отчета на сервере, и не давайте на него прямых ссылок с других сайтов. Информация из отчета может быть использована злоумышленниками для взлома сайта, так как содержит информацию о настройках сервера, файлах и каталогах.');
define('AI_STR_004', 'Путь');
define('AI_STR_005', 'Изменение свойств');
define('AI_STR_006', 'Изменение содержимого');
define('AI_STR_007', 'Размер');
define('AI_STR_008', 'Конфигурация PHP');
define('AI_STR_009', "Вы установили слабый пароль на скрипт AI-BOLIT. Укажите пароль не менее 8 символов, содержащий латинские буквы в верхнем и нижнем регистре, а также цифры. Например, такой <b>%s</b>");
define('AI_STR_010', "Сканер AI-Bolit запускается с паролем. Если это первый запуск сканера, вам нужно придумать сложный пароль и вписать его в файле ai-bolit.php в строке №34. <p>Например, <b>define('PASS', '%s');</b><p>
После этого откройте сканер в браузере, указав пароль в параметре \"p\". <p>Например, так <b>http://mysite.ru/ai-bolit.php?p=%s</b>. ");
define('AI_STR_011', 'Текущая директория не доступна для чтения скрипту. Пожалуйста, укажите права на доступ <b>rwxr-xr-x</b> или с помощью командной строки <b>chmod +r имя_директории</b>');
define('AI_STR_012', "Затрачено времени: <b>%s</b>. Сканирование начато %s, сканирование завершено %s");
define('AI_STR_013', 'Всего проверено %s директорий и %s файлов.');
define('AI_STR_014', '<div class="rep" style="color: #0000A0">Внимание, скрипт выполнил быструю проверку сайта. Проверяются только наиболее критические файлы, но часть вредоносных скриптов может быть не обнаружена. Пожалуйста, запустите скрипт из командной строки для выполнения полного тестирования. Подробнее смотрите в <a href="https://revisium.com/ai/faq.php">FAQ вопрос №10</a>.</div>');
define('AI_STR_015', '<div class="title">Критические замечания</div>');
define('AI_STR_016', 'Эти файлы могут быть вредоносными или хакерскими скриптами');
define('AI_STR_017', 'Вирусы и вредоносные скрипты не обнаружены.');
define('AI_STR_018', 'Эти файлы могут быть javascript вирусами');
define('AI_STR_019', 'Обнаружены сигнатуры исполняемых файлов unix и нехарактерных скриптов. Они могут быть вредоносными файлами');
define('AI_STR_020', 'Двойное расширение, зашифрованный контент или подозрение на вредоносный скрипт. Требуется дополнительный анализ');
define('AI_STR_021', 'Подозрение на вредоносный скрипт');
define('AI_STR_022', 'Символические ссылки (symlinks)');
define('AI_STR_023', 'Скрытые файлы');
define('AI_STR_024', 'Возможно, каталог с дорвеем');
define('AI_STR_025', 'Не найдено директорий c дорвеями');
define('AI_STR_026', 'Предупреждения');
define('AI_STR_027', 'Подозрение на мобильный редирект, подмену расширений или автовнедрение кода');
define('AI_STR_028', 'В не .php файле содержится стартовая сигнатура PHP кода. Возможно, там вредоносный код');
define('AI_STR_029', 'Дорвеи, реклама, спам-ссылки, редиректы');
define('AI_STR_030', 'Непроверенные файлы - ошибка чтения');
define('AI_STR_031', 'Невидимые ссылки. Подозрение на ссылочный спам');
define('AI_STR_032', 'Невидимые ссылки');
define('AI_STR_033', 'Отображены только первые ');
define('AI_STR_034', 'Подозрение на дорвей');
define('AI_STR_035', 'Скрипт использует код, который часто встречается во вредоносных скриптах');
define('AI_STR_036', 'Директории из файла .adirignore были пропущены при сканировании');
define('AI_STR_037', 'Версии найденных CMS');
define('AI_STR_038', 'Большие файлы (больше чем %s). Пропущено');
define('AI_STR_039', 'Не найдено файлов больше чем %s');
define('AI_STR_040', 'Временные файлы или файлы(каталоги) - кандидаты на удаление по ряду причин');
define('AI_STR_041', 'Потенциально небезопасно! Директории, доступные скрипту на запись');
define('AI_STR_042', 'Не найдено директорий, доступных на запись скриптом');
define('AI_STR_043', 'Использовано памяти при сканировании: ');
define('AI_STR_044', 'Просканированы только файлы, перечисленные в ' . DOUBLECHECK_FILE . '. Для полного сканирования удалите файл ' . DOUBLECHECK_FILE . ' и запустите сканер повторно.');
define('AI_STR_045', '<div class="rep">Внимание! Выполнена экспресс-проверка сайта. Просканированы только файлы с расширением .php, .js, .html, .htaccess. В этом режиме могут быть пропущены вирусы и хакерские скрипты в файлах с другими расширениями. Чтобы выполнить более тщательное сканирование, поменяйте значение настройки на <b>\'scan_all_files\' => 1</b> в строке 50 или откройте сканер в браузере с параметром full: <b><a href="ai-bolit.php?p=' . PASS . '&full">ai-bolit.php?p=' . PASS . '&full</a></b>. <p>Не забудьте перед повторным запуском удалить файл ' . DOUBLECHECK_FILE . '</div>');
define('AI_STR_050', 'Замечания и предложения по работе скрипта и не обнаруженные вредоносные скрипты присылайте на <a href="mailto:ai@revisium.com">ai@revisium.com</a>.<p>Также будем чрезвычайно благодарны за любые упоминания скрипта AI-Bolit на вашем сайте, в блоге, среди друзей, знакомых и клиентов. Ссылочку можно поставить на <a href="https://revisium.com/ai/">https://revisium.com/ai/</a>. <p>Если будут вопросы - пишите <a href="mailto:ai@revisium.com">ai@revisium.com</a>. ');
define('AI_STR_051', 'Отчет по ');
define('AI_STR_052', 'Эвристический анализ обнаружил подозрительные файлы. Проверьте их на наличие вредоносного кода.');
define('AI_STR_053', 'Много косвенных вызовов функции');
define('AI_STR_054', 'Подозрение на обфусцированные переменные');
define('AI_STR_055', 'Подозрительное использование массива глобальных переменных');
define('AI_STR_056', 'Дробление строки на символы');
define('AI_STR_057', 'Сканирование выполнено в экспресс-режиме. Многие вредоносные скрипты могут быть не обнаружены.<br> Рекомендуем проверить сайт в режиме "Эксперт" или "Параноидальный". Подробно описано в <a href="https://revisium.com/ai/faq.php">FAQ</a> и инструкции к скрипту.');
define('AI_STR_058', 'Обнаружены фишинговые страницы');

define('AI_STR_059', 'Мобильных редиректов');
define('AI_STR_060', 'Вредоносных скриптов');
define('AI_STR_061', 'JS Вирусов');
define('AI_STR_062', 'Фишинговых страниц');
define('AI_STR_063', 'Исполняемых файлов');
define('AI_STR_064', 'IFRAME вставок');
define('AI_STR_065', 'Пропущенных больших файлов');
define('AI_STR_066', 'Ошибок чтения файлов');
define('AI_STR_067', 'Зашифрованных файлов');
define('AI_STR_068', 'Подозрительных (эвристика)');
define('AI_STR_069', 'Символических ссылок');
define('AI_STR_070', 'Скрытых файлов');
define('AI_STR_072', 'Рекламных ссылок и кодов');
define('AI_STR_073', 'Пустых ссылок');
define('AI_STR_074', 'Сводный отчет');
define('AI_STR_075', 'Сканер бесплатный только для личного некоммерческого использования. Информация по <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 г.');

$tmp_str = <<<HTML_FOOTER
   <div class="disclaimer"><span class="vir">[!]</span> Отказ от гарантий: невозможно гарантировать обнаружение всех вредоносных скриптов. Поэтому разработчик сканера не несет ответственности за возможные последствия работы сканера AI-Bolit или неоправданные ожидания пользователей относительно функциональности и возможностей.
   </div>
   <div class="thanx">
      Замечания и предложения по работе скрипта, а также не обнаруженные вредоносные скрипты вы можете присылать на <a href="mailto:ai@revisium.com">ai@revisium.com</a>.<br/>
      Также будем чрезвычайно благодарны за любые упоминания сканера AI-Bolit на вашем сайте, в блоге, среди друзей, знакомых и клиентов. <br/>Ссылку можно поставить на страницу <a href="https://revisium.com/ai/">https://revisium.com/ai/</a>.<br/> 
     <p>Получить консультацию или задать вопросы можно по email <a href="mailto:ai@revisium.com">ai@revisium.com</a>.</p> 
	</div>
HTML_FOOTER;

define('AI_STR_076', $tmp_str);
define('AI_STR_077', "Подозрительные параметры времени изменения файла");
define('AI_STR_078', "Подозрительные атрибуты файла");
define('AI_STR_079', "Подозрительное местоположение файла");
define('AI_STR_080', "Обращаем внимание, что обнаруженные файлы не всегда являются вирусами и хакерскими скриптами. Сканер минимизирует число ложных обнаружений, но это не всегда возможно, так как найденный фрагмент может встречаться как во вредоносных скриптах, так и в обычных.<p>Для диагностического сканирования без ложных срабатываний мы разработали специальную версию <u><a href=\"https://revisium.com/ru/blog/ai-bolit-4-ISP.html\" target=_blank style=\"background: none; color: #303030\">сканера для хостинг-компаний</a></u>.");
define('AI_STR_081', "Уязвимости в скриптах");
define('AI_STR_082', "Добавленные файлы");
define('AI_STR_083', "Измененные файлы");
define('AI_STR_084', "Удаленные файлы");
define('AI_STR_085', "Добавленные каталоги");
define('AI_STR_086', "Удаленные каталоги");
define('AI_STR_087', "Изменения в файловой структуре");

$l_Offer =<<<OFFER
    <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;

$l_Offer2 =<<<OFFER2
	   <b>Наши продукты:</b><br/>
              <ul>
               <li style="margin-top: 10px"><font color=red><sup>[new]</sup></font><b><a href="https://revisium.com/ru/blog/revisium-antivirus-for-plesk.html" target=_blank>Антивирус для Plesk</a> Onyx 17.x</b> &mdash;  сканирование и лечение сайтов прямо в панели хостинга</li>
               <li style="margin-top: 10px"><b><a href="https://cloudscan.pro/ru/" target=_blank>Облачный антивирус CloudScan.Pro</a> для веб-специалистов</b> &mdash; лечение сайтов в один клик</li>
               <li style="margin-top: 10px"><b><a href="https://revisium.com/ru/antivirus-server/" target=_blank>Антивирус для сервера</a></b> &mdash; для хостин-компаний, веб-студий и агентств.</li>
              </ul>  
	</div>
OFFER2;

} else {
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ENGLISH INTERFACE
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$msg1 = "\"Display _MENU_ records\"";
$msg2 = "\"Not found\"";
$msg3 = "\"Display from _START_ to _END_ of _TOTAL_ files\"";
$msg4 = "\"No files\"";
$msg5 = "\"(total _MAX_)\"";
$msg6 = "\"Filter/Search:\"";
$msg7 = "\"First\"";
$msg8 = "\"Previous\"";
$msg9 = "\"Next\"";
$msg10 = "\"Last\"";
$msg11 = "\": activate to sort row ascending order\"";
$msg12 = "\": activate to sort row descending order\"";

define('AI_STR_001', 'AI-Bolit v@@VERSION@@ Scan Report:');
define('AI_STR_002', '');
define('AI_STR_003', '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!');
define('AI_STR_004', 'Path');
define('AI_STR_005', 'iNode Changed');
define('AI_STR_006', 'Modified');
define('AI_STR_007', 'Size');
define('AI_STR_008', 'PHP Info');
define('AI_STR_009', "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>");
define('AI_STR_010', "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>");
define('AI_STR_011', 'Current folder is not readable. Please change permission for <b>rwxr-xr-x</b> or using command line <b>chmod +r folder_name</b>');
define('AI_STR_012', "<div class=\"rep\">%s malicious signatures known, %s virus signatures and other malicious code. Elapsed: <b>%s</b
>.<br/>Started: %s. Stopped: %s</div> ");
define('AI_STR_013', 'Scanned %s folders and %s files.');
define('AI_STR_014', '<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.');
define('AI_STR_015', '<div class="title">Critical</div>');
define('AI_STR_016', 'Shell script signatures detected. Might be a malicious or hacker\'s scripts');
define('AI_STR_017', 'Shell scripts signatures not detected.');
define('AI_STR_018', 'Javascript virus signatures detected:');
define('AI_STR_019', 'Unix executables signatures and odd scripts detected. They might be a malicious binaries or rootkits:');
define('AI_STR_020', 'Suspicious encoded strings, extra .php extention or external includes detected in PHP files. Might be a malicious or hacker\'s script:');
define('AI_STR_021', 'Might be a malicious or hacker\'s script:');
define('AI_STR_022', 'Symlinks:');
define('AI_STR_023', 'Hidden files:');
define('AI_STR_024', 'Files might be a part of doorway:');
define('AI_STR_025', 'Doorway folders not detected');
define('AI_STR_026', 'Warnings');
define('AI_STR_027', 'Malicious code in .htaccess (redirect to external server, extention handler replacement or malicious code auto-append):');
define('AI_STR_028', 'Non-PHP file has PHP signature. Check for malicious code:');
define('AI_STR_029', 'This script has black-SEO links or linkfarm. Check if it was installed by yourself:');
define('AI_STR_030', 'Reading error. Skipped.');
define('AI_STR_031', 'These files have invisible links, might be black-seo stuff:');
define('AI_STR_032', 'List of invisible links:');
define('AI_STR_033', 'Displayed first ');
define('AI_STR_034', 'Folders contained too many .php or .html files. Might be a doorway:');
define('AI_STR_035', 'Suspicious code detected. It\'s usually used in malicious scrips:');
define('AI_STR_036', 'The following list of files specified in .adirignore has been skipped:');
define('AI_STR_037', 'CMS found:');
define('AI_STR_038', 'Large files (greater than %s! Skipped:');
define('AI_STR_039', 'Files greater than %s not found');
define('AI_STR_040', 'Files recommended to be remove due to security reason:');
define('AI_STR_041', 'Potentially unsafe! Folders which are writable for scripts:');
define('AI_STR_042', 'Writable folders not found');
define('AI_STR_043', 'Memory used: ');
define('AI_STR_044', 'Quick scan through the files from ' . DOUBLECHECK_FILE . '. For full scan remove ' . DOUBLECHECK_FILE . ' and launch scanner once again.');
define('AI_STR_045', '<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>');
define('AI_STR_050', "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>");
define('AI_STR_051', 'Report for ');
define('AI_STR_052', 'Heuristic Analyzer has detected suspicious files. Check if they are malware.');
define('AI_STR_053', 'Function called by reference');
define('AI_STR_054', 'Suspected for obfuscated variables');
define('AI_STR_055', 'Suspected for $GLOBAL array usage');
define('AI_STR_056', 'Abnormal split of string');
define('AI_STR_057', 'Scanning has been done in simple mode. It is strongly recommended to perform scanning in "Expert" mode. See readme.txt for details.');
define('AI_STR_058', 'Phishing pages detected:');

define('AI_STR_059', 'Mobile redirects');
define('AI_STR_060', 'Malware');
define('AI_STR_061', 'JS viruses');
define('AI_STR_062', 'Phishing pages');
define('AI_STR_063', 'Unix executables');
define('AI_STR_064', 'IFRAME injections');
define('AI_STR_065', 'Skipped big files');
define('AI_STR_066', 'Reading errors');
define('AI_STR_067', 'Encrypted files');
define('AI_STR_068', 'Suspicious (heuristics)');
define('AI_STR_069', 'Symbolic links');
define('AI_STR_070', 'Hidden files');
define('AI_STR_072', 'Adware and spam links');
define('AI_STR_073', 'Empty links');
define('AI_STR_074', 'Summary');
define('AI_STR_075', 'For non-commercial use only. In order to purchase the commercial license of the scanner contact us at ai@revisium.com');

$tmp_str =<<<HTML_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/> 
		     <p>Contact us via email if you have any questions regarding the scanner or need report analysis: <a href="mailto:ai@revisium.com">ai@revisium.com</a>.</p> 
			</div>
HTML_FOOTER;
define('AI_STR_076', $tmp_str);
define('AI_STR_077', "Suspicious file mtime and ctime");
define('AI_STR_078', "Suspicious file permissions");
define('AI_STR_079', "Suspicious file location");
define('AI_STR_081', "Vulnerable Scripts");
define('AI_STR_082', "Added files");
define('AI_STR_083', "Modified files");
define('AI_STR_084', "Deleted files");
define('AI_STR_085', "Added directories");
define('AI_STR_086', "Deleted directories");
define('AI_STR_087', "Integrity Check Report");

$l_Offer =<<<HTML_OFFER_EN
<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 website 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="mailto:ai@revisium.com">ai@revisium.com</a>, <a href="https://revisium.com/en/contacts/">https://revisium.com/en/home/</a>
</div>
<div class="caution">@@CAUTION@@</div>
HTML_OFFER_EN;

$l_Offer2 = '<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">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>';

define('AI_STR_080', "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.");
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

$l_Template =<<<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 type="text/css">
 body 
 {
   font-family: Tahoma;
   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 0px 2px 0px;
	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;
   padding: 30px;
   margin: 20px 0 0 550px;
   font-size: 14px;
}

.offer2
{
  -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;

   width: 500px;
   background: #f6f5e0;
   color: #747474;
   font-family: Helvetica, Arial;
   padding: 30px;
   margin: 20px 0 0 550px;
   font-size: 14px;
}


HR {
  margin-top: 15px;
  margin-bottom: 15px;
  opacity: .2;
}
 
.flist
{
   font-family: Henvetica, Arial;
}

.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;
   font-size: 12px;
   margin: 10px 10px 10px 0px;
}

.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 0px 10px 0;
   align:center;
}

.ctd A 
{
   color: #0D9922;
}

.disclaimer
{
   color: darkgreen;
   margin: 10px 10px 10px 0;
}

.note_vir
{
   margin: 10px 0 10px 0;
   //padding: 10px;
   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 0px;   
  padding: 10px;
}


.caution
{
  color: #EF7B75;
  text-decoration: none;
  margin: 20px 0 0px 0px;   
  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 0px;   
  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="offer2">
@@OFFER2@@
 </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;

$g_AiBolitAbsolutePath = dirname(__FILE__);

if (file_exists($g_AiBolitAbsolutePath . '/ai-design.html')) {
  $l_Template = file_get_contents($g_AiBolitAbsolutePath . '/ai-design.html');
}

$l_Template = str_replace('@@MAIN_TITLE@@', AI_STR_001, $l_Template);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//BEGIN_SIG 02/05/2018 12:03:33
$g_DBShe = unserialize(gzinflate(/*1525208613*/base64_decode("jXwLQ9rKE+9X2eakEiqER3iqqAiotCgcQG2r/jkhCZASEpoEAfu4X/3OzO6i7Xnc23OQZF/ZzM7jNzO7mAeFQvbgm3uQPYwOcsUDZV3wjI/Pnwx2ZbqeEyqH7kEOq7IHSiOwHXs03o5usTQPpQZ0WARPzmi19AITayfQSVNH5+1Oa3B/9PXr8XnOM7C5gYMYB8rZ9ijKHX/YLjpf/DlWFH6pGMwKHZdXFLGiJCvqfuDjBMII60pQV4A6dRU5YX3q+HHEaswMQ3OrKRdBMPUcJcWUgbcKl3hxNbg+C2LsWYae0PHeCE3/EQsq4u2a5tofmf7U8bC0CqWVA6VvNIc3H1sDIgOSKA8tn9zIjYNwGJrW3AlHbnQVjKkBEipfOFCsYDGyAj+GaWXMMHYtz7H15WxJjZBuufKBchS7secctxZRLww2W/ZEtZJMpm+HgWun3WlopqmmIBaoVqsdHBwsTBv+wjXVIamg6rKw6fIVK4npF5ZQluVlZV52fVGqVAfzNZXRy+cOlEmwDHSYtm7ytvj61QOlVNBLFb2S1WnBs3yASzO0ZmbHpbKcmNVm069WF6voyXXc7CZLdXkxeE+f6Ut9AJ8tldM7AplG0czxvJEZu57tjqiqwJ/7kw2wirWpsMiXLLux7UqeSkpihLoPxJ2ZMaORqArfMpeHqk7ryr1mH/p1MdOKYKf6oPdRDD/ess6QKsX7mp/7ptvpzXrEsbTeecH37GzLGjMz9PCBS8/1qQm+PqzlmZcNbINIZ+TFBM4+MXfwodvvucOPVGEIctjOk+s9D+SMDXxnA9jqLnRjYBmcVcNcxqbrs0a48q0ZGzrmgpoW+TStfDZblgxllOQ0q1V2FdjuxOWz7UVba0YrYZQFz6lWtRrNQFptM3Ymq5BPoMJHxf4vs6qKUa0gmLuOby4cEDBl7Tr4TyHBRfoYFUkfmPYBG6yWTphuhNsoNj0GTAwzmplfnDBPC1fICeKIFrvHFZBqeeD7Yat+xQaNfrs3bF9fsDTrd5vX3Qa1kQRsbMdO+DLVQoEvgp1dAM1IPRSKQoyaZjhvEr1195pqSkJGOQesX2j+ag0LSC8Du7tPjuCVNGst4N2CkF2C2Lv+dLcqhYqQAXhQmHbZlTOJHNshbVNAMhrEQwugRhCx1sbyVpH7BJd2wJrDIPAYKABSeFLB/O1JQBRqkBMNzt0Np3g9jFl3Qg2pAZERSHRuDkFCo6HbeB6db9j5Jl8dzKgFEjEP1Oqs4gm8eDOItubWZXXbg/m5oeu7z9SuINY/nrkRg/9NtgzdJ4OBvn3iZqEoiXxxPmB3zji9W5FiSazUxWUD7IhvTkWPspBb1NA5B7St6bkREapYkYPBFMwtuwiygdqiGuJE4M9ZwY9XXNLZ/TJYOyGnQRwFLmnyEtEP9SAqZpKBf1iSUk4Iw2W98aHVZCCn/Va9c1fvU21eLBiNEYIFZLercBWyDkgA3Q7g1l/R+5QkR7pXl+aZ2++4F6RrSkKNfaiPVjuilIqcTTvuc/bZpfUsSTp1AmsVlV+aEv+BrroKwsCyTJ8Nlvj4CIiZbtlu7AbX+HYXs25E+qskjdiVGZuLFTTjr4qkK0JxdwlLHc8chuaZmXFsWrMFWCfmTkBItymS1LEZOaXCyPEtkGcylVmueBdZsGEbKslxQ7PIzp55k/w/PrhsCGX7+wtQpbRk6tWWXvkWKtyAFGpZaDio+bPD+gN6uzKRaVcKrMbaYFzDiWnxSZQFT/9DPXs9eEWw367dzmyUhb2/NuJdWSUrXkKwE7DawPUE81dyu8rG3GniapybnmdOqTLPR3NAYiZPMxKoisGX/9oJpLRWCoJ40PkVIKoUZbE7ZX3jeeURTSslIdvXTrwOwvk5LKWQrd4lGaxKWaiH6/ZH4Omr7rDF7lpn6cFlq9OhBkiAPEy6y4BbyTayYf1Dxx2yVtP1Wletz9QMiZGD+fcu69fD+uCqnmbXzh1rLJoEjbJiIr12vz5sDVij37pjd/UBu2z1SWSrOdHCZJG7WALLga0C/rLmdhAQ+ap5MdVOd3jeb7UYvAI7e90AyWXQ264j1ncWQexQIwEM/C+OFYt1rQpxg+r3MITJAVxRPAE7Xd7WRceBFbpLome1JDQOzI2Pf+s6hIqqZQFtX56HCtB3kalMeOwTTSW9BNpT+wqXk97lrbklGFetCkL3egOW07MM9LmXtqYuWwNz7jgsl5UQoxc6UcS6H1gcMAcfA4SLHd4mJ9qg/gWz/YJdFoXQCnibPJfLMOtzYJLLGnxO/WJ58FU8TCLtsFimKTzsMGm2KEQynAb2XxHO8tUkS4KSoWN65iqe1QZPZ81K0W5frwzeoiyEob/KF3pBFINoDV76VwQ3fKjbQcxufKBfGAE8eNWkKl2M8PR5O/oARo8DamkRB+bEGQG4cUDQliaQSrB8Lie1+cAMzcjsgqYBA+VaTsSr88IkDDgf4opKPkQSNj/wZobQMBfpgWOtABRsf1EPOULfYpwgnM7YrtmVOTWfXZ+vVU4y3W6Nrsy1GY4u3ZhjhVxOct1g0EYyp189oyyswQCci8WLNcjlBEAbzpzRmfPB7fNSgVnvjOYrShJIx/HXBWueA+zwMj5h9XyFAKjjBUuu0pru1EWs1l3FlsltcS4vjeCdGQP8/BSA/YsAsDkLeBLYC7Y2IzYD+8tbGwLUoeKVL85rJMfdDbr5XwlKoB4h1j9qMzaB5QGc7fuOaF4SKn6wAC1Ly/j6aeyz2eCSwPE/GqTQA2ilOxsxSSGjg1bQ7HICStB/FeqX7hDgGXfAslyUbGP88yMvkaq+EcB8rBjV1AvBDWkBAUdcXV2fdc8+83JD6trO2UEPUOxNY3jQve60r1ujs/r1B0C3vJ00Ao0sOLfP6ITxcgEXrsJL89kRZSU+46esZxtolXmpcGk/vOl0OH7NGTunNtTNceCZ3oyXV4WvoYL3a48Q/ZpjzxlNAg8ePpqsPG9pxrwtwftKAR1VZxObIPwMvYDaAypM5+lBYWGwjuC2CJdW4OFlrph9UI4V/VQd9bqD4X2CmiYedeUoI0c5PhqHx/wJkrDglUzi5ThcxY41c7hxzJFLUCXj+OLJ5LgT8G+uTI58ATTxwKvLESi6Eb0gryuKrqa9cP3TaLmdhqulDuLMq0uc4CAFqyhX5GXlHQOTS6LvTGmOUH8B2rc2oApiECZYOcT4B+xofHw0AfcfqRKEtT9sC/87vlethf3IO1eFqFscbuwUcVGGYZofR5eOiYtih+aasybB/wrSK/QmemLlgxc611RcleRhQld5cUjOmqb8VHSqSrHfW4iOyjQEEjlL0w3p+fwZnJ1hBplsfDu4yAxWT9mbMDMzbz7Vbd/4cvXnejwOrIvJpO408tWz62q8OHPf27c5b77/5VPzpppvVAtf7LjpTvY33U9fLkqNzmxj5G6C6qaacep30+jsQyk7/5BfdNZfn7/a/LkcSiO2XMZbTfLPKkw8JpNMXaDq/15j2QKYTESt2hvn14br3xrm/63h5reGYIT5DMgPhwWde2b0BIZcN6PlydbxXRt9pNrR25o5j90JVr/lDMw9ILTNfpzUbDeaj+IAlOkoWgL01KZObK1tLZnMaGChC+/wDzxaZ8rVmCn4fR46DqPGdK+5u3EmUPP/M8wRnwjxbgkB1yx0JjXl6AQkKWCKOgH/yp3j+p7YLtipmkpfGV3PKCfHCovirefUFBTOtO1YQWgiqjpgfiB4riyc/H4QxKT13iSSh5EDfOQFFjXW6ZGJWRwvD3gfslegZYBkfefryolifUBu460ZuiiPkaZEBMRGyJpK8u3xyTmpoB5oH6Q0b67f9DtY0iKXRONN9CbgIP4ckqJSlqCRH2uaGwE/mzY+QVMnSba3B8CNtJwjy5InoM/C46PYBjW11nJJfawpfXGJQquBANmJVKJ/l0gZySRVHGh/G/tfxsH2heSBAhfURWhYmm6J+xMg9VpCgSfsfV0F8WEipU58eE5CObTBC0SvTEenWI9W44Uba8nDh8RxQp/FCy9aOpZremAXw0iLYvBGfQ07H4O1XJjxCfSAUixKZVO8LG3AyLquJw6woZ44ypgwGLRCwXdMeFuWkE1fjcjnmxNK6tmZueGM/GFeQfAAVPP70ze34em7vf5lf/3zfWetX3zfeDO/8/7nSU4fr7vjzbj3/c0t72SIToAFIuBoCitpC7sIkjlo9W9b/fvE5XDYG12CmIKI8k5cncMcwH7YSG3m2rWJeXzPjkxGAVSwOpfBwjlgCeUfiYQv6qEYKQ8KqMLIWabYTqKSupLQwXzRoFx0HpQv5pPJufMAPYKmG8J66aCFV0gf6RznSjI+3eCR3vRwu4RpqCNeWxK6+sgPwN6BSVAt2w1VCz3wo8z4mGmgn/HmXoncZ5D1OFTATiaPMrwDvW8GWQyXh5tegJwhRdi5+qEwQQFkcx0FrY2WAPPKrMnzE0uAcnAiy1w6ZF3McLpTf8v8jrbcGwblVfwyzmfdD3fVbfvyOmstvGf7sh28v3zvfV7cbj9/bEftxfl6bLzPtt35dGy0p5bR35ofoa07nVuL28Xnj+89y12744Xnj+9a7ofB2ZPlnsE475fY9kOjv/1899mDtttO473x+e79bHzZn/3TeHxyVaHQOoPstH95G1vN63n74n2xfX62tPzbyLwrrG5asz/b57b3yb8OrvKbqH35adP5Up9+ej6bf777c/rJn0+tL2dz60tr2p2veaicBzXAzqBtAAg71RL/u78/GHumPz94fHxn2a/u9rX7/x0+7ifVBLCOsO9wBb2iJKciRUQwExEGK9/WsvvVipHVC//1lUyKqH1ZhooBzhKw0KVXQ/GT//QjyjI+9x9eYVkG6P7uC5RlMOFfA4U5iqoge9wBPAcccuHEfRClLUZ7NTVYNs3YvAdlaT2drSYTJ5R8RVGWAmJM5FSEk7VT9BzxaseGsgo6HfJeFICpIDJ1QE4AZoPuF0YlkwHoEg5Ai+svuqLf+vOmNRiObvrtxOOhOwFtC2rld2XSb523+q2+nBsP6ZTRleUgCSSHsE+KV1N4q4CRKXDHwRcZrMYYZ2A1GRxDE4mvz19DWUTTiDdR5ItQ7KdASaDldpcJ2zzexwBI8aGPqVeFVCBYiSJExQr6KJ1WY8hy7LzfvWKLbfTV0zHPxe4wwAKo0gfDq/2FRX+lWOIUmPOvGXjdf4lxCmJt3wAMb3S7H9qte9B7UWTHoznHnxRiQs2hmjVNmI2ddtPImo5CjafTkqlcMpkqwl/dEg9A5ikCz29mLB0xJbOKwgyiAS9jAmKZOZloDBAD185m6eZg0AFwI28XTM3xUcoiyrRc2+yYXTi+Ax68q8Pq8/qKkI6z/s2wdd7tN6TLRPEpjA01zBXIAwOM44Ikg3sPkA6oM3Gnq9AU3ilFq9CXVedmLXF0ksmc9VuJQ7iDe/irJ+qND5nMCVepFLmqYGwS17UGNNmt+EUL+DZaIceq48De/r1yHFBlZEf/0NGWPFiV1lMdwb/a6RTg2MQDEdaoIJn89oqZgc14J0OAUwx+xLNwhajQ8Z80hdi83mi0esNRp359cVO/aPEuBR6ErEcIdVc8HkJRMYwIg1HRDtWladthzbQsZxlrjU67dT1MMS5AyUPLCyKH8dIk+8b709Lj5BFFek6Yrwn2QQHBpCfAtlg7Jfl2wkWEcAK9j1Qum6okU+mCEJOq1C6qDMekjy0uMmAirRksaAosJkBH1yeUKftRMAl02jf1244W6Fglf/zYOZZVmTJQzfuZG0ePAFnZQ/jg/+H4NuDRcIs32DTPI3DAy74FLuhyFbP0iqlwOULx4vCU2iFjYEjeAXfP05QMcng0A8VBf9KuktIQc7xLZvlM8xSTQy49uhxedY6PLlv15vHRsD3stI6tqZsWjh9PiVK4DmE2D7NoysoHBmCX7cEQdcUh4/eD+m0Ly3ifgiCF6gVTQPanyyByNyNgjJUL4EbMgpKnsOD/T1v3jozcSOjV+4QwdwmhnvI8DAii8ealkcKd8Ajd70fRDBe2CLPq+bfe/O6qZLw5/eN0z/6w+elfNe+ufjb/T6YV+T83/6fUxIrez5+pE/9T6q73rRd84UNUBK15fhgpvjMcsNKJR/R9WP54L6fIt6yKiC2Izht1PQvMhZsU3zXqr/Ab2YECiwjFe9sBUXwQgwTqru/GAB4Bj2m8WAdq9sIAWDl2wWtJppi/8rwUA0j1JIeSnAFuC0ikTvx1aUYzijzASgIf6dLN4T0oPWAICPKLd7qOHO7xflPxklKus8CNdICjju5jBusHczyQS1n/a08xJeSmao4/4D/2Z6AZNhOP9wlpmxKPiHNWIehgXckAQP29IW+UFOogn5Ms+GqlEitKFqfNhCRQUURKyBu3nYnrOzaontBcfIPl/JH89uqmpngRS3um8kN0Lgn+hZWFtRgtzKlrjdBzcqLRdGkBiFfp4d1VXAM95C4j8M9nsFa7YjmNsoxnCaSfUAFuAVzonJ+YlEuoPQHcH4D9Wph79pgQt8q/92gtecnuMnHM26JPxZ9AMcbSKyXNVFATREyy4vZqsWTpNHJETb0BPXtdv2pBAbZfB6FdU3v1weCu22/y8apiPOo8IsbSlEa/VR+22LB+1mmxvzawsG78F9N2V53u9cVZp3vGrrtDdn3T6SQl0/MNHGWK/hUKDJgHo4BaLlXFf2i5vlQryHLRLE1NlEN14WEB2LRqBe7MInHcP0Ms8RDCUKjYJe8sw2DsIPOgn0Mc9reaGFwnCQXzFH0u5150Iap3ljtmGWDTDFxjbI/E/5ABEPql+JCBr/S6YPfulA8Bk0Dig5yoYiYb5JjVfrLM/x4ONH3/JPnwhn+d0hfr9du3V4MLxu+oTTIjmZ+i2zhkBFZFG3QbH4rwbgAJUyybYlFgzdG6jlxwqZdBGJtQ6WIJSA+mW4HpLeTib8GP/f1DMcuiwETqxBHv/YueozB4CT2+GSZyNTUM1rAinD8m4NXORhy0AYqOVl6cuvo0+LMzAqbqNuCxEthhNzliWSwXKhWQsdOXoAXoifNrCqJgIVccUJBkKtAX5OrqnI+AXF+mnSIUHidKtIa/UaDev7i9z8Hig/DHIzMOZFkWtEmSBSGzXYdPkI9K/kCV5P4/NJgCWEF5vFekAlMeU9MgsEc8wKm/UmGyJW+VFEbNkCJxc93uXjOBvBPZBANgfXQish7aA0dx1tICJnU2bnzITo6hTfbl//b1sMu6N2SuWUINVjFOlD8kJ1aNFCASkwdusQHRFxYEhXHnJFFFkr2psfN6Z9ACilPeHkQv5KtGSQcEODzKR8+86XW69WaryWAequ08K6IpuZLo00xWPqm5X22poENB4A96ktjtQ9BstUSt6k/1lyo5snQiYIkSiVpNU+1J7RRMKEIQLWG7Ec8tiMdGCSD6N5ww7y238B29Zeew/C1wHNitGUas7bN/iRoyYUANuT+H5BgfsJNjlLQINxxo+jsQVd4cObSIoJ4z0Y6YSG20c4AndjoJlTM2eLF24m1lSpeksgbPfQWViJC83W5XFFCFmsIqKoqQPe6lj1qEaBC0ij45sZz4PlLWFFJjqjN3fQtwS5IrHcqKoNIZjUwYaQQzuVcGV8MeJxVA0aYzXk0BD053Jb1V6NAeQ7jGXZ0A6/jtIx/SEJh+6gVj0wMVhurkEnSUh8kDbgHhYmf44Drw7NGr5EKKD1QQSTpUWaCw9/IKOwCklsPb12qMMjGodBbmkn1Dxrf5XkAgapL9IN3s8RLwCkyfIq9aVs+CJypGkJveJhTdRS5YpsBObc3nHcaj5E0R86mgnxntY0LCHrCj9nXvBmwjGN+aItdbYcNPPbina85mPMWDpswej3DNT7mihcmBnhvZY+B4E6gCng/4KoGfkw8mu10mJwtm9mR6K5DzbyzK7GX2TDBSmekh3Bxl9rxYXB9n9qbyWsnwyDDe/aABKStU/j2mkFgt5/Pf0Jsyn4POwxlRfONvTSV+4xPdJZSkjLIpbZ0djYNYQwwa3cjttfD2oAfiwMN9V79HWRDKjMDvvMbALcZi3mDkdcmfQda8iEkrByD2Th1oyp6q6LsnA2u+voXHWbNQA0ykvS5Opg2YOpdqyhihAvECfwpmJT6ItWzKSNZC+jpMAzotFypGCZZxd1kWL14QfU/Ac6kl9H8OQesiUdbvdoejZrvPd8FS0gfxPmIP9dvYm4P7dZ9//MG+s2noLJkSBkF8sDnIHmQV3oPStsAPp6hwcjUtQRnITCLFL1wgFljEEAvQV9/drJ3xry0xf4o343H614oOeoCZBH9cWdg0nujM8QAXk3cYJN/d5n+pzO8qtwGYaXcha+UtVfOHVIRNQ1PCEMHHsx/fVIEBgvDHSYP7jzXM7N+Q3t3DCDnd7zVWYQhcxTM6NT6izE2fAhrGIMIrBYsB0tZg0G4muMoqSfdNBQhp1wApApNE8IkxU666gKSx4vUQeL+yYorQfEu4dkI4GCW5gxm3KAFcWEfBSObA85TpKCNiPrdmsDQp9RwlPqV2l2TSUmqd+DKlzmwb9DF9Y+qOLuCRVkoldygFc7KTB9EMVtDmQxtCO/ENlfpRZnmMUYmjDAaXjo8ySGvQQ4Q2foBMLcF/B/cHMJ7GB6BdT0VhsgmX75COsNM7uHPIOFA42iU5qNODcqzyfAR6MMKxJBOtKeSXgirlGqgkwwjng5E1m5MUA4oZWzXwcTRUz443wWCgCg2wXAoDtj49hTtzPecjlUR4GNxAm2VYmsCGHkUzdgzGxg0zcDl3tpH85r2kxQ8dHTsCrTVoG+8n0M4nUkDqqb9IAprkzStiugDDQLjYPmkvRDHnlOvSXpzAkwmMU/uW/ZE4/pb7kUFS7PnjaHnI+ZwSEeir/y2X+fSSy+SbA0ZoUCiXGW/ipUhkyj5/ovM2oDloiqinB1A+Ar2dvhMtgaUcHfeBO5rIgF4CF4j0J1owXew2EMKlwUjiUh86m1jC2jJP3cGovrNmKHHwaMdcaJhN1aEHuKWOhkvf9ieB3qSAexBur8mkU6MLJ8Z+WKJh6Ba3dTk2FumyPJlM0di4L0tvkHrnT8+L/O9vr6RggE5jSSaJf4J+Xy23hxOpKWxPbC7GtK8IRbsYg0FaAU5mysMxNnJjvh0mz3eZZsEuglWWZOhhKMGJnTDS67atadoQF6kBUCKJonsRunYbB8WsXRh4ETogRLsUG3z1mmPUUXrTsdyF6SX1W7TdIFs2L+CPJb+vQCwBc8IpBXxb4bUTI3GXsEAhEojm/Fs9WlSqE1i2LCOyFpgigBZxsATVZ81SrAFk6PYww9EBFSwyISoG+jFElhdmkDI5mDW4fG9cflnF1jzoT5YfJ9V67vnPbr6+bvbDvrOtri6eho7zXK5+rZtBzsyG05U9/zzvV/omH6cswpUqGCQOg6PE4+5QTQKNWoLVxKQrojGHX4S+lIdN6/xhc3YGn3NQpKjGeGO5nRT14ShYOr6WaF8OYrF9Pk9JGfJQALd47rwm/RN+K1Q+5WbQPEwIDBLeQ77BoAJ6TNbMCQPB/hUZYm9nptbnzNPHbD2XbTb7zWm59TzP2PvGfuXr09evg9yH7H794yfeSe5Z/iafT6/8yBUgT6pg/EA4yiKuj3tAE4+1WsK2g4jbX75/t0D79RgeQGB9U+wazlPqhIL/T5yzfgLge6vpejKzBGdLS1iJ1MzZaCog3Ywz5SaqIjcGrtdrPc5GcstSnlIkSBMAKk4UaUTb3nkzpU6FvwwgVdKkKtIp5nOlsnQ32exXDOng2ZesGB5U8DRgak5XN7wiJ1weGYhBE5mesM0SnATkQ8GClNHAPKPDY1A8t8+rDJGLqmRZegxjs7TLnHiWRVshHi+3ViL0YhMP3HfcSrX0QIiZOYkF5apyi+p1++Ki1R/o4ptXlnYhxl3qhJYHZwkmf2/vl1KAMoSCuUtFqQhU8dFqjCwKlNR7RErw0FLiwEGNDcMV6MYotgOMNL5q2u61qNwJw9flg2Gze8MfUBE+m+1MmG06C0C/0N71a4mM7TxlMKSc2A39exkO+6pMkFy6GHzni3L/5pFdomYAd2uf4VuTWd2H24U7ncVs7DA7WPtvHnxsKhUza4jdDAblQQovURzc10NxLR7aZco+JnmCSN/tndjn/XJCfUGVYJMEYQ3Tc82IeVFN0b0IPZKZwo6P2c8MXYcWfxEjK7eahivwO0LnK0Ul1yPXBy0KljVYhZZz7oZilgSacAtfOF2aIViWOugx3DPTw7tQsx2+cwOjuTBv0BGIDAAgWvGKNpPyYQpimL+teOJtNLXHLL1kb21gWNr++jZKsLdMg/IRYLCJu4FB+TBFmQyboM3Bbaz60lsBEo90FD5N+eNbuLTQyOlIfAvcsh9QAIgalHyU1MMVP0XGUys8QERbq2ZAohH2Y7UaSyzXGDjmLeVJLjeOgrkfYATVcxZjfoDIoMxJoYhbHClQBsKjJeKZI08jAkclRmNKF00CuMlls+BT865iN+wRsBwAOJ3QiUF5kqIMNG0Z+KeeA7AuB1fo8HxjPBKJOhmK7IADzWe13+p1PmEB3xlt5ORmotvuWb/OLurXF11eQRAblAzwsZEHe60+I58UwWpmN9nyhP4l2f+YumVHRyyfBKaGRltsZFCj3ORVo2dsVOAjy5Dv6S9u84R2GkfRrxl50vgINB71vzeUWUAjJ/1GxKAjAI6Rpk4xiA7MCOTFkhRTPdxfDcRNEZ6NuLNt8L3hsMinL9uflJkbK9QSVZImZIpyHrCITuadnuElZZH+fX/5eWnlvewnUM5j/89pb1CfD877Nzfn1eYwW+0Mbm4nt7xLRaTEsnbWxE+pXLJKkxI4PCUrn80XSna5WpyUDfjmHchAVOksKEpCBmaZocyETXbNoPQBrpQaR6v8PeUOsikrWIECoqIkS7NcEggIN7m/1+de18v+fOScQPd/30nw+0YCai4Pj2BKFCQgBn2Vjh0PfFQmBpSn3MztClrk4JOHjwGfAnyK8CnxhvLwJeZpEE/EMEflAaSi3hhiRPgdXnOtkZdIDbf/rEBJ4E70dJql2D13LpgIjzAVhN0JH5miMLqKeP+SWJG5ix0bl50mewCYFC9dmx3vNDyPlFEHuZedJmdbFkvz8ooATGHBHFq63fPjVmbyHA/Oc+NLo38paFAVVhl3CC2iKVNxQz1V7U620sBfAteHt34Hxn85whvehjY2GZzIPCykIYBOsnuCogd4w1RRgzAo+cg75gVqQM3KeFuxc559i4O54//g7Yzf5+e7fOu3wffEg7IAGwD0YUgkXlEUIGbl09T79TtBE34KFrg3nW42Gs12n9170MLZMBURt6a6SZYXE5RkxXOkYLHCKicYhYlxryEKPsawpdaMNFjeBYDMe4EfXDvxKINoBg8M5wiEUVh/t6sehZ+aUEwY2fG3XUT4d8QNFlfCBXlwyltZLm6qOpUXEvMZFACmrTvoD6aPz9PH4KoJb8b7JTb3yxYp8QBDACUVFc4ois0QvDpdjfA4C9yDJQTTSXsfdHmDmwl454IIQ/J8LQPa+jrf/sE0XpZinuNPMYdBtyjxsgBfNvn212oxroyo7byJFFIfTSaZUUF18I92r0F5MBCll/1h/xTB019vw/kvqhACBI5YL0dLwE6R2GmF18IMgxVGKMnq101eDKSLVxFVrMaeG80SrNtvtvp4nvSvdvMv1mwNGnz0ilDeKkwH4zTwFUn1yIR+xLJkOidkiCLIBYJ3u6BPIqOdHNX6DtGoD2gpqb/TTmoP952HVP+hBkjqgXemaDGCgNed31y1m73vd3X4gFgE60hvtL73eo3vAyd0najERYACwhg36We9i27Tm7XW9T/rnas6/etlMpni1qpflbuf4NKH++enTNfvTYwq3GfWvBkfKS9WiLbgBnHO0NC9c8x7DYwiIDZkrXcvl2myDiCmr8r21S9JsUIU7C3zDR5yxwQxxbO7hFWkhOov5ZJ5sHLv1yp3Md2Bf4MiwXRS1bQdOg/leAGgGa4EKdaL9j4ABw5ck3V6ewDyCoJ2SOdcVJT4SFcxVjdaTHALmL1NiGUoCQW6i2nDGgtRJaWCa45pFXhdwP3AGEXxruI8j22gC8SL5BFzKDHnkTMH6fGnQiyL4uzqp9Z122j16TcTjJI8pKl2u90s/Xu1KY03kafJ0+1XdncMpFwIG8A3epdfu/lgDZ5oA/XL5jO+xZD7ggaFNdGbe7WDDWiOO0OmZuxIiSvJM8B3zlhsNAK7yQ8PGyXpQAP4JRPF963yOvHLFj0To4OeyQvL4qE8x4Axqeg8CNvoQ3RXMfzlzcQZsKuC54kfa6DwHtJgNLptt+4Gw/qw1bpu9D/1hi3ahGHw+NyB0g2uR2fBlpflhOnqO2Zn1Ftdu4NZiw9YFkd/bfD7gYzPvNDggO6zY2c3vKQgoqDmGGBO8N0cu8+2jMLBHTDEdxNAov/d9JyN6fP3LEtFuVxa3xeuvfy+5sLMLOf7Ip5//5JfON+j7WLsCgYuS8f4FNMpmjq7V517NXh8PDoqJPfF/f4+loA9+/HDeTI9EFC+SGUZd1CjmeF5DTzNxCvk8bLeyp87YV78tIqxi/QcnWCogMec/3jz5g+eMTYo0oNSrLoLuW8QLlPZFJhn/VWB6ub3c/C3kNboMvlbbWE/l0/x8wp8YPJCYWCo93mEflwq1HK0l5Iu8Vq17NpvFpi35q9bkb/Mstvei1tRd3a+Ik+evfy6QMtvdpwBt/G7w9zIypvvCIt4uTzNTT/o8n0WWyNeXhLlR3YQH7fDNj/Jb/BD3ED0ci8X2/vXd+BHtzOzu/nnwu3HKm8itcG1638xb90Q7NClOI1pVOQvTrymcbxJqcv9PPzJA0XhSr5UVRzxNzbLXMh/p6cq1YK6sIs1PKDBTwsGC0V2ygtPJhiacaVpNKNWJbH3c3aTLTUal8VDdfpp8JW3lEdDL9rnlWr9kPiC10gFwOPGnJxXV9x4UKzHKJCU08aog6MItS1flqOvx9wtgQuuavlR7iIdJj21bTpLjYluXlmW4UU3QvaW6th8ghbycKBRlb+Ec2aOt6NmaM75ASijKtNSQgdy7wg4gxKsI/IVRyPioEJWHr79RZp4VU5AQNyGuTuTAm+w5yxgHntwleIN88INSx4y1d3fT6qhE+s1FF8xkoyBcAyVX5jRXFeSD7X7B/y9pQflUdPfnSQBGuwKWHJ3mYl4ZK6QFYfmM5nQBCyTyfBSeYD56E06zRU7u+k1QSum08e8xe7YfBhMnE0Q6rvfYcnK05JX4A14YKDoh1p4VYWrxc/ds5uLYavDC6WHcm7OHUzSO6E4OVzISfOF4nmAp9MoH3bIxZc3yfEhB6PH09H/bv7HC2UoUp5A1ZBwvEry4mcnDJrmtrUR+3MK/KeVoGaw8mLTvzRd8RsCBfLZ6SdngtXSdsDVt0QXcRKXft1p7jmnvLQs+HDquzHtGgXoE4aii9y5bK1icDruzfgRd/zoG3j5pR6ueCO5cxn1FqDR0Xr5yw5xXkRN80J0w2zW57/OUchL90HFk7yUxhzFwQh3V69NTlh+tBsXeHzcDHwMMB0zVW6CoHAInk7ibSXFjimKTXtXjniNlF48R/guQ46WPMNa4Ee78yIY++vGrcy7w3cZGYrhrUuCLHyb78shm4AMNxesvPxli1PXt7wVeE2BD+KToC0yvAUxGLw6uWqvzo1Elo6sv0tHY16Lss5R3ad0VvSvaem3+fO3/HBogZxpCvWJc4uUvaSs4ssBM3rPEPPlWEunzXhjUYEDketNJpL//Jee2ZkTXi+4GtTh0DT4rxgU+BlzVGG+sx4tglWEP+DC2WrnRmfuzGXDA27cLYRR+FdR3TnSXEUtArnBvmDIDMULcH/hv3/wX3kn+QMQqPQwYZ3ALLvywNnSkLr1YZN3aHKZd7yiKtiIH9pgmHBhdBD/x/8F")));
$gX_DBShe = unserialize(gzinflate(/*1525208613*/base64_decode("bVX9b+I4EP1XvDn2oFIpCUmgpNvqKLDtXT9V2L1dVVVkEhOsOB9rO7Swuvvbzx67tFodv5A8j59n3htPcDTwop80ck9ENIyclKxwQrhzQiNPIf0gcr5XDUpwiepGIoyKNERCclpmOqavYo4jp17XYk0Y05CvoEE/cj6ldIMShoU4dZasSnK0lNuaeM7Z+5VUVvUvyFIWzplmCgx5MhrtyUMD8XC4hwYm8dvFFKfpViNDu4+u90HHJujzC5BpZKQQT6X5N1miuQ5DS9jsaSE8TyuxoWw3f2XwQI4wci5xkpNURaMxW+ElkdVXymWDTZQV5NaX+7M93zLOZcWL4RtjYPHrKmnEOzy0qb1WeaTkhQVd6ihycCnpG/vQshRbwMgLSQA/NpmY2u5ywKBoZakO6ji8QF2OuiswEsrWmRPUpJhVAu1wxpsdlbCsqw/VKa2CCIEzgk4R4SSLOamZapiO8zGcfOz3nUPkmL/XwIMT2K918VTuteociZx5jQuSts8+LTlY3dcaBW7kCCKTqsop6SBd0Q8WP5NljNOClnEjCC/VPgdZUi2gr2wlTBC66qyaMpG0KmPyQoUUHQcEiUGRgwPYoaUNVRp0hTpUxAlmDC+ZSt8EIVym6IM6CnOOtxY9bKVU6CjNb3m0E35geDqtmvBCoN+R+zJxXfcAnZ7uH39COHikqkspR727C9T7BrC2yB8oljJhTUo6rXg+e/g6e3hsXy4W9/EX9RaPL2a3i/aTOXZk2njJ3WfhwyX1tW+Bqqi9lrJOj5KqXLUP25t1pRR4fUtWme4h/aQAal5gt2fr6NW8SnpiK3q50piw3hYXuFdLrryNRVLVBMK1i31fCb7BrLOijMQZkbEilaTUgusY3zaSkveZU2nk7W0w78FyYFuwdXF9dz6+nj+2Y/WDJTAnhJ17Y9ragvavxhhUNdk7ZwRwaGOUormrpIB74Gvt+wrKCkxZVxSy7tLyiB1lVZUxoiQqIMxOCNVt3HWh5/2RvVlTPQng2oPkgR2V07dRGXg29BHdr5WUL1v0BLgdB49JlRK+M5gWyNcD8kO3+5suBCVFeuq0wPPxZDK7Xzio2zUjMLCz4OmRV02ZdtyDJ5A5CF+HCi3GUr4lpwXwlIhTzPMJJ8+fOSVlCuIEQ5N43mfM91OAbNlX+ZXn+0OARpbhcjy5mk3R+Xc0X9w93MD4da17N+qKqW+CEQXIQ89uu+FH87Xq6DUuv3mjAaz1zeCaEppijv+F7g99eyn+omWtRlpV7AAOTKxXDv1Eem4JYGjPvVLfnXnOm1pd7MqcO/h/mqGhmZAyo7tLbGiODcj9jV9mQWkIRgY8v1b1frn9E5IbuHbUckmTnJE/nJN//gM=")));
$g_FlexDBShe = unserialize(gzinflate(/*1525208613*/base64_decode("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")));
$gX_FlexDBShe = unserialize(gzinflate(/*1525208613*/base64_decode("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")));
$gXX_FlexDBShe = unserialize(gzinflate(/*1525208613*/base64_decode("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")));
$g_ExceptFlex = unserialize(gzinflate(/*1525208613*/base64_decode("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")));
$g_AdwareSig = unserialize(gzinflate(/*1525208613*/base64_decode("rVmLe9o4Ev9XsvnSXhJqwLxJS3NpQttsSdIFso+Le/6ELUDF2F7LTqDx/u83M5KNyWO3e3dfW2pLmpE885un2JHZqh7di6Pqa3lUax7tSk/4C2mVZVKZ8djWb+E83H0tjkxYZNaPdi8GtucELs8napuJF1sTdZzoHu3iIPBZMuEjS6scJTjd0NM2bTTl3LWjYBLE0rZxuqnZDs4vP73v98/s61F/iBMtnGjAhKY69QT3Y5xp40wHOUoWctvlnliKmEeKYQe/EvZzhQy5L3lklVkUC8fDwyFBdrAusjFhg/7lJ9vJuZtVPT46+dwvjpNkWlsfwn1XbWrW9ORocKI325zXRAnVqke7Pr+zZGkwuNBsrX3rgBaQjNpw5olVjqNExkUBmiiiFojI2rNBNj/3h9aNJQ9v/rH75eN4/Nke9t/3h/0hvsOwhT+v9PxjXijVRg153TDj24nxr6rRtb+UYH0P/tEBD9+N8GCv4Yk784DIUOR1OKDjMSnhG07zT5AlvopBDjB6CKMTJjlRdLTa1TefPvrkrhZY7CkA2u7EngqPiGtVLbBsO28ZEmd4vKcFpAuA8jj7wI20axlQjbdwpNGgMENIbcGmQkoeo7D2j/E3lys8Z6K9r74y/yD5IiDtkw/9y3E+nsnZOoCfly//F07IptcrLh1cgE7RQujMCI0GKZ/ERB8V8TiJfG24m709MbFDFs+JDkHTaOR0thblRs2lD7ntZyyIEBHSBIQUP/ZV8XxWeUsOB0iJYLGO3xIDxAoo3pp4/FbEEaNBggPibuKyMFjxWPhK1YiDDo7fCjZTi+vVbMwRzBOSxkjjVRwMo+BWzIRHw7XM+WikjH/h0+lG5fW69hXqkzM0ZCiso3RrjS2bnvBpEHE7Blgr2643c8OPuYxtjVg92dIbKJ+BQHXmLAJ47dJ0WyMZxF5SZ7jIz0ALUDANsCzuEbzFlLSR/cg4CgOp3rUiRYgKIVqUXR2wMU18JxaBD/RhcAeOUK2ceIGzsG8FvyM//NCozi8/XI1HG1k1MhHbNjpj235D2migiGvmhg4dcshcW8bgV2lFXVtcroTLX21ST4PkW9vMXPQ/nJxfnvV/zR1Fo6lNOdvVtvuXZ0q4jZYmV5IbD69HY1q08coNFHAbNBhRPLKOhdvb8mwvIz7lEY96L+7JBj9ejcZ/VF7cD/s/XfdHY/t6eA4wLlk3w169Wns1sL4QW1RLHXB1DQHEYDPY7QjE/iEIZh4H04TnMyGZ5wV3OF4hmu4W1opungIdyr8OMPqeExGBqSPZ5susPfPli3tYNvzNHo2HoEG1sqaBcOK643WIOGJh6AmHISoqK2Mex6Fr6HjdpHCkVn9kvutBiATgzENDOpEISazNxlNrnJkormlqTzHkdxHE32Hi4c5W2TpEIPsuX+mTJ5EHR6+SmAevfhqdKCE3W9opwCLhTwOKOjTR1piw9pdScCsNQh4xZbLNjsbEm7n5dhAwV/gz2BL+vKnACC3pasH1oyiIzgInWapI1aziGVAYRxVSWav6zMrGo5XmsysbD1aiMhrdXCynge8CRLSyNyGAnCfIynejQLj4RNRkS1UwtzdK0hj9mD9LAIO93O/+yG7ZiKbzIYwLIYvwUOU7EH5wZ5VBbD7mP+AHmPIPh1mkKR4Ydd1FHzqPMr8DJ8jCG5xMHhanzM5zU932s0RVRUT7IW7q6IgAF1Z5zlaAE8kr0dSpOEGwENyGzM2hpZl3/TEIlh6zJ1ESc/t9EDnkO1qUljSeFvXRyrhjoQHRIksrWh2d/DyznFC2FL4ASwl8biSMrKuFcMKs4UmyE8fhYWwMtI5Iq/tRYqVRYuB/yUIJ5ObyVKG+TZhrYRrO5dwq6f/cAABlgf8WOsk1dU4Ycw8iku+zNTMm7BszaLamBSOc3w3Xgym9TE/XdVwL4UiUVsmKjNcerwKuy46kkNpu6IAgw4jdBs7cFwvDh2NAfFVcmvoIn2Bbv6Iteh4vybe3KVEA8twpbqcF1sE9po+AX9zfxkrDCXxIFWO1e1uLoegotl0cLevoQ/4ceLMAEgT34TEoCHb+yveB6yLfRBVCVScNxsJbO3NjYYhZxDcsO6aep2iuXThEYixwaL6m5VKxjt2gt2ALI3EhUYlJap26LlzUbCDnYrJQaulktRDIEvgli1gKUB3pj+abOtnTgurtWm7p9fVw0MOPkGCvbuBAFTMjiYMigyVZcIdUAXxfvPnBMCxLggfeW7JoAcaPLwZkjWWrZB3n05WH8y+IDwXT7iOP/m+wYfTqB6+yB2sPx/dqWm+RWg/ZJxiQJB0S8pTjrxHvB8aneB8SwxKZSBEIyKNKZFlQHXJXRNzByFvwXV1UZaP5iGt+4gd8FcCI0tQJ8ndSLnNClXJSfroPHsMJHB6nzHXBeXheqtLYVGWuqU6B0wVLptxP2XICaEonXoJyDQWsB3IomHkK6hBfE+az1BOhiIMoDecAAR6BQ0rBid3Ib1+Yk0oIxmuW8CgFtkvmBh48BOs5cF4nHo6liQ/gTxyW3sIRkiWcCIALTFbAfJWuwxUTPIDPKwVYpxOiu/XtmJUJo4xIoXh+uF0uKploHXUbOlnacpAlzGgursZ9++TsbEg51r87TatcaxENQd38Dpqa2bbKEHSIKitONFXfn8EXwLIrjG168J0qFMH8ts7cIwYUMWp/EcZjl1xUFyHbNJ83B7ICTQOWCoP5D9Ejdttgzmh2zpw7i6OsSMfwuHSbOrG39z/0x+lnyANTVT6mp1dXn877qU4J0/fng/7owLpR/YlqbhJb33sXGmre1InmiMeb3O1PEkKzWtO2+VSSUvpBpRPSWIIJMiP02JpHig5h08Gqbn+r+P1bNfRWbfkbQ5N7F+hODAKr3foO/oUeyPPM18RccW7+Xzkrh6w4t1TxWllEa7YQFTXYzqrXLcOBrAiPAQiL+O8J1JaYB0W38BecAZtgx2o/b/Nsi5D8U3aGPAIrplRSV7cjK3blbPTJPfAlbuLENmbcL/ULVJVur4hNiE52xEHVDldHAGemu2BUxsCRpxKqS8wwSYS4Rs6Zu16ImAKTWpyVlDz4KngCE74ar+kkHrPWNxUxBb/F6dk6zkBJXbMOJsJLHjNtaAbISdxuEmEopSJInwraKWWxczMGMRRYYywqsm9o7P4Z++H3s8+itA5MpuratbEBM/V04q322insZFm7eg94KnDHtw1fxbClE50n6woNU4RnAeaqb/cdNAUAU+euCQe/CtFZYNX+PsBCd7ReDlS7qHQBoUb8LPgd9RFwO45P/RV3Tj+cKzZUhMHWOllJ1bGsFKvnFPQN8FZehLp9GAoeidak3AerzonwVX5mHTtLV5GZunrUfDdfQB1ADO1zziAq5/jUksaC/RmlUYcQ04mL4BsEZ1aBeFWlLAUQHYLzhEO/LvYBKpABmYq0odNhze/uDgqwCRWnmKZJziJnbh3/DmkEmHq0fhnmj4o+y/00/SygVrqHndsCNRlpeYuwpdvDxY2LGeIzxKqN93KOGRpWmIpZ++/GDursYeogppQkC9Wv2kvYK+TPVHmbu6wfqNc5ZZ5uE1P/z8SQvi/5ao3VLpcTwXyZQmyG11vh8iCFufz5xGcegjJxFmnMOXa9YDqdwnu+5h1n8MmydJm4PL0Llox6Y4mUa80KKrw4SH224Jh2IJt0tdrsofmGwlHdampJNltKyAUvcaogm5d/yoduOYmvDH8VF/O/5uLMN1xq+oLi08nnz9ej8dW7q7GaqGtrz9vm4wgESXcj9yB1iCoU7CDASFClomnozv7TFwK4aSVehhUpuZTqqoP6oV2MAA/rOmsfu3qthu1yuiHaf8j0QIEOMjNCIorBniTCc20FSSCwIRXSVwT1rMKEktzGhv1+7hkSiJM2teV01MpC4Y8jbBCOFH07vzhxJ8ZbvQWuGvUH/dPxjnW48354dbGj74d2fvkI/nAHAwVx3dNRWTHr6JL6Dbkh1ZUpKPitWtXV4lwtvaMHKx7TqLufqm4vP8mQmrLY2ss7wXtiSZZl3VSuP5/Zp1eXY8gJLM2spivB/EphkwTkNohYCCNBee8TOlSM6roFl2HpPaN7FjVJlxJVim29pzgs+FpWdtHVwNM0u+RqavQ/m05b2sfvbfcPsW3oO9kXtrSLXi6gIFTqxLymoiC1nNgymYCwrH2VX+MJsgO0C712Md2x9v+p8XZDXIjDl51eb0d1yJaeEpkiRv13On92+srjgz9crG4+rXK8imlx9p55U9VDRrk/cKd5gvpcPvjlUTL4lM+1Du7JBWDn7clmoEltamz3W3t4l2THge0GUZbAqCWmrvfgfBG/pXPGQRKGXOsj9vmMQf4oEzuM1X2UST3qVk17jTAp4oUcXOBPNzDdGLRl+YCLPRkHIapZ8apnRgFOCTyZ7UP6qNigY8AWGo+mXEh1eUnN7M7DOk6V+jfgnMBFgX8yIK0nD5VB8MmSl8Il9UZv9FWBSX1w7JqAabpaUKAwXbspjekI+IXuyfYwNNEy7IBCIi7i7MKVNGOj3nVAph55q6rUMeMhXi09aXLF6M/kQoX+Oz7BuK84kTdEB3bRH5/AXogiAw55/jN5nUIqDZPardBMlWravA+luGW1ceHuKcIWzVgsdcqV+xrJvSlWNjHOBYnyp9Skx0uj3FPufmWArz/+Aw==")));
$g_PhishingSig = unserialize(gzinflate(/*1525208613*/base64_decode("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")));
$g_JSVirSig = unserialize(gzinflate(/*1525208613*/base64_decode("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")));
$gX_JSVirSig = unserialize(gzinflate(/*1525208613*/base64_decode("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")));
$g_SusDB = unserialize(gzinflate(/*1525208613*/base64_decode("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")));
$g_SusDBPrio = unserialize(gzinflate(/*1525208613*/base64_decode("RdPLccMwDEXRloQvAaWaLFNDxr1nZOMiCw8wFHX4BFnft6jcvz/39fX5yVSdalN9akzNqWdqzb09VRZEFEjBFFBBFVjBlaJpkiHrZkVWZEVWZEVWZEVWMhsDMGTbMSAbsiEbsiEbspHZyezIjuw7YWRHdmRHdmRHDuRADuRAjn15yJHzpIEcyNHz9pNpJHIiJ3I6m/d/QeZEzmIPcz5kPshHuYR8nJWgyXHOYeWRnxsOmQu5hBUyF3KRuchcZK79NzONInMzjRYaMjdyI3fQkLkPDdPo/y/l2k7mgeTS7Wyv+q7Fdhwg134xV+3VPUP2DNkzZM94f5GfzndfbJfbPWe8d0jtWnPvfJivPw==")));
$g_DeMapper = unserialize(base64_decode("YTo1OntzOjEwOiJ3aXphcmQucGhwIjtzOjM3OiJjbGFzcyBXZWxjb21lU3RlcCBleHRlbmRzIENXaXphcmRTdGVwIjtzOjE3OiJ1cGRhdGVfY2xpZW50LnBocCI7czozNzoieyBDVXBkYXRlQ2xpZW50OjpBZGRNZXNzYWdlMkxvZygiZXhlYyI7czoxMToiaW5jbHVkZS5waHAiO3M6NDg6IkdMT0JBTFNbIlVTRVIiXS0+SXNBdXRob3JpemVkKCkgJiYgJGFyQXV0aFJlc3VsdCI7czo5OiJzdGFydC5waHAiO3M6NjA6IkJYX1JPT1QuJy9tb2R1bGVzL21haW4vY2xhc3Nlcy9nZW5lcmFsL3VwZGF0ZV9kYl91cGRhdGVyLnBocCI7czoxMDoiaGVscGVyLnBocCI7czo1ODoiSlBsdWdpbkhlbHBlcjo6Z2V0UGx1Z2luKCJzeXN0ZW0iLCJvbmVjbGlja2NoZWNrb3V0X3ZtMyIpOyI7fQ=="));

//END_SIG
////////////////////////////////////////////////////////////////////////////
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 (version_compare(phpversion(), '5.3.1', '<')) {
  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', '20180501');

////////////////////////////////////////////////////////////////////////////

$l_Res = '';

$g_Structure = array();
$g_Counter = 0;

$g_SpecificExt = false;

$g_UpdatedJsonLog = 0;
$g_NotRead = array();
$g_FileInfo = array();
$g_Iframer = array();
$g_PHPCodeInside = array();
$g_CriticalJS = array();
$g_Phishing = array();
$g_Base64 = array();
$g_HeuristicDetected = array();
$g_HeuristicType = array();
$g_UnixExec = array();
$g_SkippedFolders = array();
$g_UnsafeFilesFound = array();
$g_CMS = array();
$g_SymLinks = array();
$g_HiddenFiles = array();
$g_Vulnerable = array();

$g_RegExpStat = array();

$g_TotalFolder = 0;
$g_TotalFiles = 0;

$g_FoundTotalDirs = 0;
$g_FoundTotalFiles = 0;

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');

if (!function_exists('stripos')) {
	function stripos($par_Str, $par_Entry, $Offset = 0) {
		return strpos(strtolower($par_Str), strtolower($par_Entry), $Offset);
	}
}

define('CMS_BITRIX', 'Bitrix');
define('CMS_WORDPRESS', 'Wordpress');
define('CMS_JOOMLA', 'Joomla');
define('CMS_DLE', 'Data Life Engine');
define('CMS_IPB', 'Invision Power Board');
define('CMS_WEBASYST', 'WebAsyst');
define('CMS_OSCOMMERCE', 'OsCommerce');
define('CMS_DRUPAL', 'Drupal');
define('CMS_MODX', 'MODX');
define('CMS_INSTANTCMS', 'Instant CMS');
define('CMS_PHPBB', 'PhpBB');
define('CMS_VBULLETIN', 'vBulletin');
define('CMS_SHOPSCRIPT', 'PHP ShopScript Premium');

define('CMS_VERSION_UNDEFINED', '0.0');

class CmsVersionDetector {
    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(CMS_BITRIX, $version);
            }

            if ($this->checkWordpress($dir, $version)) {
               $this->addCms(CMS_WORDPRESS, $version);
            }

            if ($this->checkJoomla($dir, $version)) {
               $this->addCms(CMS_JOOMLA, $version);
            }

            if ($this->checkDle($dir, $version)) {
               $this->addCms(CMS_DLE, $version);
            }

            if ($this->checkIpb($dir, $version)) {
               $this->addCms(CMS_IPB, $version);
            }

            if ($this->checkWebAsyst($dir, $version)) {
               $this->addCms(CMS_WEBASYST, $version);
            }

            if ($this->checkOsCommerce($dir, $version)) {
               $this->addCms(CMS_OSCOMMERCE, $version);
            }

            if ($this->checkDrupal($dir, $version)) {
               $this->addCms(CMS_DRUPAL, $version);
            }

            if ($this->checkMODX($dir, $version)) {
               $this->addCms(CMS_MODX, $version);
            }

            if ($this->checkInstantCms($dir, $version)) {
               $this->addCms(CMS_INSTANTCMS, $version);
            }

            if ($this->checkPhpBb($dir, $version)) {
               $this->addCms(CMS_PHPBB, $version);
            }

            if ($this->checkVBulletin($dir, $version)) {
               $this->addCms(CMS_VBULLETIN, $version);
            }

            if ($this->checkPhpShopScript($dir, $version)) {
               $this->addCms(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; $i < count($this->types); $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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = CMS_VERSION_UNDEFINED;
          $res = false;
          if (file_exists($dir . '/core/includes/md5_sums_vbulletin.php'))
          {
                $res = true;
                require_once($dir . '/core/includes/md5_sums_vbulletin.php');
                $version = $md5_sum_versions['vb5_connect'];
          }
          else if(file_exists($dir . '/includes/md5_sums_vbulletin.php'))
          {
                $res = true;
                require_once($dir . '/includes/md5_sums_vbulletin.php');
                $version = $md5_sum_versions['vbulletin'];
          }
          return $res;
       }

    private function checkPhpShopScript($dir, &$version) {
       $version = 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;
    }
}

/**
 * Print file
*/
function printFile() {
	$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>';
}

/**
 *
 */
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_name() == 'cli';
}

function myCheckSum($str) {
   return hash('crc32b', $str);
}

 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)
 	{
 		@fwrite(STDOUT, $text . ($add_lb ? "\n" : ''));
 	}
}

/**
 * Print progress
 * @param int $num Current file
 */
function printProgress($num, &$par_File)
{
	global $g_CriticalPHP, $g_Base64, $g_Phishing, $g_CriticalJS, $g_Iframer, $g_UpdatedJsonLog, 
               $g_AddPrefix, $g_NoPrefix;

	$total_files = $GLOBALS['g_FoundTotalFiles'];
	$elapsed_time = microtime(true) - START_TIME;
	$percent = number_format($total_files ? $num * 100 / $total_files : 0, 1);
	$stat = '';
	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: ' . seconds2Human($left_time) : '') . '] [Mlw:' . (count($g_CriticalPHP) + count($g_Base64))  . '|' . (count($g_CriticalJS) + count($g_Iframer) + count($g_Phishing)) . ']';
        }
	}

        $l_FN = $g_AddPrefix . str_replace($g_NoPrefix, '', $par_File); 
	$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();
        }
}

/**
 * Seconds to human readable
 * @param int $seconds
 * @return string
 */
function seconds2Human($seconds)
{
	$r = '';
	$_seconds = floor($seconds);
	$ms = $seconds - $_seconds;
	$seconds = $_seconds;
	if ($hours = floor($seconds / 3600))
	{
		$r .= $hours . (isCli() ? ' h ' : ' час ');
		$seconds = $seconds % 3600;
	}

	if ($minutes = floor($seconds / 60))
	{
		$r .= $minutes . (isCli() ? ' m ' : ' мин ');
		$seconds = $seconds % 60;
	}

	if ($minutes < 3) $r .= ' ' . $seconds + ($ms > 0 ? round($ms) : 0) . (isCli() ? ' s' : ' сек'); 

	return $r;
}

if (isCli())
{

	$cli_options = array(
                '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(
		'avdb:',
		'cmd:',
		'noprefix:',
		'addprefix:',
		'scan:',
		'one-pass',
		'smart',
		'quarantine',
		'with-2check',
		'skip-cache',
		'username:', 
		'imake',
		'icheck'
	);
	
	$cli_longopts = array_merge($cli_longopts, array_values($cli_options));

	$options = getopt(implode('', array_keys($cli_options)), $cli_longopts);

	if (isset($options['h']) OR isset($options['help']))
	{
		$memory_limit = ini_get('memory_limit');
		echo <<<HELP
Revisium AI-Bolit - 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
  -l, --list=FILE      		Full path to create plain text file with a list of found malware
  -o, --json_report=FILE	Full path to create json-file with a list of found malware
  -p, --path=PATH      		Directory path to scan, by default the file directory is used
                       		Current path: {$defaults['path']}
  -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. 0 - All files. Current value: {$defaults['max_size_to_scan']}
  -a, --all            		Scan all files (by default scan. js,. php,. html,. htaccess)
  -d, --delay=INT      		Delay in milliseconds when scanning files to reduce load on the file system (Default: 1)
  -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
  -r, --report=PATH/EMAILS
  -z, --progress=FILE  		Runtime progress of scanning, saved to the file, full path required. 
  -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...]"
      --smart                   Enable smart mode (skip cache files and optimize scanning)
                       		Run command after scanning
      --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

      --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']) AND !empty($options['memory']) AND ($memory = $options['memory']))
		OR (isset($options['m']) AND !empty($options['m']) AND ($memory = $options['m']))
	)
	{
		$memory = getBytes($memory);
		if ($memory > 0)
		{
			$defaults['memory_limit'] = $memory;
			ini_set('memory_limit', $memory);
		}
	}


	$avdb = '';
	if (
		(isset($options['avdb']) AND !empty($options['avdb']) AND ($avdb = $options['avdb']))
		OR (isset($options['c']) AND !empty($options['c']) AND ($avdb = $options['c']))
	)
	{
		if (file_exists($avdb))
		{
			$defaults['avdb'] = $avdb;
		}
	}

	if (
		(isset($options['file']) AND !empty($options['file']) AND ($file = $options['file']) !== false)
		OR (isset($options['j']) AND !empty($options['j']) AND ($file = $options['j']) !== false)
	)
	{
		define('SCAN_FILE', $file);
	}


	if (
		(isset($options['list']) AND !empty($options['list']) AND ($file = $options['list']) !== false)
		OR (isset($options['l']) AND !empty($options['l']) AND ($file = $options['l']) !== false)
	)
	{

		define('PLAIN_FILE', $file);
	}

	if (
		(isset($options['json_report']) AND !empty($options['json_report']) AND ($file = $options['json_report']) !== false)
		OR (isset($options['o']) AND !empty($options['o']) AND ($file = $options['o']) !== false)
	)
	{
		define('JSON_FILE', $file);
	}

	if (
		(isset($options['php_report']) AND !empty($options['php_report']) AND ($file = $options['php_report']) !== false)
		OR (isset($options['t']) AND !empty($options['t']) AND ($file = $options['t']) !== false)
	)
	{
		define('PHP_FILE', $file);
	}

	if (isset($options['smart']) OR isset($options['b']))
	{
		define('SMART_SCAN', 1);
	}

	if (
		(isset($options['handler']) AND !empty($options['handler']) AND ($file = $options['handler']) !== false)
		OR (isset($options['g']) AND !empty($options['g']) AND ($file = $options['g']) !== false)
	)
	{
	        if (file_exists($file)) {
		   define('AIBOLIT_EXTERNAL_HANDLER', $file);
                }
	}

	if (
		(isset($options['progress']) AND !empty($options['progress']) AND ($file = $options['progress']) !== false)
		OR (isset($options['z']) AND !empty($options['z']) AND ($file = $options['z']) !== false)
	)
	{
		define('PROGRESS_LOG_FILE', $file);
	}

	if (
		(isset($options['size']) AND !empty($options['size']) AND ($size = $options['size']) !== false)
		OR (isset($options['s']) AND !empty($options['s']) AND ($size = $options['s']) !== false)
	)
	{
		$size = getBytes($size);
		$defaults['max_size_to_scan'] = $size > 0 ? $size : 0;
	}

	if (
		(isset($options['username']) AND !empty($options['username']) AND ($username = $options['username']) !== false)
		OR (isset($options['u']) AND !empty($options['u']) AND ($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']) AND !empty($options['file']) AND ($file = $options['file']) !== false)
 		OR (isset($options['j']) AND !empty($options['j']) AND ($file = $options['j']) !== false)
 		AND (isset($options['q'])) 
 	
 	)
 	{
 		$BOOL_RESULT = true;
 	}
 
	if (isset($options['f'])) 
	{
	   $l_FastCli = true;
	}
		
	if (isset($options['q']) || isset($options['quite'])) 
	{
 	    $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']) AND !empty($options['delay']) AND ($delay = $options['delay']) !== false)
		OR (isset($options['d']) AND !empty($options['d']) AND ($delay = $options['d']) !== false)
	)
	{
		$delay = (int) $delay;
		if (!($delay < 0))
		{
			$defaults['scan_delay'] = $delay;
		}
	}

	if (
		(isset($options['skip']) AND !empty($options['skip']) AND ($ext_list = $options['skip']) !== false)
		OR (isset($options['k']) AND !empty($options['k']) AND ($ext_list = $options['k']) !== false)
	)
	{
		$defaults['skip_ext'] = $ext_list;
	}

	if (isset($options['n']) OR 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;
			$g_SensitiveFiles = explode(",", $ext_list);
			for ($i = 0; $i < count($g_SensitiveFiles); $i++) {
			   if ($g_SensitiveFiles[$i] == '.') {
                              $g_SensitiveFiles[$i] = '';
                           }
                        }

			$g_SpecificExt = true;
		}
	}


    if (isset($options['all']) OR 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', 1);
    }


	$l_SpecifiedPath = false;
	if (
		(isset($options['path']) AND !empty($options['path']) AND ($path = $options['path']) !== false)
		OR (isset($options['p']) AND !empty($options['p']) AND ($path = $options['p']) !== false)
	)
	{
		$defaults['path'] = $path;
		$l_SpecifiedPath = true;
	}

	if (
		isset($options['noprefix']) AND !empty($options['noprefix']) AND ($g_NoPrefix = $options['noprefix']) !== false)
		
	{
	} else {
		$g_NoPrefix = '';
	}

	if (
		isset($options['addprefix']) AND !empty($options['addprefix']) AND ($g_AddPrefix = $options['addprefix']) !== false)
		
	{
	} else {
		$g_AddPrefix = '';
	}



	$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']) AND ($report = $options['report']) !== false)
		OR (isset($options['r']) AND ($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['idb']) AND ($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') OR define('REPORT', 'AI-BOLIT-REPORT-' . $l_SuffixReport . '-' . date('d-m-Y_H-i') . '.html');
	
	defined('INTEGRITY_DB_FILE') OR 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) != '-'
			AND (substr($_SERVER['argv'][$last_arg - 1], 0, 1) != '-' OR 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.');

} else {
   define('AI_EXPERT', AI_EXPERT_MODE); 
   define('ONE_PASS', true);
}


if (isset($defaults['avdb']) && file_exists($defaults['avdb'])) {
   $avdb = explode("\n", gzinflate(base64_decode(str_rot13(strrev(trim(file_get_contents($defaults['avdb'])))))));

   $g_DBShe = explode("\n", base64_decode($avdb[0]));
   $gX_DBShe = explode("\n", base64_decode($avdb[1]));
   $g_FlexDBShe = explode("\n", base64_decode($avdb[2]));
   $gX_FlexDBShe = explode("\n", base64_decode($avdb[3]));
   $gXX_FlexDBShe = explode("\n", base64_decode($avdb[4]));
   $g_ExceptFlex = explode("\n", base64_decode($avdb[5]));
   $g_AdwareSig = explode("\n", base64_decode($avdb[6]));
   $g_PhishingSig = explode("\n", base64_decode($avdb[7]));
   $g_JSVirSig = explode("\n", base64_decode($avdb[8]));
   $gX_JSVirSig = explode("\n", base64_decode($avdb[9]));
   $g_SusDB = explode("\n", base64_decode($avdb[10]));
   $g_SusDBPrio = explode("\n", base64_decode($avdb[11]));
   $g_DeMapper = array_combine(explode("\n", base64_decode($avdb[12])), explode("\n", base64_decode($avdb[13])));

   if (count($g_DBShe) <= 1) {
      $g_DBShe = array();
   }

   if (count($gX_DBShe) <= 1) {
      $gX_DBShe = array();
   }

   if (count($g_FlexDBShe) <= 1) {
      $g_FlexDBShe = array();
   }

   if (count($gX_FlexDBShe) <= 1) {
      $gX_FlexDBShe = array();
   }

   if (count($gXX_FlexDBShe) <= 1) {
      $gXX_FlexDBShe = array();
   }

   if (count($g_ExceptFlex) <= 1) {
      $g_ExceptFlex = array();
   }

   if (count($g_AdwareSig) <= 1) {
      $g_AdwareSig = array();
   }

   if (count($g_PhishingSig) <= 1) {
      $g_PhishingSig = array();
   }

   if (count($gX_JSVirSig) <= 1) {
      $gX_JSVirSig = array();
   }

   if (count($g_JSVirSig) <= 1) {
      $g_JSVirSig = array();
   }

   if (count($g_SusDB) <= 1) {
      $g_SusDB = array();
   }

   if (count($g_SusDBPrio) <= 1) {
      $g_SusDBPrio = array();
   }

   stdOut('Loaded external signatures from ' . $defaults['avdb']);
}

// use only basic signature subset
if (AI_EXPERT < 2) {
   $gX_FlexDBShe = array();
   $gXX_FlexDBShe = array();
   $gX_JSVirSig = array();
}

if (isset($defaults['userid'])) {
   stdOut('Running from ' . $defaults['userid'] . ':' . $defaults['groupid']);
}

stdOut('Malware signatures: ' . (count($g_JSVirSig) + count($gX_JSVirSig) + count($g_DBShe) + count($gX_DBShe) + count($gX_DBShe) + count($g_FlexDBShe) + count($gX_FlexDBShe) + count($gXX_FlexDBShe)));

if ($g_SpecificExt) {
  stdOut("Scan specific extensions: " . implode(',', $g_SensitiveFiles));
}

if (!DEBUG_PERFORMANCE) {
   OptimizeSignatures();
} else {
   stdOut("Debug Performance Scan");
}

$g_DBShe  = array_map('strtolower', $g_DBShe);
$gX_DBShe = array_map('strtolower', $gX_DBShe);

if (!defined('PLAIN_FILE')) { define('PLAIN_FILE', ''); }

// Init
define('MAX_ALLOWED_PHP_HTML_IN_DIR', 600);
define('BASE64_LENGTH', 69);
define('MAX_PREVIEW_LEN', 80);
define('MAX_EXT_LINKS', 1001);

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 (isset($_GET['full'])) {
  $defaults['scan_all_files'] = 1;
}

if ($l_FastCli) {
  $defaults['scan_all_files'] = 0; 
}

if (!isCli()) {
  	define('ICHECK', isset($_GET['icheck']));
  	define('IMAKE', isset($_GET['imake']));
	
	define('INTEGRITY_DB_FILE', 'ai-integrity-db');
}

define('SCAN_ALL_FILES', (bool) $defaults['scan_all_files']);
define('SCAN_DELAY', (int) $defaults['scan_delay']);
define('MAX_SIZE_TO_SCAN', getBytes($defaults['max_size_to_scan']));

if ($defaults['memory_limit'] AND ($defaults['memory_limit'] = getBytes($defaults['memory_limit'])) > 0) {
	ini_set('memory_limit', $defaults['memory_limit']);
    stdOut("Changed memory limit to " . $defaults['memory_limit']);
}

define('ROOT_PATH', realpath($defaults['path']));

if (!ROOT_PATH)
{
    if (isCli())  {
		die(stdOut("Directory '{$defaults['path']}' not found!"));
	}
}
elseif(!is_readable(ROOT_PATH))
{
        if (isCli())  {
		die2(stdOut("Cannot read directory '" . ROOT_PATH . "'!"));
	}
}

define('CURRENT_DIR', getcwd());
chdir(ROOT_PATH);

if (isCli() AND REPORT !== '' AND !getEmails(REPORT))
{
	$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 AND REPORT_PATH AND is_file(REPORT_PATH . DIR_SEPARATOR . REPORT_FILE))
	{
		@unlink(REPORT_PATH . DIR_SEPARATOR . REPORT_FILE);
	}
}

if (defined('REPORT_PATH')) {
   $l_ReportDirName = REPORT_PATH;
}

define('QUEUE_FILENAME', ($l_ReportDirName != '' ? $l_ReportDirName . '/' : '') . 'AI-BOLIT-QUEUE-' . md5($defaults['path']) . '-' . rand(1000,9999) . '.txt');

if (function_exists('phpinfo')) {
   ob_start();
   phpinfo();
   $l_PhpInfo = ob_get_contents();
   ob_end_clean();

   $l_PhpInfo = str_replace('border: 1px', '', $l_PhpInfo);
   preg_match('|<body>(.*)</body>|smi', $l_PhpInfo, $l_PhpInfoBody);
}

////////////////////////////////////////////////////////////////////////////
$l_Template = str_replace("@@MODE@@", AI_EXPERT . '/' . SMART_SCAN, $l_Template);

if (AI_EXPERT == 0) {
   $l_Result .= '<div class="rep">' . AI_STR_057 . '</div>'; 
} else {
}

$l_Template = str_replace('@@HEAD_TITLE@@', AI_STR_051 . $g_AddPrefix . str_replace($g_NoPrefix, '', ROOT_PATH), $l_Template);

define('QCR_INDEX_FILENAME', 'fn');
define('QCR_INDEX_TYPE', 'type');
define('QCR_INDEX_WRITABLE', 'wr');
define('QCR_SVALUE_FILE', '1');
define('QCR_SVALUE_FOLDER', '0');

/**
 * Extract emails from the string
 * @param string $email
 * @return array of strings with emails or false on error
 */
function getEmails($email)
{
	$email = preg_split('#[,\s;]#', $email, -1, PREG_SPLIT_NO_EMPTY);
	$r = array();
	for ($i = 0, $size = sizeof($email); $i < $size; $i++)
	{
	        if (function_exists('filter_var')) {
   		   if (filter_var($email[$i], FILTER_VALIDATE_EMAIL))
   		   {
   		   	$r[] = $email[$i];
    		   }
                } else {
                   // for PHP4
                   if (strpos($email[$i], '@') !== false) {
   		   	$r[] = $email[$i];
                   }
                }
	}
	return empty($r) ? false : $r;
}

/**
 * Get bytes from shorthand byte values (1M, 1G...)
 * @param int|string $val
 * @return int
 */
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);
}

/**
 * Format bytes to human readable
 * @param int $bites
 * @return string
 */
function bytes2Human($bites)
{
	if ($bites < 1024)
	{
		return $bites . ' b';
	}
	elseif (($kb = $bites / 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';
	}
}

///////////////////////////////////////////////////////////////////////////
function needIgnore($par_FN, $par_CRC) {
  global $g_IgnoreList;
  
  for ($i = 0; $i < count($g_IgnoreList); $i++) {
     if (strpos($par_FN, $g_IgnoreList[$i][0]) !== false) {
		if ($par_CRC == $g_IgnoreList[$i][1]) {
			return true;
		}
	 }
  }
  
  return false;
}

///////////////////////////////////////////////////////////////////////////
function makeSafeFn($par_Str, $replace_path = false) {
  global $g_AddPrefix, $g_NoPrefix;
  if ($replace_path) {
     $lines = explode("\n", $par_Str);
     array_walk($lines, function(&$n) {
          global $g_AddPrefix, $g_NoPrefix;
          $n = $g_AddPrefix . str_replace($g_NoPrefix, '', $n); 
     }); 

     $par_Str = implode("\n", $lines);
  }
 
  return htmlspecialchars($par_Str, ENT_SUBSTITUTE | ENT_QUOTES);
}

function replacePathArray($par_Arr) {
  global $g_AddPrefix, $g_NoPrefix;
     array_walk($par_Arr, function(&$n) {
          global $g_AddPrefix, $g_NoPrefix;
          $n = $g_AddPrefix . str_replace($g_NoPrefix, '', $n); 
     }); 

  return $par_Arr;
}

///////////////////////////////////////////////////////////////////////////
function getRawJsonVuln($par_List) {
  global $g_Structure, $g_NoPrefix, $g_AddPrefix;
   $results = array();
   $l_Src = array('&quot;', '&lt;', '&gt;', '&amp;', '&#039;', '<' . '?php.');
   $l_Dst = array('"',      '<',    '>',    '&', '\'',         '<' . '?php ');

   for ($i = 0; $i < count($par_List); $i++) {
      $l_Pos = $par_List[$i]['ndx'];
      $res['fn'] = $g_AddPrefix . str_replace($g_NoPrefix, '', $g_Structure['n'][$l_Pos]);
      $res['sig'] = $par_List[$i]['id'];

      $res['ct'] = $g_Structure['c'][$l_Pos];
      $res['mt'] = $g_Structure['m'][$l_Pos];
      $res['sz'] = $g_Structure['s'][$l_Pos];
      $res['sigid'] = 'vuln_' . md5($g_Structure['n'][$l_Pos] . $par_List[$i]['id']);

      $results[] = $res; 
   }

   return $results;
}

///////////////////////////////////////////////////////////////////////////
function getRawJson($par_List, $par_Details = null, $par_SigId = null) {
  global $g_Structure, $g_NoPrefix, $g_AddPrefix;
   $results = array();
   $l_Src = array('&quot;', '&lt;', '&gt;', '&amp;', '&#039;', '<' . '?php.');
   $l_Dst = array('"',      '<',    '>',    '&', '\'',         '<' . '?php ');

   for ($i = 0; $i < count($par_List); $i++) {
       if ($par_SigId != null) {
          $l_SigId = 'id_' . $par_SigId[$i];
       } else {
          $l_SigId = 'id_n' . rand(1000000, 9000000);
       }
       


      $l_Pos = $par_List[$i];
      $res['fn'] = $g_AddPrefix . str_replace($g_NoPrefix, '', $g_Structure['n'][$l_Pos]);
      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['ct'] = $g_Structure['c'][$l_Pos];
      $res['mt'] = $g_Structure['m'][$l_Pos];
      $res['sz'] = $g_Structure['s'][$l_Pos];
      $res['sigid'] = $l_SigId;

      $results[] = $res; 
   }

   return $results;
}

///////////////////////////////////////////////////////////////////////////
function printList($par_List, $par_Details = null, $par_NeedIgnore = false, $par_SigId = null, $par_TableName = null) {
  global $g_Structure, $g_NoPrefix, $g_AddPrefix;
  
  $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%>" . AI_STR_004 . "</th>";
  $l_Result .= "<th>" . AI_STR_005 . "</th>";
  $l_Result .= "<th>" . AI_STR_006 . "</th>";
  $l_Result .= "<th width=90>" . AI_STR_007 . "</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; $i < count($par_List); $i++) {
    if ($par_SigId != null) {
       $l_SigId = 'id_' . $par_SigId[$i];
    } else {
       $l_SigId = 'id_z' . rand(1000000,9000000);
    }
    
    $l_Pos = $par_List[$i];
        if ($par_NeedIgnore) {
         	if (needIgnore($g_Structure['n'][$par_List[$i]], $g_Structure['crc'][$l_Pos])) {
         		continue;
         	}
        }
  
     $l_Creat = $g_Structure['c'][$l_Pos] > 0 ? date("d/m/Y H:i:s", $g_Structure['c'][$l_Pos]) : '-';
     $l_Modif = $g_Structure['m'][$l_Pos] > 0 ? date("d/m/Y H:i:s", $g_Structure['m'][$l_Pos]) : '-';
     $l_Size = $g_Structure['s'][$l_Pos] > 0 ? bytes2Human($g_Structure['s'][$l_Pos]) : '-';

     if ($par_Details != null) {
        $l_WithMarker = preg_replace('|__AI_MARKER__|smi', '<span class="marker">&nbsp;</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($g_Structure['n'][$l_Pos])) {
//		$l_Result .= '<td><div class="it"><a class="it" target="_blank" href="'. $defaults['site_url'] . 'ai-bolit.php?fn=' .
//	              $g_Structure['n'][$l_Pos] . '&ph=' . realCRC(PASS) . '&c=' . $g_Structure['crc'][$l_Pos] . '">' . $g_Structure['n'][$l_Pos] . '</a></div>' . $l_Body . '</td>';
		$l_Result .= '<td><div class="it"><a class="it">' . makeSafeFn($g_AddPrefix . str_replace($g_NoPrefix, '', $g_Structure['n'][$l_Pos])) . '</a></div>' . $l_Body . '</td>';
	 } else {
		$l_Result .= '<td><div class="it"><a class="it">' . makeSafeFn($g_AddPrefix . str_replace($g_NoPrefix, '', $g_Structure['n'][$par_List[$i]])) . '</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">' . $g_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">' . $g_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;
}

///////////////////////////////////////////////////////////////////////////
function printPlainList($par_List, $par_Details = null, $par_NeedIgnore = false, $par_SigId = null, $par_TableName = null) {
  global $g_Structure, $g_NoPrefix, $g_AddPrefix;
  
  $l_Result = "";

  $l_Src = array('&quot;', '&lt;', '&gt;', '&amp;', '&#039;');
  $l_Dst = array('"',      '<',    '>',    '&', '\'');

  for ($i = 0; $i < count($par_List); $i++) {
    $l_Pos = $par_List[$i];
        if ($par_NeedIgnore) {
         	if (needIgnore($g_Structure['n'][$par_List[$i]], $g_Structure['crc'][$l_Pos])) {
         		continue;
         	}                      
        }
  

     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($g_Structure['n'][$l_Pos])) {		 
		$l_Result .= $g_AddPrefix . str_replace($g_NoPrefix, '', $g_Structure['n'][$l_Pos]) . "\t\t\t" . $l_Body . "\n";
	 } else {
		$l_Result .= $g_AddPrefix . str_replace($g_NoPrefix, '', $g_Structure['n'][$par_List[$i]]) . "\n";
	 }
	 
  }

  return $l_Result;
}

///////////////////////////////////////////////////////////////////////////
function extractValue(&$par_Str, $par_Name) {
  if (preg_match('|<tr><td class="e">\s*'.$par_Name.'\s*</td><td class="v">(.+?)</td>|sm', $par_Str, $l_Result)) {
     return str_replace('no value', '', strip_tags($l_Result[1]));
  }
}

///////////////////////////////////////////////////////////////////////////
function QCR_ExtractInfo($par_Str) {
   $l_PhpInfoSystem = extractValue($par_Str, 'System');
   $l_PhpPHPAPI = extractValue($par_Str, 'Server API');
   $l_AllowUrlFOpen = extractValue($par_Str, 'allow_url_fopen');
   $l_AllowUrlInclude = extractValue($par_Str, 'allow_url_include');
   $l_DisabledFunction = extractValue($par_Str, 'disable_functions');
   $l_DisplayErrors = extractValue($par_Str, 'display_errors');
   $l_ErrorReporting = extractValue($par_Str, 'error_reporting');
   $l_ExposePHP = extractValue($par_Str, 'expose_php');
   $l_LogErrors = extractValue($par_Str, 'log_errors');
   $l_MQGPC = extractValue($par_Str, 'magic_quotes_gpc');
   $l_MQRT = extractValue($par_Str, 'magic_quotes_runtime');
   $l_OpenBaseDir = extractValue($par_Str, 'open_basedir');
   $l_RegisterGlobals = extractValue($par_Str, 'register_globals');
   $l_SafeMode = extractValue($par_Str, 'safe_mode');


   $l_DisabledFunction = ($l_DisabledFunction == '' ? '-?-' : $l_DisabledFunction);
   $l_OpenBaseDir = ($l_OpenBaseDir == '' ? '-?-' : $l_OpenBaseDir);

   $l_Result = '<div class="title">' . AI_STR_008 . ': ' . phpversion() . '</div>';
   $l_Result .= 'System Version: <span class="php_ok">' . $l_PhpInfoSystem . '</span><br/>';
   $l_Result .= 'PHP API: <span class="php_ok">' . $l_PhpPHPAPI. '</span><br/>';
   $l_Result .= 'allow_url_fopen: <span class="php_' . ($l_AllowUrlFOpen == 'On' ? 'bad' : 'ok') . '">' . $l_AllowUrlFOpen. '</span><br/>';
   $l_Result .= 'allow_url_include: <span class="php_' . ($l_AllowUrlInclude == 'On' ? 'bad' : 'ok') . '">' . $l_AllowUrlInclude. '</span><br/>';
   $l_Result .= 'disable_functions: <span class="php_' . ($l_DisabledFunction == '-?-' ? 'bad' : 'ok') . '">' . $l_DisabledFunction. '</span><br/>';
   $l_Result .= 'display_errors: <span class="php_' . ($l_DisplayErrors == 'On' ? 'ok' : 'bad') . '">' . $l_DisplayErrors. '</span><br/>';
   $l_Result .= 'error_reporting: <span class="php_ok">' . $l_ErrorReporting. '</span><br/>';
   $l_Result .= 'expose_php: <span class="php_' . ($l_ExposePHP == 'On' ? 'bad' : 'ok') . '">' . $l_ExposePHP. '</span><br/>';
   $l_Result .= 'log_errors: <span class="php_' . ($l_LogErrors == 'On' ? 'ok' : 'bad') . '">' . $l_LogErrors . '</span><br/>';
   $l_Result .= 'magic_quotes_gpc: <span class="php_' . ($l_MQGPC == 'On' ? 'ok' : 'bad') . '">' . $l_MQGPC. '</span><br/>';
   $l_Result .= 'magic_quotes_runtime: <span class="php_' . ($l_MQRT == 'On' ? 'bad' : 'ok') . '">' . $l_MQRT. '</span><br/>';
   $l_Result .= 'register_globals: <span class="php_' . ($l_RegisterGlobals == 'On' ? 'bad' : 'ok') . '">' . $l_RegisterGlobals . '</span><br/>';
   $l_Result .= 'open_basedir: <span class="php_' . ($l_OpenBaseDir == '-?-' ? 'bad' : 'ok') . '">' . $l_OpenBaseDir . '</span><br/>';
   
   if (phpversion() < '5.3.0') {
      $l_Result .= 'safe_mode (PHP < 5.3.0): <span class="php_' . ($l_SafeMode == 'On' ? 'ok' : 'bad') . '">' . $l_SafeMode. '</span><br/>';
   }

   return $l_Result . '<p>';
}

///////////////////////////////////////////////////////////////////////////
   function addSlash($dir) {
      return rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
   }

///////////////////////////////////////////////////////////////////////////
function QCR_Debug($par_Str = "") {
  if (!DEBUG_MODE) {
     return;
  }

  $l_MemInfo = ' ';  
  if (function_exists('memory_get_usage')) {
     $l_MemInfo .= ' curmem=' .  bytes2Human(memory_get_usage());
  }

  if (function_exists('memory_get_peak_usage')) {
     $l_MemInfo .= ' maxmem=' .  bytes2Human(memory_get_peak_usage());
  }

  stdOut("\n" . date('H:i:s') . ': ' . $par_Str . $l_MemInfo . "\n");
}


///////////////////////////////////////////////////////////////////////////
function QCR_ScanDirectories($l_RootDir)
{
	global $g_Structure, $g_Counter, $g_Doorway, $g_FoundTotalFiles, $g_FoundTotalDirs, 
			$defaults, $g_SkippedFolders, $g_UrlIgnoreList, $g_DirIgnoreList, $g_UnsafeDirArray, 
                        $g_UnsafeFilesFound, $g_SymLinks, $g_HiddenFiles, $g_UnixExec, $g_IgnoredExt, $g_SensitiveFiles, 
						$g_SuspiciousFiles, $g_ShortListExt, $l_SkipSample;

	static $l_Buffer = '';

	$l_DirCounter = 0;
	$l_DoorwayFilesCounter = 0;
	$l_SourceDirIndex = $g_Counter - 1;

        $l_SkipSample = array();

	QCR_Debug('Scan ' . $l_RootDir);

        $l_QuotedSeparator = quotemeta(DIR_SEPARATOR); 
 	if ($l_DIRH = @opendir($l_RootDir))
	{
		while (($l_FileName = readdir($l_DIRH)) !== false)
		{
			if ($l_FileName == '.' || $l_FileName == '..') continue;

			$l_FileName = $l_RootDir . DIR_SEPARATOR . $l_FileName;

			$l_Type = filetype($l_FileName);
            if ($l_Type == "link") 
            {
                $g_SymLinks[] = $l_FileName;
                continue;
            } else			
			if ($l_Type != "file" && $l_Type != "dir" ) {
			        if (!in_array($l_FileName, $g_UnixExec)) {
				   $g_UnixExec[] = $l_FileName;
				}

				continue;
			}	
						
			$l_Ext = strtolower(pathinfo($l_FileName, PATHINFO_EXTENSION));
			$l_IsDir = is_dir($l_FileName);

			if (in_array($l_Ext, $g_SuspiciousFiles)) 
			{
			        if (!in_array($l_FileName, $g_UnixExec)) {
                		   $g_UnixExec[] = $l_FileName;
                                } 
            		}

			// which files should be scanned
			$l_NeedToScan = SCAN_ALL_FILES || (in_array($l_Ext, $g_SensitiveFiles));

			if (in_array(strtolower($l_Ext), $g_IgnoredExt)) {    
		           $l_NeedToScan = false;
                        }

      			// if folder in ignore list
      			$l_Skip = false;
      			for ($dr = 0; $dr < count($g_DirIgnoreList); $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 ($l_IsDir)
			{
				// skip on ignore
				if ($l_Skip) {
				   $g_SkippedFolders[] = $l_FileName;
				   continue;
				}
				
				$l_BaseName = basename($l_FileName);

				if ((strpos($l_BaseName, '.') === 0) && ($l_BaseName != '.htaccess')) {
	               $g_HiddenFiles[] = $l_FileName;
	            }

//				$g_Structure['d'][$g_Counter] = $l_IsDir;
//				$g_Structure['n'][$g_Counter] = $l_FileName;
				if (ONE_PASS) {
					$g_Structure['n'][$g_Counter] = $l_FileName . DIR_SEPARATOR;
				} else {
					$l_Buffer .= $l_FileName . DIR_SEPARATOR . "\n";
				}

				$l_DirCounter++;

				if ($l_DirCounter > MAX_ALLOWED_PHP_HTML_IN_DIR)
				{
					$g_Doorway[] = $l_SourceDirIndex;
					$l_DirCounter = -655360;
				}

				$g_Counter++;
				$g_FoundTotalDirs++;

				QCR_ScanDirectories($l_FileName);
			} else
			{
				if ($l_NeedToScan)
				{
					$g_FoundTotalFiles++;
					if (in_array($l_Ext, $g_ShortListExt)) 
					{
						$l_DoorwayFilesCounter++;
						
						if ($l_DoorwayFilesCounter > MAX_ALLOWED_PHP_HTML_IN_DIR)
						{
							$g_Doorway[] = $l_SourceDirIndex;
							$l_DoorwayFilesCounter = -655360;
						}
					}

					if (ONE_PASS) {
						QCR_ScanFile($l_FileName, $g_Counter++);
					} else {
						$l_Buffer .= $l_FileName."\n";
					}

					$g_Counter++;
				}
			}

			if (strlen($l_Buffer) > 32000)
			{ 
				file_put_contents(QUEUE_FILENAME, $l_Buffer, FILE_APPEND) or die2("Cannot write to file ".QUEUE_FILENAME);
				$l_Buffer = '';
			}

		}

		closedir($l_DIRH);
	}
	
	if (($l_RootDir == ROOT_PATH) && !empty($l_Buffer)) {
		file_put_contents(QUEUE_FILENAME, $l_Buffer, FILE_APPEND) or die2("Cannot write to file " . QUEUE_FILENAME);
		$l_Buffer = '';                                                                            
	}

}


///////////////////////////////////////////////////////////////////////////
function getFragment($par_Content, $par_Pos) {
  $l_MaxChars = MAX_PREVIEW_LEN;
  $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;

  $par_Content = preg_replace('/[\x00-\x1F\x80-\xFF]/', '~', $par_Content);

  $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 = makeSafeFn(UnwrapObfu($l_Res));
  $l_Res = str_replace('~', '·', $l_Res);
  $l_Res = preg_replace('/\s+/smi', ' ', $l_Res);
  $l_Res = str_replace('' . '?php', '' . '?php ', $l_Res);

  return $l_Res;
}

///////////////////////////////////////////////////////////////////////////
function escapedHexToHex($escaped)
{ $GLOBALS['g_EncObfu']++; return chr(hexdec($escaped[1])); }
function escapedOctDec($escaped)
{ $GLOBALS['g_EncObfu']++; return chr(octdec($escaped[1])); }
function escapedDec($escaped)
{ $GLOBALS['g_EncObfu']++; return chr($escaped[1]); }

///////////////////////////////////////////////////////////////////////////
if (!defined('T_ML_COMMENT')) {
   define('T_ML_COMMENT', T_COMMENT);
} else {
   define('T_DOC_COMMENT', T_ML_COMMENT);
}
          	
function UnwrapObfu($par_Content) {
  $GLOBALS['g_EncObfu'] = 0;
  
  $search  = array( ' ;', ' =', ' ,', ' .', ' (', ' )', ' {', ' }', '; ', '= ', ', ', '. ', '( ', '( ', '{ ', '} ', ' !', ' >', ' <', ' _', '_ ', '< ',  '> ', ' $', ' %',   '% ', '# ', ' #', '^ ', ' ^', ' &', '& ', ' ?', '? ');
  $replace = array(  ';',  '=',  ',',  '.',  '(',  ')',  '{',  '}', ';',  '=',  ',',  '.',  '(',   ')', '{',  '}',   '!',  '>',  '<',  '_', '_',  '<',   '>',   '$',  '%',   '%',  '#',   '#', '^',   '^',  '&', '&',   '?', '?');
  $par_Content = str_replace('@', '', $par_Content);
  $par_Content = preg_replace('~\s+~smi', ' ', $par_Content);
  $par_Content = str_replace($search, $replace, $par_Content);
  $par_Content = preg_replace_callback('~\bchr\(\s*([0-9a-fA-FxX]+)\s*\)~', function ($m) { return "'".chr(intval($m[1], 0))."'"; }, $par_Content );

  $par_Content = preg_replace_callback('/\\\\x([a-fA-F0-9]{1,2})/i','escapedHexToHex', $par_Content);
  $par_Content = preg_replace_callback('/\\\\([0-9]{1,3})/i','escapedOctDec', $par_Content);

  $par_Content = preg_replace('/[\'"]\s*?\.+\s*?[\'"]/smi', '', $par_Content);
  $par_Content = preg_replace('/[\'"]\s*?\++\s*?[\'"]/smi', '', $par_Content);

  $content = str_replace('<?$', '<?php$', $content);
  $content = str_replace('<?php', '<?php ', $content);

  return $par_Content;
}

///////////////////////////////////////////////////////////////////////////
// Unicode BOM is U+FEFF, but after encoded, it will look like this.
define ('UTF32_BIG_ENDIAN_BOM'   , chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
define ('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
define ('UTF16_BIG_ENDIAN_BOM'   , chr(0xFE) . chr(0xFF));
define ('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));
define ('UTF8_BOM'               , chr(0xEF) . chr(0xBB) . chr(0xBF));

function detect_utf_encoding($text) {
    $first2 = substr($text, 0, 2);
    $first3 = substr($text, 0, 3);
    $first4 = substr($text, 0, 3);
    
    if ($first3 == UTF8_BOM) return 'UTF-8';
    elseif ($first4 == UTF32_BIG_ENDIAN_BOM) return 'UTF-32BE';
    elseif ($first4 == UTF32_LITTLE_ENDIAN_BOM) return 'UTF-32LE';
    elseif ($first2 == UTF16_BIG_ENDIAN_BOM) return 'UTF-16BE';
    elseif ($first2 == UTF16_LITTLE_ENDIAN_BOM) return 'UTF-16LE';

    return false;
}

///////////////////////////////////////////////////////////////////////////
function QCR_SearchPHP($src)
{
  if (preg_match("/(<\?php[\w\s]{5,})/smi", $src, $l_Found, PREG_OFFSET_CAPTURE)) {
	  return $l_Found[0][1];
  }

  if (preg_match("/(<script[^>]*language\s*=\s*)('|\"|)php('|\"|)([^>]*>)/i", $src, $l_Found, PREG_OFFSET_CAPTURE)) {
    return $l_Found[0][1];
  }

  return false;
}


///////////////////////////////////////////////////////////////////////////
function knowUrl($par_URL) {
  global $g_UrlIgnoreList;

  for ($jk = 0; $jk < count($g_UrlIgnoreList); $jk++) {
     if  (stripos($par_URL, $g_UrlIgnoreList[$jk]) !== false) {
     	return true;
     }
  }

  return false;
}

///////////////////////////////////////////////////////////////////////////

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>';
}

///////////////////////////////////////////////////////////////////////////

function CheckVulnerability($par_Filename, $par_Index, $par_Content) {
    global $g_Vulnerable, $g_CmsListDetector;
	

	$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;
			$g_Vulnerable[] = $l_Vuln;
			return true;
	}

	if (
	    (strpos($par_Filename, 'administrator/components/com_media/helpers/media.php') !== false) &&
		(strpos($par_Content, '$format == \'\' || $format == false ||') === false)
		) 
	{		
		if ($g_CmsListDetector->isCms(CMS_JOOMLA, '1.5')) {
			$l_Vuln['id'] = 'AFU : https://docs.joomla.org/Security_hotfixes_for_Joomla_EOL_versions';
			$l_Vuln['ndx'] = $par_Index;
			$g_Vulnerable[] = $l_Vuln;
			return true;
		}
		
		return false;
	}

	if (
	    (strpos($par_Filename, 'joomla/filesystem/file.php') !== false) &&
		(strpos($par_Content, '$file = rtrim($file, \'.\');') === false)
		) 
	{		
		if ($g_CmsListDetector->isCms(CMS_JOOMLA, '1.5')) {
			$l_Vuln['id'] = 'AFU : https://docs.joomla.org/Security_hotfixes_for_Joomla_EOL_versions';
			$l_Vuln['ndx'] = $par_Index;
			$g_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;
		$g_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;
			$g_Vulnerable[] = $l_Vuln;
			return true;
		}
		
		return false;
	}

	if ((strpos($par_Filename, 'elfinder/php/connector.php') !== false) ||
	    (strpos($par_Filename, 'elfinder/elfinder.') !== false)) {
			$l_Vuln['id'] = 'AFU : elFinder';
			$l_Vuln['ndx'] = $par_Index;
			$g_Vulnerable[] = $l_Vuln;
			return true;
	}

	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;
			$g_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;
			$g_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;
			$g_Vulnerable[] = $l_Vuln;
			return true;
		}
		
		return false;
	}

	if (strpos($par_Filename, 'components/com_rsform/helpers/rsform.php') !== false) {
		if (strpos($par_Content, 'eval($form->ScriptDisplay);') !== false) {
			$l_Vuln['id'] = 'RCE : RSFORM : rsform.php, LINE 1605';
			$l_Vuln['ndx'] = $par_Index;
			$g_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;
			$g_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;
			$g_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;
		$g_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;
   		   $g_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;
			$g_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;
			$g_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;
			$g_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;
			$g_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;
			$g_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;
			$g_Vulnerable[] = $l_Vuln;
			return true;
		}
		
		return false;
	}

	if (strpos($par_Filename, 'phpmailer.php') !== 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_Found = false;
                           }
                        }

                        if (!$l_Found) {

                           $l_Found = preg_match('~Version\s*=\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 < 5220) {
                                 $l_Found = false;
                              }
                           }
			}


		        if (!$l_Found) {
	   		   $l_Vuln['id'] = 'RCE : CVE-2016-10045, CVE-2016-10031';
			   $l_Vuln['ndx'] = $par_Index;
			   $g_Vulnerable[] = $l_Vuln;
			   return true;
                        }
		}
		
		return false;
	}




}

///////////////////////////////////////////////////////////////////////////
function QCR_GoScan($par_Offset)
{
	global $g_IframerFragment, $g_Iframer, $g_Redirect, $g_Doorway, $g_EmptyLink, $g_Structure, $g_Counter, 
		   $g_HeuristicType, $g_HeuristicDetected, $g_TotalFolder, $g_TotalFiles, $g_WarningPHP, $g_AdwareList,
		   $g_CriticalPHP, $g_Phishing, $g_CriticalJS, $g_UrlIgnoreList, $g_CriticalJSFragment, $g_PHPCodeInside, $g_PHPCodeInsideFragment, 
		   $g_NotRead, $g_WarningPHPFragment, $g_WarningPHPSig, $g_BigFiles, $g_RedirectPHPFragment, $g_EmptyLinkSrc, $g_CriticalPHPSig, $g_CriticalPHPFragment, 
           $g_Base64Fragment, $g_UnixExec, $g_PhishingSigFragment, $g_PhishingFragment, $g_PhishingSig, $g_CriticalJSSig, $g_IframerFragment, $g_CMS, $defaults, $g_AdwareListFragment, $g_KnownList,$g_Vulnerable;

    QCR_Debug('QCR_GoScan ' . $par_Offset);

	$i = 0;
	
	try {
		$s_file = new SplFileObject(QUEUE_FILENAME);
		$s_file->setFlags(SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);

		foreach ($s_file as $l_Filename) {
			QCR_ScanFile($l_Filename, $i++);
		}
		
		unset($s_file);	
	}
	catch (Exception $e) { QCR_Debug( $e->getMessage() ); }
}

///////////////////////////////////////////////////////////////////////////
function QCR_ScanFile($l_Filename, $i = 0)
{
	global $g_IframerFragment, $g_Iframer, $g_Redirect, $g_Doorway, $g_EmptyLink, $g_Structure, $g_Counter, 
		   $g_HeuristicType, $g_HeuristicDetected, $g_TotalFolder, $g_TotalFiles, $g_WarningPHP, $g_AdwareList,
		   $g_CriticalPHP, $g_Phishing, $g_CriticalJS, $g_UrlIgnoreList, $g_CriticalJSFragment, $g_PHPCodeInside, $g_PHPCodeInsideFragment, 
		   $g_NotRead, $g_WarningPHPFragment, $g_WarningPHPSig, $g_BigFiles, $g_RedirectPHPFragment, $g_EmptyLinkSrc, $g_CriticalPHPSig, $g_CriticalPHPFragment, 
           $g_Base64Fragment, $g_UnixExec, $g_PhishingSigFragment, $g_PhishingFragment, $g_PhishingSig, $g_CriticalJSSig, $g_IframerFragment, $g_CMS, $defaults, $g_AdwareListFragment, 
           $g_KnownList,$g_Vulnerable, $g_CriticalFiles, $g_DeMapper;

	global $g_CRC;
	static $_files_and_ignored = 0;

			$l_CriticalDetected = false;
			$l_Stat = stat($l_Filename);

			if (substr($l_Filename, -1) == DIR_SEPARATOR) {
				// FOLDER
				$g_Structure['n'][$i] = $l_Filename;
				$g_TotalFolder++;
				printProgress($_files_and_ignored, $l_Filename);
				return;
			}

			QCR_Debug('Scan file ' . $l_Filename);
			printProgress(++$_files_and_ignored, $l_Filename);

     			// ignore itself
     			if ($l_Filename == __FILE__) {
     				return;
     			}

			// FILE
			if ((MAX_SIZE_TO_SCAN > 0 AND $l_Stat['size'] > MAX_SIZE_TO_SCAN) || ($l_Stat['size'] < 0))
			{
				$g_BigFiles[] = $i;

                                if (function_exists('aibolit_onBigFile')) { aibolit_onBigFile($l_Filename); }

				AddResult($l_Filename, $i);

		                $l_Ext = strtolower(pathinfo($l_Filename, PATHINFO_EXTENSION));
                                if ((!AI_HOSTER) && in_array($l_Ext, $g_CriticalFiles)) {
				    $g_CriticalPHP[] = $i;
				    $g_CriticalPHPFragment[] = "BIG FILE. SKIPPED.";
				    $g_CriticalPHPSig[] = "big_1";
                                }
			}
			else
			{
				$g_TotalFiles++;

			$l_TSStartScan = microtime(true);

		$l_Ext = strtolower(pathinfo($l_Filename, PATHINFO_EXTENSION));
		if (filetype($l_Filename) == 'file') {
                   $l_Content = @file_get_contents($l_Filename);
		   if (SHORT_PHP_TAG) {
//                      $l_Content = preg_replace('|<\?\s|smiS', '<?php ', $l_Content); 
                   }

                   $l_Unwrapped = @php_strip_whitespace($l_Filename);
                }

		
                if ((($l_Content == '') || ($l_Unwrapped == '')) && ($l_Stat['size'] > 0)) {
                   $g_NotRead[] = $i;
                   if (function_exists('aibolit_onReadError')) { aibolit_onReadError($l_Filename, 'io'); }
                   AddResult('[io] ' . $l_Filename, $i);
                   return;
                }

				// unix executables
				if (strpos($l_Content, chr(127) . 'ELF') !== false) 
				{
			        	if (!in_array($l_Filename, $g_UnixExec)) {
                    				$g_UnixExec[] = $l_Filename;
					}

				        return;
                		}

				$g_CRC = _hash_($l_Unwrapped);

				$l_UnicodeContent = detect_utf_encoding($l_Content);
				//$l_Unwrapped = $l_Content;

				// check vulnerability in files
				$l_CriticalDetected = CheckVulnerability($l_Filename, $i, $l_Content);				

				if ($l_UnicodeContent !== false) {
       				   if (function_exists('iconv')) {
				      $l_Unwrapped = iconv($l_UnicodeContent, "CP1251//IGNORE", $l_Unwrapped);
//       			   if (function_exists('mb_convert_encoding')) {
//                                    $l_Unwrapped = mb_convert_encoding($l_Unwrapped, $l_UnicodeContent, "CP1251");
                                   } else {
                                      $g_NotRead[] = $i;
                                      if (function_exists('aibolit_onReadError')) { aibolit_onReadError($l_Filename, 'ec'); }
                                      AddResult('[ec] ' . $l_Filename, $i);
				   }
                                }

				// critical
				$g_SkipNextCheck = false;

                                $l_DeobfType = '';
				if (!AI_HOSTER) {
                                   $l_DeobfType = getObfuscateType($l_Unwrapped);
                                }

                                if ($l_DeobfType != '') {
                                   $l_Unwrapped = deobfuscate($l_Unwrapped);
				   $g_SkipNextCheck = checkFalsePositives($l_Filename, $l_Unwrapped, $l_DeobfType);
                                } else {
     				   if (DEBUG_MODE) {
				      stdOut("\n...... NOT OBFUSCATED\n");
				   }
				}

				$l_Unwrapped = UnwrapObfu($l_Unwrapped);
				
				if ((!$g_SkipNextCheck) && CriticalPHP($l_Filename, $i, $l_Unwrapped, $l_Pos, $l_SigId))
				{
				        if ($l_Ext == 'js') {
 					   $g_CriticalJS[] = $i;
 					   $g_CriticalJSFragment[] = getFragment($l_Unwrapped, $l_Pos);
 					   $g_CriticalJSSig[] = $l_SigId;
                                        } else {
       					   $g_CriticalPHP[] = $i;
       					   $g_CriticalPHPFragment[] = getFragment($l_Unwrapped, $l_Pos);
      					   $g_CriticalPHPSig[] = $l_SigId;
                                        }

					$g_SkipNextCheck = true;
				} else {
         				if ((!$g_SkipNextCheck) && CriticalPHP($l_Filename, $i, $l_Content, $l_Pos, $l_SigId))
         				{
					        if ($l_Ext == 'js') {
         					   $g_CriticalJS[] = $i;
         					   $g_CriticalJSFragment[] = getFragment($l_Content, $l_Pos);
         					   $g_CriticalJSSig[] = $l_SigId;
                                                } else {
               					   $g_CriticalPHP[] = $i;
               					   $g_CriticalPHPFragment[] = getFragment($l_Content, $l_Pos);
      						   $g_CriticalPHPSig[] = $l_SigId;
                                                }

         					$g_SkipNextCheck = true;
         				}
				}

				$l_TypeDe = 0;
			    if ((!$g_SkipNextCheck) && HeuristicChecker($l_Content, $l_TypeDe, $l_Filename)) {
					$g_HeuristicDetected[] = $i;
					$g_HeuristicType[] = $l_TypeDe;
					$l_CriticalDetected = true;
				}

				// critical JS
				if (!$g_SkipNextCheck) {
					$l_Pos = CriticalJS($l_Filename, $i, $l_Unwrapped, $l_SigId);
					if ($l_Pos !== false)
					{
					        if ($l_Ext == 'js') {
         					   $g_CriticalJS[] = $i;
         					   $g_CriticalJSFragment[] = getFragment($l_Unwrapped, $l_Pos);
         					   $g_CriticalJSSig[] = $l_SigId;
                                                } else {
               					   $g_CriticalPHP[] = $i;
               					   $g_CriticalPHPFragment[] = getFragment($l_Unwrapped, $l_Pos);
      						   $g_CriticalPHPSig[] = $l_SigId;
                                                }

						$g_SkipNextCheck = true;
					}
			    }

				// phishing
				if (!$g_SkipNextCheck) {
					$l_Pos = Phishing($l_Filename, $i, $l_Unwrapped, $l_SigId);
					if ($l_Pos === false) {
                                            $l_Pos = Phishing($l_Filename, $i, $l_Content, $l_SigId);
                                        }

					if ($l_Pos !== false)
					{
						$g_Phishing[] = $i;
						$g_PhishingFragment[] = getFragment($l_Unwrapped, $l_Pos);
						$g_PhishingSigFragment[] = $l_SigId;
						$g_SkipNextCheck = true;
					}
				}

			
			if (!$g_SkipNextCheck) {
				if (SCAN_ALL_FILES || stripos($l_Filename, 'index.'))
				{
					// check iframes
					if (preg_match_all('|<iframe[^>]+src.+?>|smi', $l_Unwrapped, $l_Found, PREG_SET_ORDER)) 
					{
						for ($kk = 0; $kk < count($l_Found); $kk++) {
						    $l_Pos = stripos($l_Found[$kk][0], 'http://');
						    $l_Pos = $l_Pos || stripos($l_Found[$kk][0], 'https://');
						    $l_Pos = $l_Pos || stripos($l_Found[$kk][0], 'ftp://');
							if  (($l_Pos !== false ) && (!knowUrl($l_Found[$kk][0]))) {
         						$g_Iframer[] = $i;
         						$g_IframerFragment[] = getFragment($l_Found[$kk][0], $l_Pos);
         						$l_CriticalDetected = true;
							}
						}
					}

					// check empty links
					if ((($defaults['report_mask'] & REPORT_MASK_SPAMLINKS) == REPORT_MASK_SPAMLINKS) &&
					   (preg_match_all('|<a[^>]+href([^>]+?)>(.*?)</a>|smi', $l_Unwrapped, $l_Found, PREG_SET_ORDER)))
					{
						for ($kk = 0; $kk < count($l_Found); $kk++) {
							if  ((stripos($l_Found[$kk][1], 'http://') !== false) &&
                                                            (trim(strip_tags($l_Found[$kk][2])) == '')) {

								$l_NeedToAdd = true;

							    if  ((stripos($l_Found[$kk][1], $defaults['site_url']) !== false)
                                                                 || knowUrl($l_Found[$kk][1])) {
										$l_NeedToAdd = false;
								}
								
								if ($l_NeedToAdd && (count($g_EmptyLink) < MAX_EXT_LINKS)) {
									$g_EmptyLink[] = $i;
									$g_EmptyLinkSrc[$i][] = substr($l_Found[$kk][0], 0, MAX_PREVIEW_LEN);
									$l_CriticalDetected = true;
								}
							}
						}
					}
				}

				// check for PHP code inside any type of file
				if (stripos($l_Ext, 'ph') === false)
				{
					$l_Pos = QCR_SearchPHP($l_Content);
					if ($l_Pos !== false)
					{
						$g_PHPCodeInside[] = $i;
						$g_PHPCodeInsideFragment[] = getFragment($l_Unwrapped, $l_Pos);
						$l_CriticalDetected = true;
					}
				}

				// htaccess
				if (stripos($l_Filename, '.htaccess'))
				{
				
					if (stripos($l_Content, 'index.php?name=$1') !== false ||
						stripos($l_Content, 'index.php?m=1') !== false
					)
					{
						$g_SuspDir[] = $i;
					}

					$l_HTAContent = preg_replace('|^\s*#.+$|m', '', $l_Content);

					$l_Pos = stripos($l_Content, 'auto_prepend_file');
					if ($l_Pos !== false) {
						$g_Redirect[] = $i;
						$g_RedirectPHPFragment[] = getFragment($l_Content, $l_Pos);
						$l_CriticalDetected = true;
					}
					
					$l_Pos = stripos($l_Content, 'auto_append_file');
					if ($l_Pos !== false) {
						$g_Redirect[] = $i;
						$g_RedirectPHPFragment[] = getFragment($l_Content, $l_Pos);
						$l_CriticalDetected = true;
					}

					$l_Pos = stripos($l_Content, '^(%2d|-)[^=]+$');
					if ($l_Pos !== false)
					{
						$g_Redirect[] = $i;
                        			$g_RedirectPHPFragment[] = getFragment($l_Content, $l_Pos);
						$l_CriticalDetected = true;
					}

					if (!$l_CriticalDetected) {
						$l_Pos = stripos($l_Content, '%{HTTP_USER_AGENT}');
						if ($l_Pos !== false)
						{
							$g_Redirect[] = $i;
							$g_RedirectPHPFragment[] = getFragment($l_Content, $l_Pos);
							$l_CriticalDetected = true;
						}
					}

					if (!$l_CriticalDetected) {
						if (
							preg_match_all("|RewriteRule\s+.+?\s+http://(.+?)/.+\s+\[.*R=\d+.*\]|smi", $l_HTAContent, $l_Found, PREG_SET_ORDER)
						)
						{
							$l_Host = str_replace('www.', '', $_SERVER['HTTP_HOST']);
							for ($j = 0; $j < sizeof($l_Found); $j++)
							{
								$l_Found[$j][1] = str_replace('www.', '', $l_Found[$j][1]);
								if ($l_Found[$j][1] != $l_Host)
								{
									$g_Redirect[] = $i;
									$l_CriticalDetected = true;
									break;
								}
							}
						}
					}

					unset($l_HTAContent);
			    }
			

			    // warnings
				$l_Pos = '';
				
			    if (WarningPHP($l_Filename, $l_Unwrapped, $l_Pos, $l_SigId))
				{       
					$l_Prio = 1;
					if (strpos($l_Filename, '.ph') !== false) {
					   $l_Prio = 0;
					}
					
					$g_WarningPHP[$l_Prio][] = $i;
					$g_WarningPHPFragment[$l_Prio][] = getFragment($l_Unwrapped, $l_Pos);
					$g_WarningPHPSig[] = $l_SigId;

					$l_CriticalDetected = true;
				}
				

				// adware
				if (Adware($l_Filename, $l_Unwrapped, $l_Pos))
				{
					$g_AdwareList[] = $i;
					$g_AdwareListFragment[] = getFragment($l_Unwrapped, $l_Pos);
					$l_CriticalDetected = true;
				}

				// articles
				if (stripos($l_Filename, 'article_index'))
				{
					$g_AdwareList[] = $i;
					$l_CriticalDetected = true;
				}
			}
		} // end of if (!$g_SkipNextCheck) {
			
			unset($l_Unwrapped);
			unset($l_Content);
			
			//printProgress(++$_files_and_ignored, $l_Filename);

			$l_TSEndScan = microtime(true);
                        if ($l_TSEndScan - $l_TSStartScan >= 0.5) {
			   			   usleep(SCAN_DELAY * 1000);
                        }

			if ($g_SkipNextCheck || $l_CriticalDetected) {
				AddResult($l_Filename, $i);
			}
}

function AddResult($l_Filename, $i)
{
	global $g_Structure, $g_CRC;
	
	$l_Stat = stat($l_Filename);
	$g_Structure['n'][$i] = $l_Filename;
	$g_Structure['s'][$i] = $l_Stat['size'];
	$g_Structure['c'][$i] = $l_Stat['ctime'];
	$g_Structure['m'][$i] = $l_Stat['mtime'];
	$g_Structure['crc'][$i] = $g_CRC;
}

///////////////////////////////////////////////////////////////////////////
function WarningPHP($l_FN, $l_Content, &$l_Pos, &$l_SigId)
{
	   global $g_SusDB,$g_ExceptFlex, $gXX_FlexDBShe, $gX_FlexDBShe, $g_FlexDBShe, $gX_DBShe, $g_DBShe, $g_Base64, $g_Base64Fragment;

  $l_Res = false;

  if (AI_EXTRA_WARN) {
  	foreach ($g_SusDB as $l_Item) {
    	if (preg_match('#' . $l_Item . '#smiS', $l_Content, $l_Found, PREG_OFFSET_CAPTURE)) {
       	 	if (!CheckException($l_Content, $l_Found)) {
           	 	$l_Pos = $l_Found[0][1];
           	 	//$l_SigId = myCheckSum($l_Item);
           	 	$l_SigId = getSigId($l_Found);
           	 	return true;
       	 	}
    	}
  	}
  }

  if (AI_EXPERT < 2) {
    	foreach ($gXX_FlexDBShe as $l_Item) {
      		if (preg_match('#' . $l_Item . '#smiS', $l_Content, $l_Found, PREG_OFFSET_CAPTURE)) {
             	$l_Pos = $l_Found[0][1];
           	    //$l_SigId = myCheckSum($l_Item);
           	    $l_SigId = getSigId($l_Found);
        	    return true;
	  		}
    	}

	}

    if (AI_EXPERT < 1) {
    	foreach ($gX_FlexDBShe as $l_Item) {
      		if (preg_match('#' . $l_Item . '#smiS', $l_Content, $l_Found, PREG_OFFSET_CAPTURE)) {
             	$l_Pos = $l_Found[0][1];
           	 	//$l_SigId = myCheckSum($l_Item);
           	 	$l_SigId = getSigId($l_Found);
        	    return true;
	  		}
    	}

	    $l_Content_lo = strtolower($l_Content);

	    foreach ($gX_DBShe as $l_Item) {
	      $l_Pos = strpos($l_Content_lo, $l_Item);
	      if ($l_Pos !== false) {
	         $l_SigId = myCheckSum($l_Item);
	         return true;
	      }
		}
	}

}

///////////////////////////////////////////////////////////////////////////
function Adware($l_FN, $l_Content, &$l_Pos)
{
  global $g_AdwareSig;

  $l_Res = false;

foreach ($g_AdwareSig as $l_Item) {
    $offset = 0;
    while (preg_match('#' . $l_Item . '#smi', $l_Content, $l_Found, PREG_OFFSET_CAPTURE, $offset)) {
       if (!CheckException($l_Content, $l_Found)) {
           $l_Pos = $l_Found[0][1];
           return true;
       }

       $offset = $l_Found[0][1] + 1;
    }
  }

  return $l_Res;
}

///////////////////////////////////////////////////////////////////////////
function CheckException(&$l_Content, &$l_Found) {
  global $g_ExceptFlex, $gX_FlexDBShe, $gXX_FlexDBShe, $g_FlexDBShe, $gX_DBShe, $g_DBShe, $g_Base64, $g_Base64Fragment;
   $l_FoundStrPlus = substr($l_Content, max($l_Found[0][1] - 10, 0), 70);

   foreach ($g_ExceptFlex as $l_ExceptItem) {
      if (@preg_match('#' . $l_ExceptItem . '#smi', $l_FoundStrPlus, $l_Detected)) {
//         print("\n\nEXCEPTION FOUND\n[" . $l_ExceptItem .  "]\n" . $l_Content . "\n\n----------\n\n");
         return true;
      }
   }

   return false;
}

///////////////////////////////////////////////////////////////////////////
function Phishing($l_FN, $l_Index, $l_Content, &$l_SigId)
{
  global $g_PhishingSig, $g_PhishFiles, $g_PhishEntries;

  $l_Res = false;

  // need check file (by extension) ?
  $l_SkipCheck = SMART_SCAN;

if ($l_SkipCheck) {
  	foreach($g_PhishFiles as $l_Ext) {
  		  if (strpos($l_FN, $l_Ext) !== false) {
		  			$l_SkipCheck = false;
		  		  	break;
  	  	  }
  	  }
  }

  // need check file (by signatures) ?
  if ($l_SkipCheck && preg_match('~' . $g_PhishEntries . '~smiS', $l_Content, $l_Found)) {
	  $l_SkipCheck = false;
  }

  if ($l_SkipCheck && SMART_SCAN) {
      if (DEBUG_MODE) {
         echo "Skipped phs file, not critical.\n";
      }

	  return false;
  }


  foreach ($g_PhishingSig as $l_Item) {
    $offset = 0;
    while (preg_match('#' . $l_Item . '#smi', $l_Content, $l_Found, PREG_OFFSET_CAPTURE, $offset)) {
       if (!CheckException($l_Content, $l_Found)) {
           $l_Pos = $l_Found[0][1];
//           $l_SigId = myCheckSum($l_Item);
           $l_SigId = getSigId($l_Found);

           if (DEBUG_MODE) {
              echo "Phis: $l_FN matched [$l_Item] in $l_Pos\n";
           }

           return $l_Pos;
       }
       $offset = $l_Found[0][1] + 1;

    }
  }

  return $l_Res;
}

///////////////////////////////////////////////////////////////////////////
function CriticalJS($l_FN, $l_Index, $l_Content, &$l_SigId)
{
  global $g_JSVirSig, $gX_JSVirSig, $g_VirusFiles, $g_VirusEntries, $g_RegExpStat;

  $l_Res = false;
  
    // need check file (by extension) ?
    $l_SkipCheck = SMART_SCAN;
	
	if ($l_SkipCheck) {
       	   foreach($g_VirusFiles as $l_Ext) {
    		  if (strpos($l_FN, $l_Ext) !== false) {
  		  			$l_SkipCheck = false;
  		  		  	break;
    	  	  }
    	  }
	  }
  
    // need check file (by signatures) ?
    if ($l_SkipCheck && preg_match('~' . $g_VirusEntries . '~smiS', $l_Content, $l_Found)) {
  	  $l_SkipCheck = false;
    }
  
    if ($l_SkipCheck && SMART_SCAN) {
        if (DEBUG_MODE) {
           echo "Skipped js file, not critical.\n";
        }

  	  return false;
    }
  

  foreach ($g_JSVirSig as $l_Item) {
    $offset = 0;
    if (DEBUG_PERFORMANCE) { 
       $stat_start = microtime(true);
    }

    while (preg_match('#' . $l_Item . '#smi', $l_Content, $l_Found, PREG_OFFSET_CAPTURE, $offset)) {

       if (!CheckException($l_Content, $l_Found)) {
           $l_Pos = $l_Found[0][1];
//           $l_SigId = myCheckSum($l_Item);
           $l_SigId = getSigId($l_Found);

           if (DEBUG_MODE) {
              echo "JS: $l_FN matched [$l_Item] in $l_Pos\n";
           }

           return $l_Pos;
       }

       $offset = $l_Found[0][1] + 1;

    }

    if (DEBUG_PERFORMANCE) { 
       $stat_stop = microtime(true);
       $g_RegExpStat[$l_Item] += $stat_stop - $stat_start;
    }
//   if (pcre_error($l_FN, $l_Index)) {  }

  }

if (AI_EXPERT > 1) {
  foreach ($gX_JSVirSig as $l_Item) {
    if (DEBUG_PERFORMANCE) { 
       $stat_start = microtime(true);
    }

    if (preg_match('#' . $l_Item . '#smi', $l_Content, $l_Found, PREG_OFFSET_CAPTURE)) {
       if (!CheckException($l_Content, $l_Found)) {
           $l_Pos = $l_Found[0][1];
           //$l_SigId = myCheckSum($l_Item);
           $l_SigId = getSigId($l_Found);

           if (DEBUG_MODE) {
              echo "JS PARA: $l_FN matched [$l_Item] in $l_Pos\n";
           }

           return $l_Pos;
       }
    }

    if (DEBUG_PERFORMANCE) { 
       $stat_stop = microtime(true);
       $g_RegExpStat[$l_Item] += $stat_stop - $stat_start;
    }

//   if (pcre_error($l_FN, $l_Index)) {  }

  }
}

  return $l_Res;
}

////////////////////////////////////////////////////////////////////////////
function pcre_error($par_FN, $par_Index) {
   global $g_NotRead, $g_Structure;

   $err = preg_last_error();
   if (($err == PREG_BACKTRACK_LIMIT_ERROR) || ($err == PREG_RECURSION_LIMIT_ERROR)) {
      if (!in_array($par_Index, $g_NotRead)) {
         if (function_exists('aibolit_onReadError')) { aibolit_onReadError($l_Filename, 're'); }
         $g_NotRead[] = $par_Index;
         AddResult('[re] ' . $par_FN, $par_Index);
      }
 
      return true;
   }

   return false;
}



////////////////////////////////////////////////////////////////////////////
define('SUSP_MTIME', 1); // suspicious mtime (greater than ctime)
define('SUSP_PERM', 2); // suspicious permissions 
define('SUSP_PHP_IN_UPLOAD', 3); // suspicious .php file in upload or image folder 

  function get_descr_heur($type) {
     switch ($type) {
	     case SUSP_MTIME: return AI_STR_077; 
	     case SUSP_PERM: return AI_STR_078;  
	     case SUSP_PHP_IN_UPLOAD: return AI_STR_079; 
	 }
	 
	 return "---";
  }

  ///////////////////////////////////////////////////////////////////////////
  function HeuristicChecker($l_Content, &$l_Type, $l_Filename) {
     $res = false;
	 
	 $l_Stat = stat($l_Filename);
	 // most likely changed by touch
	 if ($l_Stat['ctime'] < $l_Stat['mtime']) {
	     $l_Type = SUSP_MTIME;
		 return true;
	 }

	 	 
	 $l_Perm = fileperms($l_Filename) & 0777;
	 if (($l_Perm & 0400 != 0400) || // not readable by owner
		($l_Perm == 0000) ||
		($l_Perm == 0404) ||
		($l_Perm == 0505))
	 {
		 $l_Type = SUSP_PERM;
		 return true;
	 }

	 
     if ((strpos($l_Filename, '.ph')) && (
	     strpos($l_Filename, '/images/stories/') ||
	     //strpos($l_Filename, '/img/') ||
		 //strpos($l_Filename, '/images/') ||
	     //strpos($l_Filename, '/uploads/') ||
		 strpos($l_Filename, '/wp-content/upload/') 
	    )	    
	 ) {
		$l_Type = SUSP_PHP_IN_UPLOAD;
	 	return true;
	 }

     return false;
  }

///////////////////////////////////////////////////////////////////////////
function CriticalPHP($l_FN, $l_Index, $l_Content, &$l_Pos, &$l_SigId)
{
  global $g_ExceptFlex, $gXX_FlexDBShe, $gX_FlexDBShe, $g_FlexDBShe, $gX_DBShe, $g_DBShe, $g_Base64, $g_Base64Fragment,
  $g_CriticalFiles, $g_CriticalEntries, $g_RegExpStat;

  // need check file (by extension) ?
  $l_SkipCheck = SMART_SCAN;

  if ($l_SkipCheck) {
	  foreach($g_CriticalFiles as $l_Ext) {
  	  	if ((strpos($l_FN, $l_Ext) !== false) && (strpos($l_FN, '.js') === false)) {
		   $l_SkipCheck = false;
		   break;
  	  	}
  	  }
  }
  
  // need check file (by signatures) ?
  if ($l_SkipCheck && preg_match('~' . $g_CriticalEntries . '~smiS', $l_Content, $l_Found)) {
     $l_SkipCheck = false;
  }
  
  
  // if not critical - skip it 
  if ($l_SkipCheck && SMART_SCAN) {
      if (DEBUG_MODE) {
         echo "Skipped file, not critical.\n";
      }

	  return false;
  }

  foreach ($g_FlexDBShe as $l_Item) {
    $offset = 0;

    if (DEBUG_PERFORMANCE) { 
       $stat_start = microtime(true);
    }

    while (preg_match('#' . $l_Item . '#smiS', $l_Content, $l_Found, PREG_OFFSET_CAPTURE, $offset)) {
       if (!CheckException($l_Content, $l_Found)) {
           $l_Pos = $l_Found[0][1];
           //$l_SigId = myCheckSum($l_Item);
           $l_SigId = getSigId($l_Found);

           if (DEBUG_MODE) {
              echo "CRIT 1: $l_FN matched [$l_Item] in $l_Pos\n";
           }

           return true;
       }

       $offset = $l_Found[0][1] + 1;

    }

    if (DEBUG_PERFORMANCE) { 
       $stat_stop = microtime(true);
       $g_RegExpStat[$l_Item] += $stat_stop - $stat_start;
    }

//   if (pcre_error($l_FN, $l_Index)) {  }

  }

if (AI_EXPERT > 0) {
  foreach ($gX_FlexDBShe as $l_Item) {
    if (DEBUG_PERFORMANCE) { 
       $stat_start = microtime(true);
    }

    if (preg_match('#' . $l_Item . '#smiS', $l_Content, $l_Found, PREG_OFFSET_CAPTURE)) {
       if (!CheckException($l_Content, $l_Found)) {
           $l_Pos = $l_Found[0][1];
           //$l_SigId = myCheckSum($l_Item);
           $l_SigId = getSigId($l_Found);

           if (DEBUG_MODE) {
              echo "CRIT 3: $l_FN matched [$l_Item] in $l_Pos\n";
           }

           return true;
       }
    }

    if (DEBUG_PERFORMANCE) { 
       $stat_stop = microtime(true);
       $g_RegExpStat[$l_Item] += $stat_stop - $stat_start;
    }

//   if (pcre_error($l_FN, $l_Index)) {  }
  }
}

if (AI_EXPERT > 1) {
  foreach ($gXX_FlexDBShe as $l_Item) {
    if (DEBUG_PERFORMANCE) { 
       $stat_start = microtime(true);
    }

    if (preg_match('#' . $l_Item . '#smiS', $l_Content, $l_Found, PREG_OFFSET_CAPTURE)) {
       if (!CheckException($l_Content, $l_Found)) {
           $l_Pos = $l_Found[0][1];
           //$l_SigId = myCheckSum($l_Item);
           $l_SigId = getSigId($l_Found);

           if (DEBUG_MODE) {
              echo "CRIT 2: $l_FN matched [$l_Item] in $l_Pos\n";
           }

           return true;
       }
    }

    if (DEBUG_PERFORMANCE) { 
       $stat_stop = microtime(true);
       $g_RegExpStat[$l_Item] += $stat_stop - $stat_start;
    }

//   if (pcre_error($l_FN, $l_Index)) {  }
  }
}

  $l_Content_lo = strtolower($l_Content);

  foreach ($g_DBShe as $l_Item) {
    $l_Pos = strpos($l_Content_lo, $l_Item);
    if ($l_Pos !== false) {
       $l_SigId = myCheckSum($l_Item);

       if (DEBUG_MODE) {
          echo "CRIT 4: $l_FN matched [$l_Item] in $l_Pos\n";
       }

       return true;
    }
  }

if (AI_EXPERT > 0) {
  foreach ($gX_DBShe as $l_Item) {
    $l_Pos = strpos($l_Content_lo, $l_Item);
    if ($l_Pos !== false) {
       $l_SigId = myCheckSum($l_Item);

       if (DEBUG_MODE) {
          echo "CRIT 5: $l_FN matched [$l_Item] in $l_Pos\n";
       }

       return true;
    }
  }
}

if (AI_HOSTER) return false;

if (AI_EXPERT > 0) {
  if ((strpos($l_Content, 'GIF89') === 0) && (strpos($l_FN, '.php') !== false )) {
     $l_Pos = 0;

     if (DEBUG_MODE) {
          echo "CRIT 6: $l_FN matched [$l_Item] in $l_Pos\n";
     }

     return true;
  }
}

  // detect uploaders / droppers
if (AI_EXPERT > 1) {
  $l_Found = null;
  if (
     (filesize($l_FN) < 1024) &&
     (strpos($l_FN, '.ph') !== false) &&
     (
       (($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];
       } 
     if (DEBUG_MODE) {
          echo "CRIT 7: $l_FN matched [$l_Item] in $l_Pos\n";
     }

     return true;
  }
}

  return false;
}

///////////////////////////////////////////////////////////////////////////
if (!isCli()) {
   header('Content-type: text/html; charset=utf-8');
}

if (!isCli()) {

  $l_PassOK = false;
  if (strlen(PASS) > 8) {
     $l_PassOK = true;   
  } 

  if ($l_PassOK && preg_match('|[0-9]|', PASS, $l_Found) && preg_match('|[A-Z]|', PASS, $l_Found) && preg_match('|[a-z]|', PASS, $l_Found) ) {
     $l_PassOK = true;   
  }
  
  if (!$l_PassOK) {  
    echo sprintf(AI_STR_009, generatePassword());
    exit;
  }

  if (isset($_GET['fn']) && ($_GET['ph'] == crc32(PASS))) {
     printFile();
     exit;
  }

  if ($_GET['p'] != PASS) {
    $generated_pass = generatePassword(); 
    echo sprintf(AI_STR_010, $generated_pass, $generated_pass);
    exit;
  }
}

if (!is_readable(ROOT_PATH)) {
  echo AI_STR_011;
  exit;
}

if (isCli()) {
	if (defined('REPORT_PATH') AND 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) AND is_file($file) AND !is_writable($file))
		{
			die2("\nCannot write report. Report file '$file' exists but is not writable.");
		}
	}
}


// detect version CMS
$g_KnownCMS = array();
$tmp_cms = array();
$g_CmsListDetector = new CmsVersionDetector(ROOT_PATH);
$l_CmsDetectedNum = $g_CmsListDetector->getCmsNumber();
for ($tt = 0; $tt < $l_CmsDetectedNum; $tt++) {
    $g_CMS[] = $g_CmsListDetector->getCmsName($tt) . ' v' . makeSafeFn($g_CmsListDetector->getCmsVersion($tt));
    $tmp_cms[strtolower($g_CmsListDetector->getCmsName($tt))] = 1;
}

if (count($tmp_cms) > 0) {
   $g_KnownCMS = array_keys($tmp_cms);
   $len = count($g_KnownCMS);
   for ($i = 0; $i < $len; $i++) {
      if ($g_KnownCMS[$i] == strtolower(CMS_WORDPRESS)) $g_KnownCMS[] = 'wp';
      if ($g_KnownCMS[$i] == strtolower(CMS_WEBASYST)) $g_KnownCMS[] = 'shopscript';
      if ($g_KnownCMS[$i] == strtolower(CMS_IPB)) $g_KnownCMS[] = 'ipb';
      if ($g_KnownCMS[$i] == strtolower(CMS_DLE)) $g_KnownCMS[] = 'dle';
      if ($g_KnownCMS[$i] == strtolower(CMS_INSTANTCMS)) $g_KnownCMS[] = 'instantcms';
      if ($g_KnownCMS[$i] == strtolower(CMS_SHOPSCRIPT)) $g_KnownCMS[] = 'shopscript';
      if ($g_KnownCMS[$i] == strtolower(CMS_DRUPAL)) $g_KnownCMS[] = 'drupal';
   }
}


$g_DirIgnoreList = array();
$g_IgnoreList = array();
$g_UrlIgnoreList = array();
$g_KnownList = array();

$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; $i < count($l_IgnoreListRaw); $i++) 
    {
    	$g_IgnoreList[] = explode("\t", trim($l_IgnoreListRaw[$i]));
    }
    unset($l_IgnoreListRaw);
}

if (file_exists($l_DirIgnoreFilename)) {
    $g_DirIgnoreList = file($l_DirIgnoreFilename);
	
	for ($i = 0; $i < count($g_DirIgnoreList); $i++) {
		$g_DirIgnoreList[$i] = trim($g_DirIgnoreList[$i]);
	}
}

if (file_exists($l_UrlIgnoreFilename)) {
    $g_UrlIgnoreList = file($l_UrlIgnoreFilename);
	
	for ($i = 0; $i < count($g_UrlIgnoreList); $i++) {
		$g_UrlIgnoreList[$i] = trim($g_UrlIgnoreList[$i]);
	}
}


$l_SkipMask = array(
            '/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/.+/\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/.*/\.\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/.*/%%.*\.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}',
	    '/assets/cache/docid_\d+_\w{32}\.pageCache\.php',
            '/t3-assets/dev/t3/.*-cache-\w{1,20}-.{1,150}\.php',
	    '/t3-assets/js/js-\w{1,30}\.js',
            '/temp/cache/SC/.*/\.cache\..*\.php',
            '/tmp/sess\_\w{32}$',
            '/assets/cache/docid\_.*\.pageCache\.php',
            '/stat/usage\_\w+\.html',
            '/stat/site\_\w+\.html',
            '/gallery/item/list/\w+\.cache\.php',
            '/core/cache/registry/.*/ext-.*\.php',
            '/core/cache/resource/shk\_/\w+\.cache\.php',
            '/webstat/awstats.*\.txt',
            '/awstats/awstats.*\.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/.+\.log$',
            '/hyper-cache/[^/]+/[^/]+/[^/]+/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',
);

$l_SkipSample = array();

if (SMART_SCAN) {
   $g_DirIgnoreList = array_merge($g_DirIgnoreList, $l_SkipMask);
}

QCR_Debug();

// Load custom signatures

try {
	$s_file = new SplFileObject($g_AiBolitAbsolutePath."/ai-bolit.sig");
	$s_file->setFlags(SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);
	foreach ($s_file as $line) {
		$g_FlexDBShe[] = preg_replace('~\G(?:[^#\\\\]+|\\\\.)*+\K#~', '\\#', $line); // escaping #
	}
	stdOut("Loaded " . $s_file->key() . " signatures from ai-bolit.sig");
	$s_file = null; // file handler is closed
} catch (Exception $e) { QCR_Debug( "Import ai-bolit.sig " . $e->getMessage() ); }

QCR_Debug();

	$defaults['skip_ext'] = strtolower(trim($defaults['skip_ext']));
         if ($defaults['skip_ext'] != '') {
	    $g_IgnoredExt = explode(',', $defaults['skip_ext']);
	    for ($i = 0; $i < count($g_IgnoredExt); $i++) {
                $g_IgnoredExt[$i] = trim($g_IgnoredExt[$i]);
             }

	    QCR_Debug('Skip files with extensions: ' . implode(',', $g_IgnoredExt));
	    stdOut('Skip extensions: ' . implode(',', $g_IgnoredExt));
         } 

// scan single file
if (defined('SCAN_FILE')) {
   if (file_exists(SCAN_FILE) && is_file(SCAN_FILE) && is_readable(SCAN_FILE)) {
       stdOut("Start scanning file '" . SCAN_FILE . "'.");
       QCR_ScanFile(SCAN_FILE); 
   } else { 
       stdOut("Error:" . SCAN_FILE . " either is not a file or readable");
   }
} else {
	if (isset($_GET['2check'])) {
		$options['with-2check'] = 1;
	}
   
   // scan list of files from file
   if (!(ICHECK || IMAKE) && isset($options['with-2check']) && file_exists(DOUBLECHECK_FILE)) {
      stdOut("Start scanning the list from '" . DOUBLECHECK_FILE . "'.\n");
      $lines = file(DOUBLECHECK_FILE);
      for ($i = 0, $size = count($lines); $i < $size; $i++) {
         $lines[$i] = trim($lines[$i]);
         if (empty($lines[$i])) unset($lines[$i]);
      }
      /* skip first line with <?php die("Forbidden"); ?> */
      unset($lines[0]);
      $g_FoundTotalFiles = count($lines);
      $i = 1;
      foreach ($lines as $l_FN) {
         is_dir($l_FN) && $g_TotalFolder++;
         printProgress( $i++, $l_FN);
         $BOOL_RESULT = true; // display disable
         is_file($l_FN) && QCR_ScanFile($l_FN, $i);
         $BOOL_RESULT = false; // display enable
      }

      $g_FoundTotalDirs = $g_TotalFolder;
      $g_FoundTotalFiles = $g_TotalFiles;

   } else {
      // scan whole file system
      stdOut("Start scanning '" . ROOT_PATH . "'.\n");
      
      file_exists(QUEUE_FILENAME) && unlink(QUEUE_FILENAME);
      if (ICHECK || IMAKE) {
      // INTEGRITY CHECK
        IMAKE and unlink(INTEGRITY_DB_FILE);
        ICHECK and load_integrity_db();
        QCR_IntegrityCheck(ROOT_PATH);
        stdOut("Found $g_FoundTotalFiles files in $g_FoundTotalDirs directories.");
        if (IMAKE) exit(0);
        if (ICHECK) {
            $i = $g_Counter;
            $g_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; $dr < count($g_DirIgnoreList); $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);
            }
            $g_FoundTotalFiles = count($changes['addedFiles']) + count($changes['modifiedFiles']);
            stdOut("Found changes " . count($changes['modifiedFiles']) . " files and added " . count($changes['addedFiles']) . " files.");
        }
        
      } else {
      QCR_ScanDirectories(ROOT_PATH);
      stdOut("Found $g_FoundTotalFiles files in $g_FoundTotalDirs directories.");
      }

      QCR_Debug();
      stdOut(str_repeat(' ', 160),false);
      QCR_GoScan(0);
      unlink(QUEUE_FILENAME);
      if (defined('PROGRESS_LOG_FILE') && file_exists(PROGRESS_LOG_FILE)) @unlink(PROGRESS_LOG_FILE);
   }
}

QCR_Debug();

if (true) {
   $g_HeuristicDetected = array();
   $g_Iframer = array();
   $g_Base64 = array();
}


// whitelist

$snum = 0;
$list = check_whitelist($g_Structure['crc'], $snum);

foreach (array('g_CriticalPHP', 'g_CriticalJS', 'g_Iframer', 'g_Base64', 'g_Phishing', 'g_AdwareList', 'g_Redirect') as $p) {
	if (empty($$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($$p);
	for ($i = 0; $i < $count; $i++) {
		$id = "{${$p}[$i]}";
		if (in_array($g_Structure['crc'][$id], $list)) {
			unset($GLOBALS[$p][$i]);
			unset($GLOBALS[$p_Sig][$i]);
			unset($GLOBALS[$p_Fragment][$i]);
		}
	}

	$$p = array_values($$p);
	$$p_Fragment = array_values($$p_Fragment);
	if (!empty($$p_Sig)) $$p_Sig = array_values($$p_Sig);
}


////////////////////////////////////////////////////////////////////////////
if (AI_HOSTER) {
   $g_IframerFragment = array();
   $g_Iframer = array();
   $g_Redirect = array();
   $g_Doorway = array();
   $g_EmptyLink = array();
   $g_HeuristicType = array();
   $g_HeuristicDetected = array();
   $g_WarningPHP = array();
   $g_AdwareList = array();
   $g_Phishing = array(); 
   $g_PHPCodeInside = array();
   $g_PHPCodeInsideFragment = array();
   //$g_NotRead = array();
   $g_WarningPHPFragment = array();
   $g_WarningPHPSig = array();
   $g_BigFiles = array();
   $g_RedirectPHPFragment = array();
   $g_EmptyLinkSrc = array();
   $g_Base64Fragment = array();
   $g_UnixExec = array();
   $g_PhishingSigFragment = array();
   $g_PhishingFragment = array();
   $g_PhishingSig = array();
   $g_IframerFragment = array();
   $g_CMS = array();
   $g_AdwareListFragment = array(); 
   //$g_Vulnerable = array();
}

 if (BOOL_RESULT && (!defined('NEED_REPORT'))) {
  if ((count($g_CriticalPHP) > 0) OR (count($g_CriticalJS) > 0) OR (count($g_Base64) > 0) OR  (count($g_Iframer) > 0) OR  (count($g_UnixExec) > 0))
  {
  echo "1\n";
  exit(0);
  }
 }
////////////////////////////////////////////////////////////////////////////
$l_Template = str_replace("@@SERVICE_INFO@@", htmlspecialchars("[" . $int_enc . "][" . $snum . "]"), $l_Template);

$l_Template = str_replace("@@PATH_URL@@", (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $g_AddPrefix . str_replace($g_NoPrefix, '', addSlash(ROOT_PATH))), $l_Template);

$time_taken = seconds2Human(microtime(true) - START_TIME);

$l_Template = str_replace("@@SCANNED@@", sprintf(AI_STR_013, $g_TotalFolder, $g_TotalFiles), $l_Template);

$l_ShowOffer = false;

stdOut("\nBuilding report [ mode = " . AI_EXPERT . " ]\n");

//stdOut("\nLoaded signatures: " . count($g_FlexDBShe) . " / " . count($g_JSVirSig) . "\n");

////////////////////////////////////////////////////////////////////////////
// save 
if (!(ICHECK || IMAKE))
if (isset($options['with-2check']) || isset($options['quarantine']))
if ((count($g_CriticalPHP) > 0) OR (count($g_CriticalJS) > 0) OR (count($g_Base64) > 0) OR 
   (count($g_Iframer) > 0) OR  (count($g_UnixExec))) 
{
  if (!file_exists(DOUBLECHECK_FILE)) {	  
      if ($l_FH = fopen(DOUBLECHECK_FILE, 'w')) {
         fputs($l_FH, '<?php die("Forbidden"); ?>' . "\n");

         $l_CurrPath = dirname(__FILE__);
		 
		 if (!isset($g_CriticalPHP)) { $g_CriticalPHP = array(); }
		 if (!isset($g_CriticalJS)) { $g_CriticalJS = array(); }
		 if (!isset($g_Iframer)) { $g_Iframer = array(); }
		 if (!isset($g_Base64)) { $g_Base64 = array(); }
		 if (!isset($g_Phishing)) { $g_Phishing = array(); }
		 if (!isset($g_AdwareList)) { $g_AdwareList = array(); }
		 if (!isset($g_Redirect)) { $g_Redirect = array(); }
		 
         $tmpIndex = array_merge($g_CriticalPHP, $g_CriticalJS, $g_Phishing, $g_Base64, $g_Iframer, $g_AdwareList, $g_Redirect);
         $tmpIndex = array_values(array_unique($tmpIndex));

         for ($i = 0; $i < count($tmpIndex); $i++) {
             $tmpIndex[$i] = str_replace($l_CurrPath, '.', $g_Structure['n'][$tmpIndex[$i]]);
         }

         for ($i = 0; $i < count($g_UnixExec); $i++) {
             $tmpIndex[] = str_replace($l_CurrPath, '.', $g_UnixExec[$i]);
         }

         $tmpIndex = array_values(array_unique($tmpIndex));

         for ($i = 0; $i < count($tmpIndex); $i++) {
             fputs($l_FH, $tmpIndex[$i] . "\n");
         }

         fclose($l_FH);
      } else {
         stdOut("Error! Cannot create " . DOUBLECHECK_FILE);
      }      
  } else {
      stdOut(DOUBLECHECK_FILE . ' already exists.');
      if (AI_STR_044 != '') $l_Result .= '<div class="rep">' . AI_STR_044 . '</div>';
  }
 
}

////////////////////////////////////////////////////////////////////////////

$l_Summary = '<div class="title">' . AI_STR_074 . '</div>';
$l_Summary .= '<table cellspacing=0 border=0>';

if (count($g_Redirect) > 0) {
   $l_Summary .= makeSummary(AI_STR_059, count($g_Redirect), "crit");
}

if (count($g_CriticalPHP) > 0) {
   $l_Summary .= makeSummary(AI_STR_060, count($g_CriticalPHP), "crit");
}

if (count($g_CriticalJS) > 0) {
   $l_Summary .= makeSummary(AI_STR_061, count($g_CriticalJS), "crit");
}

if (count($g_Phishing) > 0) {
   $l_Summary .= makeSummary(AI_STR_062, count($g_Phishing), "crit");
}

if (count($g_UnixExec) > 0) {
   $l_Summary .= makeSummary(AI_STR_063, count($g_UnixExec), (AI_EXPERT > 1 ? 'crit' : 'warn'));
}

if (count($g_Iframer) > 0) {
   $l_Summary .= makeSummary(AI_STR_064, count($g_Iframer), "crit");
}

if (count($g_NotRead) > 0) {
   $l_Summary .= makeSummary(AI_STR_066, count($g_NotRead), "crit");
}

if (count($g_Base64) > 0) {
   $l_Summary .= makeSummary(AI_STR_067, count($g_Base64), (AI_EXPERT > 1 ? 'crit' : 'warn'));
}

if (count($g_BigFiles) > 0) {
   $l_Summary .= makeSummary(AI_STR_065, count($g_BigFiles), "warn");
}

if (count($g_HeuristicDetected) > 0) {
   $l_Summary .= makeSummary(AI_STR_068, count($g_HeuristicDetected), "warn");
}

if (count($g_SymLinks) > 0) {
   $l_Summary .= makeSummary(AI_STR_069, count($g_SymLinks), "warn");
}

if (count($g_HiddenFiles) > 0) {
   $l_Summary .= makeSummary(AI_STR_070, count($g_HiddenFiles), "warn");
}

if (count($g_AdwareList) > 0) {
   $l_Summary .= makeSummary(AI_STR_072, count($g_AdwareList), "warn");
}

if (count($g_EmptyLink) > 0) {
   $l_Summary .= makeSummary(AI_STR_073, count($g_EmptyLink), "warn");
}

 $l_Summary .= "</table>";

$l_ArraySummary = array();
$l_ArraySummary["redirect"] = count($g_Redirect);
$l_ArraySummary["critical_php"] = count($g_CriticalPHP);
$l_ArraySummary["critical_js"] = count($g_CriticalJS);
$l_ArraySummary["phishing"] = count($g_Phishing);
$l_ArraySummary["unix_exec"] = count($g_UnixExec);
$l_ArraySummary["iframes"] = count($g_Iframer);
$l_ArraySummary["not_read"] = count($g_NotRead);
$l_ArraySummary["base64"] = count($g_Base64);
$l_ArraySummary["heuristics"] = count($g_HeuristicDetected);
$l_ArraySummary["symlinks"] = count($g_SymLinks);
$l_ArraySummary["big_files_skipped"] = count($g_BigFiles);

 if (function_exists('json_encode')) { $l_Summary .= "<!--[json]" . json_encode($l_ArraySummary) . "[/json]-->"; }

 $l_Summary .= "<div class=details style=\"margin: 20px 20px 20px 0\">" . AI_STR_080 . "</div>\n";

 $l_Template = str_replace("@@SUMMARY@@", $l_Summary, $l_Template);


 $l_Result .= AI_STR_015;
 
 $l_Template = str_replace("@@VERSION@@", AI_VERSION, $l_Template);
 
////////////////////////////////////////////////////////////////////////////



if (function_exists("gethostname") && is_callable("gethostname")) {
  $l_HostName = gethostname();
} else {
  $l_HostName = '???';
}

$l_PlainResult = "# Malware list detected by AI-Bolit (https://revisium.com/ai/) on " . date("d/m/Y H:i:s", time()) . " " . $l_HostName .  "\n\n";

$l_RawReport = array();

$l_RawReport['summary'] = array(
  'scan_path' => $defaults['path'],
  'report_time' => time(),
  'scan_time' => round(microtime(true) - START_TIME, 1),
  'total_files' => $g_FoundTotalFiles,
  'counters' => $l_ArraySummary,
  'ai_version' => AI_VERSION,
);

if (!AI_HOSTER) {
   stdOut("Building list of vulnerable scripts " . count($g_Vulnerable));

   if (count($g_Vulnerable) > 0) {
       $l_Result .= '<div class="note_vir">' . AI_STR_081 . ' (' . count($g_Vulnerable) . ')</div><div class="crit">';
    	foreach ($g_Vulnerable as $l_Item) {
   	    $l_Result .= '<li>' . makeSafeFn($g_Structure['n'][$l_Item['ndx']], true) . ' - ' . $l_Item['id'] . '</li>';
               $l_PlainResult .= '[VULNERABILITY] ' . replacePathArray($g_Structure['n'][$l_Item['ndx']]) . ' - ' . $l_Item['id'] . "\n";
    	}
   	
     $l_Result .= '</div><p>' . PHP_EOL;
     $l_PlainResult .= "\n";
   }
}


stdOut("Building list of shells " . count($g_CriticalPHP));

$l_RawReport['vulners'] = getRawJsonVuln($g_Vulnerable);

if (count($g_CriticalPHP) > 0) {
  $g_CriticalPHP = array_slice($g_CriticalPHP, 0, 15000);
  $l_RawReport['php_malware'] = getRawJson($g_CriticalPHP, $g_CriticalPHPFragment, $g_CriticalPHPSig);
  $l_Result .= '<div class="note_vir">' . AI_STR_016 . ' (' . count($g_CriticalPHP) . ')</div><div class="crit">';
  $l_Result .= printList($g_CriticalPHP, $g_CriticalPHPFragment, true, $g_CriticalPHPSig, 'table_crit');
  $l_PlainResult .= '[SERVER MALWARE]' . "\n" . printPlainList($g_CriticalPHP, $g_CriticalPHPFragment, true, $g_CriticalPHPSig, 'table_crit') . "\n";
  $l_Result .= '</div>' . PHP_EOL;

  $l_ShowOffer = true;
} else {
  $l_Result .= '<div class="ok"><b>' . AI_STR_017. '</b></div>';
}

stdOut("Building list of js " . count($g_CriticalJS));

if (count($g_CriticalJS) > 0) {
  $g_CriticalJS = array_slice($g_CriticalJS, 0, 15000);
  $l_RawReport['js_malware'] = getRawJson($g_CriticalJS, $g_CriticalJSFragment, $g_CriticalJSSig);
  $l_Result .= '<div class="note_vir">' . AI_STR_018 . ' (' . count($g_CriticalJS) . ')</div><div class="crit">';
  $l_Result .= printList($g_CriticalJS, $g_CriticalJSFragment, true, $g_CriticalJSSig, 'table_vir');
  $l_PlainResult .= '[CLIENT MALWARE / JS]'  . "\n" . printPlainList($g_CriticalJS, $g_CriticalJSFragment, true, $g_CriticalJSSig, 'table_vir') . "\n";
  $l_Result .= "</div>" . PHP_EOL;

  $l_ShowOffer = true;
}

stdOut("Building list of unread files " . count($g_NotRead));

if (count($g_NotRead) > 0) {
   $g_NotRead = array_slice($g_NotRead, 0, AIBOLIT_MAX_NUMBER);
   $l_RawReport['not_read'] = $g_NotRead;
   $l_Result .= '<div class="note_vir">' . AI_STR_030 . ' (' . count($g_NotRead) . ')</div><div class="crit">';
   $l_Result .= printList($g_NotRead);
   $l_Result .= "</div><div class=\"spacer\"></div>" . PHP_EOL;
   $l_PlainResult .= '[SCAN ERROR / SKIPPED]' . "\n" . printPlainList($g_NotRead) . "\n\n";
}

if (!AI_HOSTER) {
   stdOut("Building phishing pages " . count($g_Phishing));

   if (count($g_Phishing) > 0) {
     $l_RawReport['phishing'] = getRawJson($g_Phishing, $g_PhishingFragment, $g_PhishingSigFragment);
     $l_Result .= '<div class="note_vir">' . AI_STR_058 . ' (' . count($g_Phishing) . ')</div><div class="crit">';
     $l_Result .= printList($g_Phishing, $g_PhishingFragment, true, $g_PhishingSigFragment, 'table_vir');
     $l_PlainResult .= '[PHISHING]'  . "\n" . printPlainList($g_Phishing, $g_PhishingFragment, true, $g_PhishingSigFragment, 'table_vir') . "\n";
     $l_Result .= "</div>". PHP_EOL;

     $l_ShowOffer = true;
   }

   stdOut("Building list of iframes " . count($g_Iframer));

   if (count($g_Iframer) > 0) {
     $l_RawReport['iframer'] = getRawJson($g_Iframer, $g_IframerFragment);
     $l_ShowOffer = true;
     $l_Result .= '<div class="note_vir">' . AI_STR_021 . ' (' . count($g_Iframer) . ')</div><div class="crit">';
     $l_Result .= printList($g_Iframer, $g_IframerFragment, true);
     $l_Result .= "</div>" . PHP_EOL;
   }

   stdOut("Building list of base64s " . count($g_Base64));

   if (count($g_Base64) > 0) {
     $l_RawReport['warn_enc'] = getRawJson($g_Base64, $g_Base64Fragment);
     if (AI_EXPERT > 1) $l_ShowOffer = true;
     
     $l_Result .= '<div class="note_' . (AI_EXPERT > 1 ? 'vir' : 'warn') . '">' . AI_STR_020 . ' (' . count($g_Base64) . ')</div><div class="' . (AI_EXPERT > 1 ? 'crit' : 'warn') . '">';
     $l_Result .= printList($g_Base64, $g_Base64Fragment, true);
     $l_PlainResult .= '[ENCODED / SUSP_EXT]' . "\n" . printPlainList($g_Base64, $g_Base64Fragment, true) . "\n";
     $l_Result .= "</div>" . PHP_EOL;

   }

   stdOut("Building list of redirects " . count($g_Redirect));
   if (count($g_Redirect) > 0) {
     $l_RawReport['redirect'] = getRawJson($g_Redirect, $g_RedirectPHPFragment);
     $l_ShowOffer = true;
     $l_Result .= '<div class="note_vir">' . AI_STR_027 . ' (' . count($g_Redirect) . ')</div><div class="crit">';
     $l_Result .= printList($g_Redirect, $g_RedirectPHPFragment, true);
     $l_Result .= "</div>" . PHP_EOL;
   }

   stdOut("Building list of symlinks " . count($g_SymLinks));

   if (count($g_SymLinks) > 0) {
     $g_SymLinks = array_slice($g_SymLinks, 0, AIBOLIT_MAX_NUMBER);
     $l_RawReport['sym_links'] = $g_SymLinks;
     $l_Result .= '<div class="note_vir">' . AI_STR_022 . ' (' . count($g_SymLinks) . ')</div><div class="crit">';
     $l_Result .= nl2br(makeSafeFn(implode("\n", $g_SymLinks), true));
     $l_Result .= "</div><div class=\"spacer\"></div>";
   }

   stdOut("Building list of unix executables and odd scripts " . count($g_UnixExec));

   if (count($g_UnixExec) > 0) {
     $g_UnixExec = array_slice($g_UnixExec, 0, AIBOLIT_MAX_NUMBER);
     $l_RawReport['unix_exec'] = $g_UnixExec;
     $l_Result .= '<div class="note_' . (AI_EXPERT > 1 ? 'vir' : 'warn') . '">' . AI_STR_019 . ' (' . count($g_UnixExec) . ')</div><div class="' . (AI_EXPERT > 1 ? 'crit' : 'warn') . '">';
     $l_Result .= nl2br(makeSafeFn(implode("\n", $g_UnixExec), true));
     $l_PlainResult .= '[UNIX EXEC]' . "\n" . implode("\n", replacePathArray($g_UnixExec)) . "\n\n";
     $l_Result .= "</div>" . PHP_EOL;

     if (AI_EXPERT > 1) $l_ShowOffer = true;
   }
}

////////////////////////////////////
if (!AI_HOSTER) {
   $l_WarningsNum = count($g_HeuristicDetected) + count($g_HiddenFiles) + count($g_BigFiles) + count($g_PHPCodeInside) + count($g_AdwareList) + count($g_EmptyLink) + count($g_Doorway) + (count($g_WarningPHP[0]) + count($g_WarningPHP[1]) + count($g_SkippedFolders));

   if ($l_WarningsNum > 0) {
   	$l_Result .= "<div style=\"margin-top: 20px\" class=\"title\">" . AI_STR_026 . "</div>";
   }

   stdOut("Building list of links/adware " . count($g_AdwareList));

   if (count($g_AdwareList) > 0) {
     $l_RawReport['adware'] = getRawJson($g_AdwareList, $g_AdwareListFragment);
     $l_Result .= '<div class="note_warn">' . AI_STR_029 . '</div><div class="warn">';
     $l_Result .= printList($g_AdwareList, $g_AdwareListFragment, true);
     $l_PlainResult .= '[ADWARE]' . "\n" . printPlainList($g_AdwareList, $g_AdwareListFragment, true) . "\n";
     $l_Result .= "</div>" . PHP_EOL;

   }

   stdOut("Building list of heuristics " . count($g_HeuristicDetected));

   if (count($g_HeuristicDetected) > 0) {
     $l_RawReport['heuristic'] = $g_HeuristicDetected;
     $l_Result .= '<div class="note_warn">' . AI_STR_052 . ' (' . count($g_HeuristicDetected) . ')</div><div class="warn">';
     for ($i = 0; $i < count($g_HeuristicDetected); $i++) {
   	   $l_Result .= '<li>' . makeSafeFn($g_Structure['n'][$g_HeuristicDetected[$i]], true) . ' (' . get_descr_heur($g_HeuristicType[$i]) . ')</li>';
     }
     
     $l_Result .= '</ul></div><div class=\"spacer\"></div>' . PHP_EOL;
   }

   stdOut("Building list of hidden files " . count($g_HiddenFiles));
   if (count($g_HiddenFiles) > 0) {
     $g_HiddenFiles = array_slice($g_HiddenFiles, 0, AIBOLIT_MAX_NUMBER);
     $l_RawReport['hidden'] = $g_HiddenFiles;
     $l_Result .= '<div class="note_warn">' . AI_STR_023 . ' (' . count($g_HiddenFiles) . ')</div><div class="warn">';
     $l_Result .= nl2br(makeSafeFn(implode("\n", $g_HiddenFiles), true));
     $l_Result .= "</div><div class=\"spacer\"></div>" . PHP_EOL;
     $l_PlainResult .= '[HIDDEN]' . "\n" . implode("\n", replacePathArray($g_HiddenFiles)) . "\n\n";
   }

   stdOut("Building list of bigfiles " . count($g_BigFiles));
   $max_size_to_scan = getBytes(MAX_SIZE_TO_SCAN);
   $max_size_to_scan = $max_size_to_scan > 0 ? $max_size_to_scan : getBytes('1m');

   if (count($g_BigFiles) > 0) {
     $g_BigFiles = array_slice($g_BigFiles, 0, AIBOLIT_MAX_NUMBER);
     $l_RawReport['big_files'] = getRawJson($g_BigFiles);
     $l_Result .= "<div class=\"note_warn\">" . sprintf(AI_STR_038, bytes2Human($max_size_to_scan)) . '</div><div class="warn">';
     $l_Result .= printList($g_BigFiles);
     $l_Result .= "</div>";
     $l_PlainResult .= '[BIG FILES / SKIPPED]' . "\n" . printPlainList($g_BigFiles) . "\n\n";
   } 

   stdOut("Building list of php inj " . count($g_PHPCodeInside));

   if ((count($g_PHPCodeInside) > 0) && (($defaults['report_mask'] & REPORT_MASK_PHPSIGN) == REPORT_MASK_PHPSIGN)) {
     $l_Result .= '<div class="note_warn">' . AI_STR_028 . '</div><div class="warn">';
     $l_Result .= printList($g_PHPCodeInside, $g_PHPCodeInsideFragment, true);
     $l_Result .= "</div>" . PHP_EOL;

   }

   stdOut("Building list of empty links " . count($g_EmptyLink));
   if (count($g_EmptyLink) > 0) {
     $g_EmptyLink = array_slice($g_EmptyLink, 0, AIBOLIT_MAX_NUMBER);
     $l_Result .= '<div class="note_warn">' . AI_STR_031 . '</div><div class="warn">';
     $l_Result .= printList($g_EmptyLink, '', true);

     $l_Result .= AI_STR_032 . '<br/>';
     
     if (count($g_EmptyLink) == MAX_EXT_LINKS) {
         $l_Result .= '(' . AI_STR_033 . MAX_EXT_LINKS . ')<br/>';
       }
      
     for ($i = 0; $i < count($g_EmptyLink); $i++) {
   	$l_Idx = $g_EmptyLink[$i];
       for ($j = 0; $j < count($g_EmptyLinkSrc[$l_Idx]); $j++) {
         $l_Result .= '<span class="details">' . makeSafeFn($g_Structure['n'][$g_EmptyLink[$i]], true) . ' &rarr; ' . htmlspecialchars($g_EmptyLinkSrc[$l_Idx][$j]) . '</span><br/>';
   	}
     }

     $l_Result .= "</div>";

   }

   stdOut("Building list of doorways " . count($g_Doorway));

   if ((count($g_Doorway) > 0) && (($defaults['report_mask'] & REPORT_MASK_DOORWAYS) == REPORT_MASK_DOORWAYS)) {
     $g_Doorway = array_slice($g_Doorway, 0, AIBOLIT_MAX_NUMBER);
     $l_RawReport['doorway'] = getRawJson($g_Doorway);
     $l_Result .= '<div class="note_warn">' . AI_STR_034 . '</div><div class="warn">';
     $l_Result .= printList($g_Doorway);
     $l_Result .= "</div>" . PHP_EOL;

   }

   stdOut("Building list of php warnings " . (count($g_WarningPHP[0]) + count($g_WarningPHP[1])));

   if (($defaults['report_mask'] & REPORT_MASK_SUSP) == REPORT_MASK_SUSP) {
      if ((count($g_WarningPHP[0]) + count($g_WarningPHP[1])) > 0) {
        $g_WarningPHP[0] = array_slice($g_WarningPHP[0], 0, AIBOLIT_MAX_NUMBER);
        $g_WarningPHP[1] = array_slice($g_WarningPHP[1], 0, AIBOLIT_MAX_NUMBER);
        $l_Result .= '<div class="note_warn">' . AI_STR_035 . '</div><div class="warn">';

        for ($i = 0; $i < count($g_WarningPHP); $i++) {
            if (count($g_WarningPHP[$i]) > 0) 
               $l_Result .= printList($g_WarningPHP[$i], $g_WarningPHPFragment[$i], true, $g_WarningPHPSig, 'table_warn' . $i);
        }                                                                                                                    
        $l_Result .= "</div>" . PHP_EOL;

      } 
   }

   stdOut("Building list of skipped dirs " . count($g_SkippedFolders));
   if (count($g_SkippedFolders) > 0) {
        $l_Result .= '<div class="note_warn">' . AI_STR_036 . '</div><div class="warn">';
        $l_Result .= nl2br(makeSafeFn(implode("\n", $g_SkippedFolders), true));   
        $l_Result .= "</div>" . PHP_EOL;
    }

    if (count($g_CMS) > 0) {
         $l_RawReport['cms'] = $g_CMS;
         $l_Result .= "<div class=\"note_warn\">" . AI_STR_037 . "<br/>";
         $l_Result .= nl2br(makeSafeFn(implode("\n", $g_CMS)));
         $l_Result .= "</div>";
    }
}

if (ICHECK) {
	$l_Result .= "<div style=\"margin-top: 20px\" class=\"title\">" . AI_STR_087 . "</div>";
	
    stdOut("Building list of added files " . count($changes['addedFiles']));
    if (count($changes['addedFiles']) > 0) {
      $l_Result .= '<div class="note_int">' . AI_STR_082 . ' (' . count($changes['addedFiles']) . ')</div><div class="intitem">';
      $l_Result .= printList($changes['addedFiles']);
      $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">' . AI_STR_083 . ' (' . count($changes['modifiedFiles']) . ')</div><div class="intitem">';
      $l_Result .= printList($changes['modifiedFiles']);
      $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">' . AI_STR_084 . ' (' . count($changes['deletedFiles']) . ')</div><div class="intitem">';
      $l_Result .= printList($changes['deletedFiles']);
      $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">' . AI_STR_085 . ' (' . count($changes['addedDirs']) . ')</div><div class="intitem">';
      $l_Result .= printList($changes['addedDirs']);
      $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">' . AI_STR_086 . ' (' . count($changes['deletedDirs']) . ')</div><div class="intitem">';
      $l_Result .= printList($changes['deletedDirs']);
      $l_Result .= "</div>" . PHP_EOL;
    }
}

if (!isCli()) {
   $l_Result .= QCR_ExtractInfo($l_PhpInfoBody[1]);
}


if (function_exists('memory_get_peak_usage')) {
  $l_Template = str_replace("@@MEMORY@@", AI_STR_043 . bytes2Human(memory_get_peak_usage()), $l_Template);
}

$l_Template = str_replace('@@WARN_QUICK@@', ((SCAN_ALL_FILES || $g_SpecificExt) ? '' : AI_STR_045), $l_Template);

if ($l_ShowOffer) {
	$l_Template = str_replace('@@OFFER@@', $l_Offer, $l_Template);
} else {
	$l_Template = str_replace('@@OFFER@@', AI_STR_002, $l_Template);
}

$l_Template = str_replace('@@OFFER2@@', $l_Offer2, $l_Template);

$l_Template = str_replace('@@CAUTION@@', AI_STR_003, $l_Template);

$l_Template = str_replace('@@CREDITS@@', AI_STR_075, $l_Template);

$l_Template = str_replace('@@FOOTER@@', AI_STR_076, $l_Template);

$l_Template = str_replace('@@STAT@@', sprintf(AI_STR_012, $time_taken, date('d-m-Y в H:i:s', floor(START_TIME)) , date('d-m-Y в H:i:s')), $l_Template);

////////////////////////////////////////////////////////////////////////////
$l_Template = str_replace("@@MAIN_CONTENT@@", $l_Result, $l_Template);

if (!isCli())
{
    echo $l_Template;
    exit;
}

if (!defined('REPORT') OR REPORT === '')
{
	die2('Report not written.');
}
 
// write plain text result
if (PLAIN_FILE != '') {
	
    $l_PlainResult = preg_replace('|__AI_LINE1__|smi', '[', $l_PlainResult);
    $l_PlainResult = preg_replace('|__AI_LINE2__|smi', '] ', $l_PlainResult);
    $l_PlainResult = preg_replace('|__AI_MARKER__|smi', ' %> ', $l_PlainResult);

   if ($l_FH = fopen(PLAIN_FILE, "w")) {
      fputs($l_FH, $l_PlainResult);
      fclose($l_FH);
   }
}

// write json result
if (defined('JSON_FILE')) {	
   if ($l_FH = fopen(JSON_FILE, "w")) {
      fputs($l_FH, json_encode($l_RawReport));
      fclose($l_FH);
   }
}

// write serialized result
if (defined('PHP_FILE')) {	
   if ($l_FH = fopen(PHP_FILE, "w")) {
      fputs($l_FH, serialize($l_RawReport));
      fclose($l_FH);
   }
}

$emails = getEmails(REPORT);

if (!$emails) {
	if ($l_FH = fopen($file, "w")) {
	   fputs($l_FH, $l_Template);
	   fclose($l_FH);
	   stdOut("\nReport written to '$file'.");
	} else {
		stdOut("\nCannot create '$file'.");
	}
}	else	{
		$headers = array(
			'MIME-Version: 1.0',
			'Content-type: text/html; charset=UTF-8',
			'From: ' . ($defaults['email_from'] ? $defaults['email_from'] : 'AI-Bolit@myhost')
		);

		for ($i = 0, $size = sizeof($emails); $i < $size; $i++)
		{
			mail($emails[$i], 'AI-Bolit Report ' . date("d/m/Y H:i", time()), $l_Result, implode("\r\n", $headers));
		}

		stdOut("\nReport sended to " . implode(', ', $emails));
}


$time_taken = microtime(true) - START_TIME;
$time_taken = number_format($time_taken, 5);


stdOut("Scanning complete! Time taken: " . seconds2Human($time_taken));

if (DEBUG_PERFORMANCE) {
   $keys = array_keys($g_RegExpStat);
   for ($i = 0; $i < count($keys); $i++) {
       $g_RegExpStat[$keys[$i]] = round($g_RegExpStat[$keys[$i]] * 1000000);
   }

   arsort($g_RegExpStat);

   foreach ($g_RegExpStat as $r => $v) {
      echo $v . "\t\t" . $r . "\n";
   }

   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']);
}

QCR_Debug();

# exit with code

$l_EC1 = count($g_CriticalPHP);
$l_EC2 = count($g_CriticalJS) + count($g_Phishing) + count($g_WarningPHP[0]) + count($g_WarningPHP[1]);
$code = 0;

if ($l_EC1 > 0) {
	$code = 2;
} else {
	if ($l_EC2 > 0) {
		$code = 1;
	}
}

$stat = array('php_malware' => count($g_CriticalPHP), 'js_malware' => count($g_CriticalJS), 'phishing' => count($g_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 ? 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; $i < count($inf[$k]); ++$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; $i < count($files); ++$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)
{
	global $g_Structure, $g_Counter, $g_Doorway, $g_FoundTotalFiles, $g_FoundTotalDirs, 
			$defaults, $g_SkippedFolders, $g_UrlIgnoreList, $g_DirIgnoreList, $g_UnsafeDirArray, 
                        $g_UnsafeFilesFound, $g_SymLinks, $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 = $g_Counter - 1;
	
	QCR_Debug('Check ' . $l_RootDir);

 	if ($l_DIRH = @opendir($l_RootDir))
	{
		while (($l_FileName = readdir($l_DIRH)) !== false)
		{
			if ($l_FileName == '.' || $l_FileName == '..') continue;

			$l_FileName = $l_RootDir . DIR_SEPARATOR . $l_FileName;

			$l_Type = filetype($l_FileName);
			$l_IsDir = ($l_Type == "dir");
            if ($l_Type == "link") 
            {
				$g_SymLinks[] = $l_FileName;
                continue;
            } else 
			if ($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; $dr < count($g_DirIgnoreList); $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) {
				   $g_SkippedFolders[] = $l_FileName;
				   continue;
				}
				
				$l_BaseName = basename($l_FileName);

				$l_DirCounter++;

				$g_Counter++;
				$g_FoundTotalDirs++;

				QCR_IntegrityCheck($l_FileName);

			} else
			{
				if ($l_NeedToScan)
				{
					$g_FoundTotalFiles++;
					$g_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) or die2("Cannot write to file " . QUEUE_FILENAME);
				$l_Buffer = '';
			}

		}

		closedir($l_DIRH);
	}
	
	if (($l_RootDir == ROOT_PATH) && !empty($l_Buffer)) {
		file_put_contents(QUEUE_FILENAME, $l_Buffer, FILE_APPEND) or die2("Cannot write to file " . QUEUE_FILENAME);
		$l_Buffer = '';
	}

	if (($l_RootDir == ROOT_PATH)) {
		write_integrity_db_file();
	}

}


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 = array( '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) or file_put_contents('compress.zlib://' . INTEGRITY_DB_FILE, $l_Buffer, FILE_APPEND) or 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) or die2("Cannot write to file " . INTEGRITY_DB_FILE);
		$l_Buffer = '';
	}
}

function load_integrity_db() {
	global $g_IntegrityDB;
	file_exists(INTEGRITY_DB_FILE) or 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 OptimizeSignatures()
{
	global $g_DBShe, $g_FlexDBShe, $gX_FlexDBShe, $gXX_FlexDBShe;
	global $g_JSVirSig, $gX_JSVirSig;
	global $g_AdwareSig;
	global $g_PhishingSig;
	global $g_ExceptFlex, $g_SusDBPrio, $g_SusDB;

	(AI_EXPERT == 2) && ($g_FlexDBShe = array_merge($g_FlexDBShe, $gX_FlexDBShe, $gXX_FlexDBShe));
	(AI_EXPERT == 1) && ($g_FlexDBShe = array_merge($g_FlexDBShe, $gX_FlexDBShe));
	$gX_FlexDBShe = $gXX_FlexDBShe = array();

	(AI_EXPERT == 2) && ($g_JSVirSig = array_merge($g_JSVirSig, $gX_JSVirSig));
	$gX_JSVirSig = array();

	$count = count($g_FlexDBShe);

	for ($i = 0; $i < $count; $i++) {
		if ($g_FlexDBShe[$i] == '[a-zA-Z0-9_]+?\(\s*[a-zA-Z0-9_]+?=\s*\)') $g_FlexDBShe[$i] = '\((?<=[a-zA-Z0-9_].)\s*[a-zA-Z0-9_]++=\s*\)';
		if ($g_FlexDBShe[$i] == '([^\?\s])\({0,1}\.[\+\*]\){0,1}\2[a-z]*e') $g_FlexDBShe[$i] = '(?J)\.[+*](?<=(?<d>[^\?\s])\(..|(?<d>[^\?\s])..)\)?\g{d}[a-z]*e';
		if ($g_FlexDBShe[$i] == '$[a-zA-Z0-9_]\{\d+\}\s*\.$[a-zA-Z0-9_]\{\d+\}\s*\.$[a-zA-Z0-9_]\{\d+\}\s*\.') $g_FlexDBShe[$i] = '\$[a-zA-Z0-9_]\{\d+\}\s*\.\$[a-zA-Z0-9_]\{\d+\}\s*\.\$[a-zA-Z0-9_]\{\d+\}\s*\.';

		$g_FlexDBShe[$i] = str_replace('http://.+?/.+?\.php\?a', 'http://[^?\s]++(?<=\.php)\?a', $g_FlexDBShe[$i]);
		$g_FlexDBShe[$i] = preg_replace('~\[a-zA-Z0-9_\]\+\K\?~', '+', $g_FlexDBShe[$i]);
		$g_FlexDBShe[$i] = preg_replace('~^\\\\[d]\+&@~', '&@(?<=\d..)', $g_FlexDBShe[$i]);
		$g_FlexDBShe[$i] = str_replace('\s*[\'"]{0,1}.+?[\'"]{0,1}\s*', '.+?', $g_FlexDBShe[$i]);
		$g_FlexDBShe[$i] = str_replace('[\'"]{0,1}.+?[\'"]{0,1}', '.+?', $g_FlexDBShe[$i]);

		$g_FlexDBShe[$i] = preg_replace('~^\[\'"\]\{0,1\}\.?|^@\*|^\\\\s\*~', '', $g_FlexDBShe[$i]);
		$g_FlexDBShe[$i] = preg_replace('~^\[\'"\]\{0,1\}\.?|^@\*|^\\\\s\*~', '', $g_FlexDBShe[$i]);
	}

	optSig($g_FlexDBShe);

	optSig($g_JSVirSig);
	optSig($g_AdwareSig);
	optSig($g_PhishingSig);
        optSig($g_SusDB);
        //optSig($g_SusDBPrio);
        //optSig($g_ExceptFlex);

        // convert exception rules
        $cnt = count($g_ExceptFlex);
        for ($i = 0; $i < $cnt; $i++) {                		
            $g_ExceptFlex[$i] = trim(UnwrapObfu($g_ExceptFlex[$i]));
            if (!strlen($g_ExceptFlex[$i])) unset($g_ExceptFlex[$i]);
        }

        $g_ExceptFlex = array_values($g_ExceptFlex);
}

function optSig(&$sigs)
{
	$sigs = array_unique($sigs);

	// Add SigId
	foreach ($sigs as &$s) {
		$s .= '(?<X' . 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);

	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', 'optMergePrefixes', $txt);
	}

	$sigs = array_merge(explode("\n", $txt), $tmp);
	
	optSigCheck($sigs);
}

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);
}

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
 */
function optSigCheck(&$sigs)
{
	$result = true;

	foreach ($sigs as $k => $sig) {
                if (trim($sig) == "") {
                   if (DEBUG_MODE) {
                      echo("************>>>>> EMPTY\n     pattern: " . $sig . "\n");
                   }
	           unset($sigs[$k]);
		   $result = false;
                }

		if (@preg_match('#' . $sig . '#smiS', '') === false) {
			$error = error_get_last();
                        if (DEBUG_MODE) {
			   echo("************>>>>> " . $error['message'] . "\n     pattern: " . $sig . "\n");
                        }
			unset($sigs[$k]);
			$result = false;
		}
	}
	
	return $result;
}

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));
}

function check_whitelist($list, &$snum) 
{
	if (empty($list)) return array();
	
	$file = dirname(__FILE__) . '/AIBOLIT-WHITELIST.db';

	$snum = max(0, @filesize($file) - 1024) / 20;
	stdOut("\nLoaded " . ceil($snum) . " known files\n");
	
	sort($list);

	$hash = reset($list);
	
	$fp = @fopen($file, 'rb');
	
	if (false === $fp) return array();
	
	$header = unpack('V256', fread($fp, 1024));
	
	$result = array();
	
	foreach ($header as $chunk_id => $chunk_size) {
		if ($chunk_size > 0) {
			$str = fread($fp, $chunk_size);
			
			do {
				$raw = pack("H*", $hash);
				$id = ord($raw[0]) + 1;
				
				if ($chunk_id == $id AND binarySearch($str, $raw)) {
					$result[] = $hash;
				}
				
			} while ($chunk_id >= $id AND $hash = next($list));
			
			if ($hash === false) break;
		}
	}
	
	fclose($fp);

	return $result;
}


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;
	}
}

function getSigId($l_Found)
{
	foreach ($l_Found as $key => &$v) {
		if (is_string($key) AND $v[1] != -1 AND strlen($key) == 9) {
			return substr($key, 1);
		}
	}
	
	return null;
}

function die2($str) {
  if (function_exists('aibolit_onFatalError')) { aibolit_onFatalError($str); }
  die($str);
}

function checkFalsePositives($l_Filename, $l_Unwrapped, $l_DeobfType) {
  global $g_DeMapper;

  if ($l_DeobfType != '') {
     if (DEBUG_MODE) {
       stdOut("\n-----------------------------------------------------------------------------\n");
       stdOut("[DEBUG]" . $l_Filename . "\n");
       var_dump(getFragment($l_Unwrapped, $l_Pos));
       stdOut("\n...... $l_DeobfType ...........\n");
       var_dump($l_Unwrapped);
       stdOut("\n");
     }

     switch ($l_DeobfType) {
        case '_GLOBALS_': 
           foreach ($g_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;
  }
}

function deobfuscate_bitrix($str)
{
	global $varname,$funclist,$strlist;
	$res = $str;
	$funclist = array();
	$strlist = array();
	$res = preg_replace("|'\s*\.\s*'|smi", '', $res);
	$res = preg_replace_callback(
		'|(round\((.+?)\))|smi',
		function ($matches) {
		   return round($matches[2]);
		},
		$res
	);
	$res = preg_replace_callback(
			'|base64_decode\(\'(.*?)\'\)|smi',
			function ($matches) {
				return "'" . base64_decode($matches[1]) . "'";
			},
			$res
	);

	$res = preg_replace_callback(
			'|\'(.*?)\'|sm',
			function ($matches) {
				$temp = base64_decode($matches[1]);
				if (base64_encode($temp) === $matches[1] && preg_match('#^[ -~]*$#', $temp)) { 
				   return "'" . $temp . "'";
				} else {
				   return "'" . $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) {
   				   global $varname, $funclist;
   				   return $funclist[$varname][$matches[1]];
   				},
   				$res
   		);
   		
     	        $res = preg_replace('~' . quotemeta(str_replace('~', '.', $found[0])) . '~smi', '', $res);
   	}
        }
		

	if (preg_match_all('|function _+(\d+)\(\$i\){\$a=Array\((.+?)\);[^}]+}|smi', $res, $founds, PREG_SET_ORDER)) {
	foreach($founds as $found)
	{
		$strlist = explode(',', $found[2]);

		$res = preg_replace_callback(
				'|_' . $found[1] . '\((\d+)\)|smi',
				function ($matches) {
				   global $strlist;
				   return $strlist[$matches[1]];
				},
				$res
		);

  	        $res = preg_replace('~' . quotemeta(str_replace('~', '\\~', $found[0])) . '~smi', '', $res);
	}
        }

  	$res = preg_replace('~<\?(php)?\s*\?>~smi', '', $res);

	preg_match_all('~function (_+(.+?))\(\$[_0-9]+\)\{\s*static\s*\$([_0-9]+)\s*=\s*(true|false);.*?\$\3=array\((.*?)\);\s*return\s*base64_decode\(\$\3~smi', $res, $founds,PREG_SET_ORDER);
	foreach($founds as $found)
	{
		$strlist = explode("',",$found[5]);
		$res = preg_replace_callback(
				'|' . $found[1] . '\((\d+)\)|sm',
				function ($matches) {
				   global $strlist;
				   return $strlist[$matches[1]]."'";
				},
				$res
		);
				
	}

	$res = preg_replace('|;|sm', ";\n", $res);

	return $res;
}

function my_eval($matches)
{
    $string = $matches[0];
    $string = substr($string, 5, strlen($string) - 7);
    return decode($string);
}

function decode($string, $level = 0)
{
    if (trim($string) == '') return '';
    if ($level > 100) return '';

    if (($string[0] == '\'') || ($string[0] == '"')) {
        return substr($string, 1, strlen($string) - 2); //
	} elseif ($string[0] == '$') {
        return $string; //
    } else {
        $pos      = strpos($string, '(');
        $function = substr($string, 0, $pos);
		
        $arg      = decode(substr($string, $pos + 1), $level + 1);
    	if ($function == 'base64_decode') return @base64_decode($arg);
    	else if ($function == 'gzinflate') return @gzinflate($arg);
		else if ($function == 'gzuncompress') return @gzuncompress($arg);
    	else if ($function == 'strrev')  return @strrev($arg);
    	else if ($function == 'str_rot13')  return @str_rot13($arg);
    	else return $arg;
    }    
}
    
function deobfuscate_eval($str)
{
    $res = preg_replace_callback('~eval\((base64_decode|gzinflate|strrev|str_rot13|gzuncompress).*?\);~ms', "my_eval", $str);
    return $res;
}

function getEvalCode($string)
{
    preg_match("/eval\((.*?)\);/", $string, $matches);
    return (empty($matches)) ? '' : end($matches);
}
function getTextInsideQuotes($string)
{
    preg_match('/("(.*?)")/', $string, $matches);
    return (empty($matches)) ? '' : end($matches);
}

function deobfuscate_lockit($str)
{    
    $obfPHP        = $str;
    $phpcode       = base64_decode(getTextInsideQuotes(getEvalCode($obfPHP)));
    $hexvalues     = getHexValues($phpcode);
    $tmp_point     = getHexValues($obfPHP);
    $pointer1      = hexdec($tmp_point[0]);
    $pointer2      = hexdec($hexvalues[0]);
    $pointer3      = hexdec($hexvalues[1]);
    $needles       = getNeedles($phpcode);
    $needle        = $needles[count($needles) - 2];
    $before_needle = end($needles);
    
    
    $phpcode = base64_decode(strtr(substr($obfPHP, $pointer2 + $pointer3, $pointer1), $needle, $before_needle));
    return "<?php {$phpcode} ?>";
}


    function getNeedles($string)
    {
        preg_match_all("/'(.*?)'/", $string, $matches);
        
        return (empty($matches)) ? array() : $matches[1];
    }
    function getHexValues($string)
    {
        preg_match_all('/0x[a-fA-F0-9]{1,8}/', $string, $matches);
        return (empty($matches)) ? array() : $matches[0];
    }

function deobfuscate_als($str)
{
	preg_match('~__FILE__;\$[O0]+=[0-9a-fx]+;eval\(\$[O0]+\(\'([^\']+)\'\)\);return;~msi',$str,$layer1);

	preg_match('~\$[O0]+=(\$[O0]+\()+\$[O0]+,[0-9a-fx]+\),\'([^\']+)\',\'([^\']+)\'\)\);eval\(~msi',base64_decode($layer1[1]),$layer2);
    $res = explode("?>", $str);
	if (strlen($res[1])>0)
	{
		$res = substr($res[1], 380);
		$res = base64_decode(strtr($res, $layer2[2], $layer2[3]));
	}
    return "<?php {$res} ?>";
}

function deobfuscate_byterun($str)
{
	preg_match('~\$_F=__FILE__;\$_X=\'([^\']+)\';eval\(~ms',$str,$matches);
	$res = base64_decode($matches[1]);
	$res = strtr($res,'123456aouie','aouie123456');
    return "<?php {$res} ?>";
}

function deobfuscate_urldecode($str)
{
	preg_match('~(\$[O0_]+)=urldecode\("([%0-9a-f]+)"\);((\$[O0_]+=(\1\{\d+\}\.?)+;)+)~msi',$str,$matches);
	$alph = urldecode($matches[2]);
	$funcs=$matches[3];
	for($i = 0; $i < strlen($alph); $i++)
	{
		$funcs = str_replace($matches[1].'{'.$i.'}.',$alph[$i],$funcs);
		$funcs = str_replace($matches[1].'{'.$i.'}',$alph[$i],$funcs);
	}

	$str = str_replace($matches[3], $funcs, $str);
	$funcs = explode(';', $funcs);
	foreach($funcs as $func)
	{
		$func_arr = explode("=", $func);
		if (count($func_arr) == 2)
		{
			$func_arr[0] = str_replace('$', '', $func_arr[0]);
			$str = str_replace('${"GLOBALS"}["' . $func_arr[0] . '"]', $func_arr[1], $str);
		}			
	}

	return $str;
}


function formatPHP($string)
{
    $string = str_replace('<?php', '', $string);
    $string = str_replace('?>', '', $string);
    $string = str_replace(PHP_EOL, "", $string);
    $string = str_replace(";", ";\n", $string);
    return $string;
}

function deobfuscate_fopo($str)
{
    $phpcode = formatPHP($str);
    $phpcode = base64_decode(getTextInsideQuotes(getEvalCode($phpcode)));
    @$phpcode = gzinflate(base64_decode(str_rot13(getTextInsideQuotes(end(explode(':', $phpcode))))));
    $old = '';
    while (($old != $phpcode) && (strlen(strstr($phpcode, '@eval($')) > 0)) {
        $old = $phpcode;
        $funcs = explode(';', $phpcode);
		if (count($funcs) == 5) $phpcode = gzinflate(base64_decode(str_rot13(getTextInsideQuotes(getEvalCode($phpcode)))));
		else if (count($funcs) == 4) $phpcode = gzinflate(base64_decode(getTextInsideQuotes(getEvalCode($phpcode))));
    }
    
    return substr($phpcode, 2);
}

function getObfuscateType($str)
{
if (preg_match('~eval\((base64_decode|gzinflate|strrev|str_rot13|gzuncompress)~ms', $str))
        return "eval";
    if (preg_match('~\$GLOBALS\[\'_+\d+\'\]=\s*array\(base64_decode\(~msi', $str))
        return "_GLOBALS_";
    if (preg_match('~function _+\d+\(\$i\){\$a=Array~msi', $str))
        return "_GLOBALS_";
    if (preg_match('~__FILE__;\$[O0]+=[0-9a-fx]+;eval\(\$[O0]+\(\'([^\']+)\'\)\);return;~msi', $str))
        return "ALS-Fullsite";
    if (preg_match('~\$[O0]*=urldecode\(\'%66%67%36%73%62%65%68%70%72%61%34%63%6f%5f%74%6e%64\'\);\s*\$GLOBALS\[\'[O0]*\'\]=\$[O0]*~msi', $str))
        return "LockIt!";
    if (preg_match('~\$\w+="(\\\x?[0-9a-f]+){13}";@eval\(\$\w+\(~msi', $str))
        return "FOPO";
	if (preg_match('~\$_F=__FILE__;\$_X=\'([^\']+\');eval\(~ms', $str))
        return "ByteRun";
    if (preg_match('~(\$[O0_]+)=urldecode\("([%0-9a-f]+)"\);((\$[O0_]+=(\1\{\d+\}\.?)+;)+)~msi', $str))
        return "urldecode_globals";
	
}

function deobfuscate($str)
{
    switch (getObfuscateType($str)) {
        case '_GLOBALS_':
            $str = deobfuscate_bitrix($str);
            break;
        case 'eval':
            $str = deobfuscate_eval($str);
            break;
        case 'ALS-Fullsite':
            $str = deobfuscate_als($str);
            break;
        case 'LockIt!':
            $str = deobfuscate_lockit($str);
            break;
        case 'FOPO':
            $str = deobfuscate_fopo($str);
            break;
	case 'ByteRun':
            $str = deobfuscate_byterun($str);
            break;
	case 'urldecode_globals' :
            $str = deobfuscate_urldecode($str);
	    break;
    }
    
    return $str;
}

Zerion Mini Shell 1.0