警告
请勿使用本文提到的内容违反法律。
本文不提供任何担保
目录
一、背景
已获取病毒文件的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)
四、生成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配置文件中
六、各个系统进行测试
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
扫描结果正确!
本文含有隐藏内容,请 开通VIP 后查看