document.location="?action=updated";'; } } else ShowMsg('Не удалось проверить обновления','red'); } elseif ($_REQUEST['action'] == 'updated') ShowMsg('Успешно загружена последняя версия скрипта'); if ($file = $_REQUEST['file']) { $str = file_get_contents(LOG); if (strpos($str,$file) === false) ShowMsg('Файл не найден в списке троянов: '.htmlspecialchars($file), 'red'); elseif (file_exists($f = START_PATH.$file)) { if ($_REQUEST['action'] == 'prison') { $new_f = preg_replace('#\.php$#', '.ph_', $f); if (rename($f, $new_f)) ShowMsg('Файл переименован: '.htmlspecialchars($new_f)); else ShowMsg('Ошибка переименования: '.htmlspecialchars($f), 'red'); } else { $str = file_get_contents($f); highlight_string("Содержимое файла ".$f."\n\n".$str); die(); } } else ShowMsg('Файл не найден: '.htmlspecialchars($f), 'red'); } ?>Поиск троянов
Идёт поиск...
Текущий файл:

Поиск троянов

Версия

Проверить обновления Удалить себя и результат поиска
filelist.txt'; $ar = file(LOG); foreach($ar as $line) { list($f, $type) = explode("\t", $line); { $fu = urlencode(trim($f)); $bInPrison = trim($type) != 'htaccess'; echo ''; } } echo '
'.htmlspecialchars($f).''.htmlspecialchars($type).''.($bInPrison ? 'карантин' : '').'
'; } function Search($path) { if (time() - START_TIME > 10) { if (!defined('BREAK_POINT')) define('BREAK_POINT', $path); return; } if (defined('SKIP_PATH') && !defined('FOUND')) // проверим, годится ли текущий путь { if (0 !== bin_strpos(SKIP_PATH, dirname($path))) // отбрасываем имя или идём ниже return; if (SKIP_PATH==$path) // путь найден, продолжаем искать текст define('FOUND',true); } if (is_dir($path)) // dir { $dir = opendir($path); while($item = readdir($dir)) { if ($item == '.' || $item == '..') continue; Search($path.'/'.$item); } closedir($dir); } else // file { if (!defined('SKIP_PATH') || defined('FOUND')) if ($res = CheckFile($path)) Mark($path, $res); } } function CheckFile($f) { $s = "[ \r\t\n]*"; if ($f == __FILE__) return false; if (basename($f) == '.htaccess') { $str = file_get_contents($f); return preg_match('#<(\?|script)#i',$str) ? 'htaccess' : false; } if (!preg_match('#\.php$#',$f)) return false; $str = file_get_contents($f); if (preg_match('#[^a-z](eval|assert|call_user_func|call_user_func_Array|create_function|ob_start)'.$s.'\([^\)]*\$_(POST|GET|REQUEST|COOKIE|SERVER)#i', $str)) { if (!LooksLike($f, '/bitrix/modules/main/admin/php_command_line.php')) return 'eval'; } if (preg_match('#\$(USER|GLOBALS..USER..)->Authorize'.$s.'\([0-9]+\)#i', $str)) { if (!LooksLike($f, array('/bitrix/modules/main/install/install.php','/bitrix/activities/bitrix/controllerremoteiblockactivity/controllerremoteiblockactivity.php','/bitrix/modules/controller/install/activities/bitrix/controllerremoteiblockactivity/controllerremoteiblockactivity.php'))) return 'bitrix auth'; } if (preg_match('#[\'"]php://filter#i', $str)) return 'php wrapper'; if (preg_match('#(include|require)(_once)?'.$s.'\([^\)]+\.([a-z0-9]+).'.$s.'\)#i', $str, $regs)) if ($regs[3] != 'php') return 'strange include'; if (preg_match('#\$__+[^a-z_]#i', $str)) return 'strange vars'; if (preg_match('#\$['."_\x80-\xff".']+'.$s.'=#i', $str)) return 'binary vars'; // if (preg_match('#Zend Optimizer not installed#i',$str)) // return false; if (preg_match('#[a-z0-9+=/]{255,}#i', $str)) return 'long line'; if (preg_match("#[\x01-\x08\x0b\x0c\x0f-\x1f]#", $str)) return 'binary data'; return false; } function LooksLike($f, $mask) { $f = str_replace('\\','/',$f); if (is_array($mask)) { foreach($mask as $m) { if (preg_match('#'.$m.'$#',$f)) return true; } } return preg_match('#'.$mask.'$#',$f); } function bin_strpos($s, $a) { if (function_exists('mb_orig_strpos')) return mb_orig_strpos($s, $a); return strpos($s, $a); } function Mark($f, $type) { file_put_contents(LOG, str_replace(START_PATH,'',$f)."\t".$type."\n", 8); } function ShowMsg($str, $color = 'green') { echo '
'.$str.'
'; } ?>