Python实例分享:快速查找出被挂马的文件
思路
需要实现准备一份未受感染的源代码和一份可能受感染的源代码,然后运行以下脚本,就能找出到底哪些文件被挂马了。
其中,主要是根据比对2份文件的md5值来过滤可能被挂马的文件(确切的说应该是被修改过的文件)
Python脚本
__author__='Flying' #coding:utf-8 #Date:2014.6.5 #检测修改过的文件 importos,sys,hashlib,datetime global_DirOld="" global_DirNew="" global_FilesList=[] #输入要比对的文件路径 defInputDirPath(): globalglobal_DirOld,global_DirNew global_DirOld=unicode(raw_input("请输入备份文件所在目录:"),"utf-8") whilenotos.path.exists(global_DirOld): print u"指定的路径不存在,请重新输入" global_DirOld=unicode(raw_input("请输入备份文件所在目录:"),"utf-8") global_DirNew=unicode(raw_input("请输入要检测文件的目录:"),"utf-8") whilenotos.path.exists(global_DirNew): print u"指定的路径不存在,请重新输入" global_DirNew=unicode(raw_input("请输入要检测文件的目录:"),"utf-8")
#将数据保存到文件中 defSaveToFile(filePath,content): try: f=open(filePath,"a+") f.write(content.encode("utf-8")+"\n") f.close() exceptException,ex: print"Error:"+str(ex)
#计算文件的MD5值 defCalcMD5(filepath): try: #以二进制的形式打开 withopen(filepath,'rb')asf: md5obj=hashlib.md5() md5obj.update(f.read()) hash=md5obj.hexdigest() returnhash exceptException,ex: print"Error:"+str(ex) returnNone
#遍历目录下的所有文件 defGetAllSubFiles(): globalglobal_FilesList fordirinos.walk(global_DirNew): forfileindir[2]: filePath=dir[0]+os.sep+file global_FilesList.append(filePath[len(global_DirNew)+1:])
#列出新增文件和变动的文件 defListChangedFiles(): globalglobal_DirOld,global_DirNew,global_FilesList printu"变动或新增的文件:" forfileinglobal_FilesList: filePathOld=global_DirOld+os.sep+file filePathNew=global_DirNew+os.sep+file ifnotos.path.exists(filePathOld)orCalcMD5(filePathOld)!=CalcMD5(filePathNew): content="["+datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S')+"]"+filePathNew printcontent SaveToFile("ChangedFiles.txt",content)
if__name__=="__main__": InputDirPath() GetAllSubFiles() ListChangedFiles()