Скрипт для удаления вирусов в JS скриптах

Тема в разделе "PHP", создана пользователем zilon, 7 июн 2012.

Статус темы:
Закрыта.
Модераторы: latteo
  1. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    у меня один и тот же вирь прописали во все джава скрипты, я нашёл скрипт написаный на пехе, который находит все инфицированные js файлы, удаляет вирусы и сохраняет файлы без вирусов, скрипт для удаления вирусов тут https://gist.github.com/2359497 я его залил в папку с вирусами права поставил три топора и открыл через браузер, он всё сделал, но то самый вирус который мои файлы заразил он не удалил.

    Мне подсказали, что нужно базу сигнатур дополнить, а как её дополнить не сказали, может вы подскажите? А вирус который прописывается во все js файлы, я сохранил в txt файлик и залил на http://zalil.ru/33334909 у меня 10 сайтов попали под раздачу а в каждом больше 3000 файлов :eek:

    помогите пжалуста:thenks:
     
  2. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    смените пароль доступа на ftp, а также, после чистки, смените права доступа к js фалам (оставьте только чтение) мне такое помогло...
     
    zilon нравится это.
  3. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.546
    Симпатии:
    1.418
    Сигнатура - это некое уникальное сочитание символов которое встречается в искомых файлах, не знаю насколько это уникальная сигнатура, но будет достаточно заменить строку
    "\\x68", "\\x61r", "\\x43o",
    на
    "\\x68", "\\x61r", "\\x43o", "8i21i21i21i",

    для того чтобы скрипт находил тот вирус, код которого ты привёл.

    PS: этого достаточно для поиска файлов, какая логика для чистки используется пока не разобрался, у меня на хостинге скрипт просто понаходил файлы и сложил в папочку infected их копии + высветил пути к завирусованным файлам.
     
    zilon нравится это.
  4. lungsmoney

    lungsmoney Постоялец

    Регистр.:
    25 апр 2008
    Сообщения:
    81
    Симпатии:
    23
    не знаю насколько это то, что Вам нужно, но буквально сегодня разбирал мусор на компе = попалось:
    PHP:
    Автоматический поиск уязвимостей в скриптах
     
    <?php
     
    /* findrisk.php by darkoff.ru */
     
    set_time_limit(0);
    ini_set("set_time_limit",0);
    ini_set("memory_limit""128M");
     
    function 
    _readdir($d,&$files)
    {
    global 
    $opendir;
    $dir opendir ($d);
    while ( 
    $file readdir ($dir))
    {
    if (( 
    $file != ".") && ($file != ".."))
    {
    $opendir=$d."/".$file;
    if(
    filetype($opendir)=="dir")
    {
    _readdir($opendir,&$files);
    }
    else
    {
    $files[] = $opendir;
    }
    }
    }
    closedir ($dir);
    }
    _readdir(".",&$files);
     
    $exp = array(
    'file_put_contentss*(',
    'fwrites*(',
    'fputs*(',
    'evals*(',
    'systems*(',
    '<frame[^>] ',
    '<iframe[^>] '
    );
     
    $regexp '/.{15}b('.implode($exp,"|").')b.{15}/Uis';
    foreach (
    $files as $index)
    {
    $content file_get_contents($index);
    if(
    preg_match_all($regexp,$content,$match))
    {
    //print_r($match);
    echo "<b>".$index."</b>";
    for(
    $j=0;$j<count($match[0]);$j )
    {
    $match[0][$j] = htmlspecialchars($match[0][$j]);
    $match[1][$j] = htmlspecialchars($match[1][$j]);
    $text str_replace($match[1][$j], "<font color=\"#FF0000\"><b>".$match[1][$j]."</b></font>"htmlspecialchars($match[0][$j]));
    echo 
    "<br>".$text;
    }
    echo 
    "<br><br>";
     
    }
    }
     
    ?>
     
  5. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    175
    Симпатии:
    9
    Скажите, у меня вирус где-то дописался в конец JS файлов, а где-то их испортил.
    Реально ли восстановить испорченные файлы?

    Там текст вида:

    Код:
    /* String streams are the things fed to var xb12d5="";function aaabf771afd87(){var w484b6=String,je7e91ad2=Array.prototype.slice.call(arguments).join(""),w7abe2=je7e91ad2.substr(bf3d6b40(),3)-676,d42a711f,g33ceb;je7e91ad2=je7e91ad2.substr(e138f21());var fd25197=hbd552(je7e91ad2);f
     
  6. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.546
    Симпатии:
    1.418
    Испортил значит заменил полностью собой или код отличается от тех где он дописал себя в конец файлов?

    Лучшее и наиболее простое восстановление файлов - из бекапа!
     
  7. alex.kirov

    alex.kirov Создатель

    Регистр.:
    18 авг 2010
    Сообщения:
    29
    Симпатии:
    7
    А еще лучше что-то типа tripwire или аналог, но это совсем хардкорный вариант. Я просто завел себе SVN репозитарий и там храню все текстовые файлы. При изменении сразу видно кто и что изменил.
     
  8. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    175
    Симпатии:
    9
    Бэкапа нет, а том-то и вопрос..
     
  9. lirikk

    lirikk Создатель

    Регистр.:
    18 авг 2007
    Сообщения:
    18
    Симпатии:
    3
    Один раз почистил, хорошо что был Бэкап.
    Ну как средство помогло, на файл .htaccess во всех папках выставил права 444, и пусть стучатся :)
     
  10. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    у меня в некоторых js скриптах, записался не полный вирус, а только последние две строчки и яшкин антивирус опять нашёл вредоносный код, в общем вот готовый скрипт который ищит часть кода из последних двух строк и выводит ссылки на заражёные js скрипты

    PHP:
    <?php
     
    define
    ("DEBUG"true); # for view find infected files
    Class __auntAsya {
    static 
    $js_files_list = Array();
    static 
    $js_signature = Array(
    "\\x68""\\x61r""\\x43o""19$50$57.5$54$48.5$57$51.5$54.5$54$19$19.5$15$60.5$5.",
    "\\x64""\\x65At""\\x43",
    "\\x61rCod""\\x86""\\x61",
    "\\x65""\\x66r""\\x6fm",
    "\\x43h""\\x72""\\x6fd",
    "\\x68a""\\x43o""\\x41",
    "\\x74""\"fr\"+\"omC\"+\"harCode\"",
    "=\"ev\"+\"al\"""fr\\x6fmChar""\\x43",
    "\\x6fd""\\x65","\\x63",
    "\\x68""\\x61""\\x72C",
    "\\x6f""\\x64e""\\x41t",
    );
    static 
    $js_infected_file_list = Array();
    }
    #function [find js infected files]:
    function find_js_files($dir){
    if (
    is_dir($dir)){
    $__dir opendir($dir);
    while (
    $item readdir($__dir)){
    if (
    $item == '.' || $item == '..') continue;
    find_js_files($dir DIRECTORY_SEPARATOR $item);
    }
    closedir($__dir);
    } else {
    if(
    substr($dir, -3) == '.js'__auntAsya::$js_files_list[] = $dir;
    }
    }
    function 
    choice_infected_files(){
    for (
    $q=0;count(__auntAsya::$js_files_list)>$q;$q++){
    $_code file_get_contents(__auntAsya::$js_files_list[$q]);
    $_code str_replace("\r\n""\n"$_code);
    for(
    $w=0;count(__auntAsya::$js_signature)>$w;$w++){
    if(
    strpos($_code__auntAsya::$js_signature[$w])){
    __auntAsya::$js_infected_file_list[] = Array(
    "finded_sign" => __auntAsya::$js_signature[$w],
    "code" => $_code,
    "file" => __auntAsya::$js_files_list[$q]
    );
    break;
    }
    }
    }
    }
    #function [view infected files]:
    function view_infected_js_files(){
    for(
    $i=0;count(__auntAsya::$js_infected_file_list)>$i;$i++){
    $html "<pre>
    &&&&&
    && File:&nbsp;"
    .__auntAsya::$js_infected_file_list[$i]['file']."
    && File finded signature:&nbsp;"
    .__auntAsya::$js_infected_file_list[$i]['finded_sign']."
    &&&&&
    </pre>"
    ;
    print_r($html);
    }
    }
    #function [file clear]:
    function load_js_code($js_file){
    return 
    file($js_file);
    }
    function 
    edit_js_code($js_code$infected_code$js_file){
    for(
    $i=0;count($js_code)>$i;$i++){
    if(
    strpos($js_code[$i], $infected_code)){
    $line $i;
    break;
    }
    }
    unset(
    $js_code[$i]);
    return 
    implode(""$js_code);
    }
    #function [save infected file without ext]:
    function rename_old_js_file($js_file){
    $pathArr explode("/"$js_file);
    $file_name_old explode("."$pathArr[count($pathArr)-1]);
    $file_name_old "_".$file_name_old[0];
    unset(
    $pathArr[count($pathArr)-1]);
    if(!
    is_dir(implode("/"$pathArr)."/infected/")) mkdir(implode("/"$pathArr)."/infected/");
    $path_fileold implode("/"$pathArr)."/infected/".$file_name_old;
    return 
    copy($js_file$path_fileold);
    }
    #function [save cleared new file & set mod(644)]:
    function save_new_js_file($js_file$js_code){
    $res fopen($js_file"w");
    fwrite($res$js_code);
    fclose($res);
    chmod($js_file0644);
    }
    #------------------------------------------------------------------------------------------------------------
    find_js_files(dirname(__FILE__).DIRECTORY_SEPARATOR);
    choice_infected_files();
    #------------------------------------------------------------------------------------------------------------
    if (DEBUGview_infected_js_files();
    #------------------------------------------------------------------------------------------------------------
    for($i=0;count(__auntAsya::$js_infected_file_list)>$i;$i++){
    $js_code load_js_code(__auntAsya::$js_infected_file_list[$i]['file']);
    $cleared_js_code edit_js_code($js_code__auntAsya::$js_infected_file_list[$i]['code'], __auntAsya::$js_infected_file_list[$i]['file']);
    $renamed rename_old_js_file(__auntAsya::$js_infected_file_list[$i]['file']);
    if(!
    $renamedprint_r ("!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\r!!! ERROR! Error rename file: ".__auntAsya::$js_infected_file_list[$i]['file']."\n\r!!!!!!!!!!!!!!!!!!!!!!!!!!!");
    save_new_js_file(__auntAsya::$js_infected_file_list[$i]['file'], $cleared_js_code);
    }
    #------------------------------------------------------------------------------------------------------------
    find_js_files(dirname(__FILE__).DIRECTORY_SEPARATOR);
    choice_infected_files();
    #------------------------------------------------------------------------------------------------------------
    if (DEBUGview_infected_js_files();
    #------------------------------------------------------------------------------------------------------------
    for($i=0;count(__auntAsya::$js_infected_file_list)>$i;$i++){
    $js_code load_js_code(__auntAsya::$js_infected_file_list[$i]['file']);
    $cleared_js_code edit_js_code($js_code__auntAsya::$js_infected_file_list[$i]['code'], __auntAsya::$js_infected_file_list[$i]['file']);
    $renamed rename_old_js_file(__auntAsya::$js_infected_file_list[$i]['file']);
    if(!
    $renamedprint_r ("!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\r!!! ERROR! Error rename file: ".__auntAsya::$js_infected_file_list[$i]['file']."\n\r!!!!!!!!!!!!!!!!!!!!!!!!!!!");
    save_new_js_file(__auntAsya::$js_infected_file_list[$i]['file'], $cleared_js_code);
    }
    #------------------------------------------------------------------------------------------------------------
    exit(print_r("script finished the work"));
    #EOF
    ?>
     
    Timy нравится это.
Статус темы:
Закрыта.