define('DisableReplace',true);
if ($_REQUEST['code'])
{
define('START_TIME', time()); // засекаем время старта
define('CODE', str_replace("\r\n","\n",$_REQUEST['code'])); // строка поиска
define('START_PATH', dirname(__FILE__)); // стартовая папка для поиска
define('LOG',START_PATH.'/filelist.txt'); // файл с результатами
if ($_REQUEST['break_point'])
define('SKIP_PATH',$_REQUEST['break_point']); // промежуточный путь
else
@unlink(LOG); // первый раз, удалим файл со старыми результатами
Search(START_PATH);
if (defined('BREAK_POINT'))
{
?>
Идёт поиск...
Текущий файл: =htmlspecialchars(BREAK_POINT)?>
// таймаут чтобы браузер показал текст
die();
}
$iframe = "";
}
else
$iframe = '';
?>
Поиск заражённых файлов php
Пример скрипта, описанного в блоге: https://dev.1c-bitrix.ru/community/blogs/howto/1051.php
Папка для поиска: =dirname(__FILE__)?>
Введите искомый текст (текст вируса):
if (file_exists(LOG))
echo $iframe;
function Search($path)
{
if (time() - START_TIME > 10)
{
if (!defined('BREAK_POINT'))
define('BREAK_POINT', $path);
return;
}
if (defined('SKIP_PATH') && !defined('FOUND')) // проверим, годится ли текущий путь
{
# /bitrix/components/bitrix/forum/message
# /bitrix/components/alpha - годится
# /bitrix/components/alpha/beta - не годится
if (0!==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 (substr($path,-4) == '.php')
{
$str = file_get_contents($path);
$str = str_replace("\r\n","\n",$str);
if (false !== strpos($str,CODE))
Mark($path, $str);
}
elseif ($_REQUEST['restore'] && substr($path, -9) == '.php.orig')
rename($path,substr($path,-5)); // отрезаем 5 символов справа: .orig
}
}
}
function Mark($file, $str)
{
static $res;
if (!$res)
$res = fopen(LOG,'ab');
if (!$res)
die('no permissions: '.LOG);
if ($_REQUEST['cure'])
{
if (!copy($file,$file.'.orig'))
die('no permissions: '.$file);
$f = fopen($file,'wb');
if (!$f)
die('no permissions: '.$file);
fwrite($f, str_replace(CODE,'',$str));
fclose($f);
}
fwrite($res,substr($file,strlen(START_PATH))."\n");
}
?>