病毒排查【备忘录】

发布于:2023-01-21 ⋅ 阅读:(396) ⋅ 点赞:(0)

警告

请勿使用本文提到的内容违反法律
本文不提供任何担保

目录

警告

一、背景

二、工具运行环境要求

三、完整代码

四、生成exe文件

五、制作测试用的MD5值

六、各个系统进行测试


一、背景

        已获取病毒文件的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

  扫描结果正确!

 参考: 病毒排查辅助工具【备忘录】 - 学习笔记 - 信安365

本文含有隐藏内容,请 开通VIP 后查看