
病毒排查辅助工具【备忘录】
时间:2022-08-06 作者:zhankehua 评论:0 点击:836 次
一、背景
已获取病毒文件的MD5值,在内网各计算机中排查是否存在同样的病毒。
二、工具运行环境要求
要能够同时在windows xp 32位,windows 7 32和64位 ,windows server 2003、windows server 2008、windows 10 64位等系统中运行。
三、开发环境
Python 2.7.14,
py2exe-0.6.9.win32-py2.7
windows xp 32位
py2exe下载地址 py2exe - Browse /py2exe/0.6.9 at SourceForge.net
Python 2.7.14 下载地址 https://www.python.org/ftp/python/2.7.14/python-2.7.14.msi
其主页面为 Python Releases for Windows | Python.org
三、环境安装
直接在windows xp 中安装python 2.7.14和py2exe-0.6.9.win32-py2.7
安装完成后,输入以下命令进行确认
python -V python mysetup.py py2exe --help
如果出现以下画面,表示安装成功!
四、工具完整代码
# -*- coding: GB2312 -*- """ @Copyright: Copyright?2022-2025 All Rights Reserved @File name: scanfiles.py @Version:1.1 @File function description: Scan MD5 consistent files @Creation date: 2022-08-05 20:30:00 @Created by: Old Charlie @Modification ID: @Modification Description: @Modified on: """ import os import sys import hashlib import getopt import time import argparse import signal #存放已知病毒文件的MD5值 md5list = [] #存放找到的病毒文件名称 fnameList = [] #存放匹配的文件数量 md5num = 0 #扫描文件夹 dpath = 'c:\\windows' #记录扫描开始时间 n1 = time.time() starttime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(n1)) #记录共扫描的文件数量 file_num = 0 #结束处理信号里 stop = False #定义处理信号量的函数 def my_handler(signum, frame): global stop stop = True signal.signal(signal.SIGINT, my_handler) #输入参数 try: opts,args = getopt.getopt(sys.argv[1:], "hp:", ["path=", "help"]) for opt, path in opts: if opt=="--path" or opt=="-p": # print(path) dpath = path #添加帮助信息 2022-08-06 21:35 elif opt=="--help" or opt=="-h": print("*"*40) print("默认扫描c:\windwos") print("*"*40) parser = argparse.ArgumentParser() example = parser.add_argument_group("Example") example.add_argument("-p", dest="短参数", help="scanfiles.exe -p \"C:\Program Files\"") example.add_argument("--path", dest="长参数", help="scanfiles.exe --path=\"C:\Program Files\"") args = parser.parse_args() parser.print_help() else: print("请输入正确的参数!") sys.exit(0) except Exception as e: #raise print('请输入正确的参数!') sys.exit(0) finally: pass #读取配置文件内容 with open('md5v.ini') as file: content=file.readlines() for l in content: _l = l.strip() if len(_l) > 0: md5list.append(l.rstrip()) #遍历文件目录及子目录中的文件 for dirpath, dirnames, filenames in os.walk(dpath): if stop: break for filename in filenames: if stop: break file_num = file_num + 1 print(os.path.join(dirpath, filename)) try: tmp_filename = os.path.join(dirpath, filename) with open(tmp_filename, 'rb') as fp: data = fp.read() file_md5= hashlib.md5(data).hexdigest() # print(file_md5) if file_md5 in md5list: md5num = md5num+1 fnameList.append(tmp_filename) except Exception as e: pass finally: pass #扫描结束时间 n2 = time.time() endtime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(n2)) #扫描结束时间差(秒数) s = int(round((n2-n1) % 60)) #扫描结束时间差(分钟数) m = int((n2-n1) / 60) #打印40个*号 myinfo = """ ######################################## ******** www.itsec365.cn *************** ******** Version: 1.1 ****************** ****Modified on: 2022-08-06 21:35******* ***** Welcome to this tool!************ ######################################## """ print(myinfo) print('*'*40) print('** 开始时间:'+starttime) print('** 结束时间:'+endtime) print('** 匹配到'+str(md5num)+'个文件') for fn in fnameList: print(fn) print('** 共查询'+ str(file_num) + '个文件') print('** 用 时:'+str(m)+'分 '+str(s)+'秒') print('*'*40)
五、生成exe文件
编写setup文件,这个文件的文件随意,我的为mysetup.py,其具体内容为:
from distutils.core import setup import py2exe includes = [] setup(console=[{"script":"scanfiles.py"}], options={"py2exe":{"bundle_files": 1, "compressed":True, "includes": includes}}, zipfile = None)
使用以下命令生成exe文件
python mysetup.py py2exe
六、制作测试用的MD5值
使用Cygwin64 Terminal下的md5sum.exe工具生成文件的MD5值 ,把对应的文件拷贝到各系统某一目录下,进行工具测试,确认是否能够通过MD5值扫描到对应文件。
注:需要将以下MD5值拷贝到md5v.ini配置文件中
$ md5sum.exe 'Wireshark 从入门到精通【学习网络必备】 (1).pdf' 82e9ac7a9d28a2f28b84953184c3ea8b *Wireshark 从入门到精通【学习网络必备】 (1).pdf Administrator@DESKTOP-MQD5HNE /cygdrive/e/999-学习资料/007-wireshark $ md5sum.exe Wireshark_Display_Filters.pdf 5be0f7e39fb4a7f8ec90b34bfa08e1b2 *Wireshark_Display_Filters.pdf
1、在windows 10下测试
扫描结果正确
2、windows xp系统测试
扫描结果正确
3、windows 7 64 测试
扫描结果正确
4、windows 7 32位测试
扫描结果正确
5、windows server 2012
扫描结果正确
6、windows server 2008
扫描结果正确
7、windows server 2003测试
扫描结果正确
2022-08-06 完善一下提示信息
可以针对业务场景调整工具编写方法,以提高扫描速度。

本文标签:
转载请注明出处: http://www.itsec365.cn/?id=70
已有 836 位网友参与,快来吐槽:
发表评论