警告
请勿使用本文提到的内容违反法律。
本文不提供任何担保
目录
已获取病毒文件的MD5值,在内网各计算机中排查是否存在同样的病毒。
要能够同时在windows xp 32位,windows 7 32和64位 ,windows server 2003、windows server 2008、windows 10 64位等系统中运行。
- # -*- 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)
编写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

使用Cygwin64 Terminal下的md5sum.exe工具生成文件的MD5值 ,把对应的文件拷贝到各系统某一目录下,进行工具测试,确认是否能够通过MD5值扫描到对应文件。
注:需要将以下MD5值拷贝到md5v.ini配置文件中


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

扫描结果正确!