• 病毒排查【备忘录】


    警告

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

    目录

    警告

    一、背景

    二、工具运行环境要求

    三、完整代码

    四、生成exe文件

    五、制作测试用的MD5值

    六、各个系统进行测试


    一、背景

            已获取病毒文件的MD5值,在内网各计算机中排查是否存在同样的病毒。


    二、工具运行环境要求

            要能够同时在windows xp 32位,windows 7 32和64位 ,windows server 2003、windows server 2008、windows 10 64位等系统中运行。


    三、完整代码

    1. # -*- coding: GB2312 -*-
    2. """
    3. @Copyright: Copyright?2022-2025 All Rights Reserved
    4. @File name: scanfiles.py
    5. @Version:1.1
    6. @File function description: Scan MD5 consistent files
    7. @Creation date: 2022-08-05 20:30:00
    8. @Created by: Old Charlie
    9. @Modification ID:
    10. @Modification Description:
    11. @Modified on:
    12. """
    13. import os
    14. import sys
    15. import hashlib
    16. import getopt
    17. import time
    18. import argparse
    19. import signal
    20. #存放已知病毒文件的MD5值
    21. md5list = []
    22. #存放找到的病毒文件名称
    23. fnameList = []
    24. #存放匹配的文件数量
    25. md5num = 0
    26. #扫描文件夹
    27. dpath = 'c:\\windows'
    28. #记录扫描开始时间
    29. n1 = time.time()
    30. starttime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(n1))
    31. #记录共扫描的文件数量
    32. file_num = 0
    33. #结束处理信号里
    34. stop = False
    35. #定义处理信号量的函数
    36. def my_handler(signum, frame):
    37. global stop
    38. stop = True
    39. signal.signal(signal.SIGINT, my_handler)
    40. #输入参数
    41. try:
    42. opts,args = getopt.getopt(sys.argv[1:], "hp:", ["path=", "help"])
    43. for opt, path in opts:
    44. if opt=="--path" or opt=="-p":
    45. # print(path)
    46. dpath = path
    47. #添加帮助信息 2022-08-06 21:35
    48. elif opt=="--help" or opt=="-h":
    49. print("*"*40)
    50. print("默认扫描c:\windwos")
    51. print("*"*40)
    52. parser = argparse.ArgumentParser()
    53. example = parser.add_argument_group("Example")
    54. example.add_argument("-p", dest="短参数",
    55. help="scanfiles.exe -p \"C:\Program Files\"")
    56. example.add_argument("--path", dest="长参数",
    57. help="scanfiles.exe --path=\"C:\Program Files\"")
    58. args = parser.parse_args()
    59. parser.print_help()
    60. else:
    61. print("请输入正确的参数!")
    62. sys.exit(0)
    63. except Exception as e:
    64. #raise
    65. print('请输入正确的参数!')
    66. sys.exit(0)
    67. finally:
    68. pass
    69. #读取配置文件内容
    70. with open('md5v.ini') as file:
    71. content=file.readlines()
    72. for l in content:
    73. _l = l.strip()
    74. if len(_l) > 0:
    75. md5list.append(l.rstrip())
    76. #遍历文件目录及子目录中的文件
    77. for dirpath, dirnames, filenames in os.walk(dpath):
    78. if stop:
    79. break
    80. for filename in filenames:
    81. if stop:
    82. break
    83. file_num = file_num + 1
    84. print(os.path.join(dirpath, filename))
    85. try:
    86. tmp_filename = os.path.join(dirpath, filename)
    87. with open(tmp_filename, 'rb') as fp:
    88. data = fp.read()
    89. file_md5= hashlib.md5(data).hexdigest()
    90. # print(file_md5)
    91. if file_md5 in md5list:
    92. md5num = md5num+1
    93. fnameList.append(tmp_filename)
    94. except Exception as e:
    95. pass
    96. finally:
    97. pass
    98. #扫描结束时间
    99. n2 = time.time()
    100. endtime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(n2))
    101. #扫描结束时间差(秒数)
    102. s = int(round((n2-n1) % 60))
    103. #扫描结束时间差(分钟数)
    104. m = int((n2-n1) / 60)
    105. #打印40个*号
    106. myinfo = """
    107. ########################################
    108. ******** www.itsec365.cn ***************
    109. ******** Version: 1.1 ******************
    110. ****Modified on: 2022-08-06 21:35*******
    111. ***** Welcome to this tool!************
    112. ########################################
    113. """
    114. print(myinfo)
    115. print('*'*40)
    116. print('** 开始时间:'+starttime)
    117. print('** 结束时间:'+endtime)
    118. print('** 匹配到'+str(md5num)+'个文件')
    119. for fn in fnameList:
    120. print(fn)
    121. print('** 共查询'+ str(file_num) + '个文件')
    122. print('** 用 时:'+str(m)+'分 '+str(s)+'秒')
    123. print('*'*40)

    四、生成exe文件

    编写setup文件,这个文件的文件随意,我的为mysetup.py,其具体内容为:

    1. from distutils.core import setup
    2. import py2exe
    3. includes = []
    4. setup(console=[{"script":"scanfiles.py"}],
    5. options={"py2exe":{"bundle_files": 1, "compressed":True, "includes": includes}},
    6. 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

  • 相关阅读:
    Java OutputStreamWriter类的简介说明
    亚马逊卖家测评为什么一定要掌握自养号技巧
    SQL注入原理及思路(mysql)
    docker
    数据结构复盘——第七章:查找和匹配
    Flink RoaringBitmap去重
    opencv之图像翻转、平移、缩放、旋转、仿射学习笔记
    CR总结--java函数CR
    基于车路协同功能的路侧及车载智能设备研究
    xilinx FPGA IOB约束使用以及注意事项
  • 原文地址:https://blog.csdn.net/xiaofengdada/article/details/126291867