病毒排查辅助工具【备忘录】
时间:2022-08-06 作者:zhankehua 评论:0 点击:973 次
一、背景
已获取病毒文件的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
已有 973 位网友参与,快来吐槽:
发表评论