前几天在使用VS2010建立项目向导时,一直报脚本错误,当时点了否并没有在意。
今天有时间闲下来看了下出错的那个htm文件,才发现文件的末尾被追加了VBS脚本,然后检查下了下其他的htm文件,悲剧的发现所有.htm和.html文件都被追加了相同的内容(everything搜索下了.html文件有6k多个 =。=)
从被追加的内容上看,应该是生成一个"svchost.exe"文件,这个exe似乎并不能执行 =。=.. 不是太懂VBS的语法...现在的问题是怎么去掉这6k多个.html文件里被追加的内容。。
本来是准备写个C程序简单处理下,但想想过程有点繁琐,放弃了。刚好这段时间在看python,感觉python在文本处理方面较C而言方便很多,于是动手写了第一个真正意义上的python脚本。。
第一步:查找磁盘中所有的.htm和.html文件
利用walk函数来遍历磁盘文件,提取扩展名,过滤得到.htm和.html文件
def findHtml(path):
for root, dirs, files in os.walk(path,topdown=False):
for name in files:
filetype = os.path.splitext(name)[-1];
if filetype == ".html" or filetype == ".htm":
fullpath = os.path.join(root,name)
print(fullpath)
#killVirus(fullpath)
开始考虑到用HTMLParse来处理html文本,写了几个Demo后发现并不是特别的适合。考虑到追加的内容都在文件末尾且有着特殊的标签 <SCRIPT Language=VBScript> .. </SCRIPT>,于是暴力读取文件的每一行,匹配到<SCRIPT Language=VBScript>就丢弃剩下的内容,保存之前的内容到新文件。
def killVirus(filePath):
fIn = file(filePath,"r")
allIn = fIn.readlines()
allOut = []
for eachline in allIn:
indexs = eachline.find("<SCRIPT Language=VBScript>")
if indexs != -1:
allOut.append(eachline[:indexs])
break
else:
allOut.append(eachline)
fIn.close()
try:
fOut = file(filePath,"w")
fOut.writelines(allOut)
fOut.close()
except Exception, e:
print e
finally:
pass