python制作恶意软件删除工具

news2024/12/28 9:29:01

今天,来教大家用python制作一个恶意软件删除工具

查杀流程图

对,就这些,已经具备了杀毒软件的功能

判断文件是否为病毒

要查杀病毒,先要判断文件是不是病毒(不然删错了咋办),这里我们用获取文件的哈希值来判断文件是不是病毒

这里我们用os、hashlib库

import os,hashlib

获取哈希值代码


def GetFileMD5(filename):
    file = open(filename, 'rb') #用二进制方式读取文件
    file_content = file.read()
    file.close()
    file_md5 = hashlib.md5(file_content)
    return file_md5.hexdigest()   #返回文件的哈希值

啊对,就这样,文件的哈希值就被拿到了

我们测试一下代码,先编个病毒

就是无限循环执行cmd

病毒库

每个杀毒软件都有自己的病毒库,那我们也搞一个(就是把一些病毒哈希值整理成一个列表)

Virus_Reservoirs=[
                 '40d8911754a4d6cd8d4c732f96eb3016',#无限cmd弹窗
                 '0d686bf04da1a4d11ea197375b99a48b',#无限cmd弹窗
                 'eda588c0ee78b585f645aa42eff1e57a',#中华黑豹升级版
                 '0a456ffff1d3fd522457c187ebcf41e4',#蠕虫
                 '1aa4c64363b68622c9426ce96c4186f2',#BIOS、MBR病毒
                 'd214c717a357fe3a455610b197c390aa',#Virus.Win32.disttrackA类型病毒
                 'b14299fd4d1cbfb4cc7486d978398214',#Virus.Win32.disttrackA类型病毒
                 'dffe6e34209cb19ebe720c457a06edd6',#无尽黑洞木马病毒
                 '512301c535c88255c9a252fdf70b7a03',#熊猫烧香
                 'd4a05ada747a970bff6e8c2c59c9b5cd',#WormOrg.Viking.A -->蠕虫
                 'ad41ec81ab55c17397d3d6039752b0fd',#WormOrg.Win32.Fujack.A  -->蠕虫
                 'a57db79f11a8c58d27f706bc1fe94e25',#Virus.Win32.Viking.A类型病毒
                 'fc14eaf932b76c51ebf490105ba843eb',#冲击波
                 '2a92da4b5a353ca41de980a49b329e7d',#蠕虫
                 '68abd642c33f3d62b7f0f92e20b266aa',#蠕虫
                 'ff5e1f27193ce51eec318714ef038bef',#蠕虫
                 '4c36884f0644946344fa847756f4a04e',#磁碟机
                 '2391109c40ccb0f982b86af86cfbc900',#AV终结者——>Pabug
                 '84c82835a5d21bbcf75a61706d8ab549',#WannaCry永恒之蓝
                 'db349b97c37d22f5ea1d1841e3c89eb4',#WannaCry永恒之蓝
                 '1de73f49db23cf5cc6e06f47767f7fda',#WannaRen
                 'af2379cc4d607a45ac44d62135fb7015',#Petya
                 '71b6a493388e7d0b40c83ce903bc6b04',#Petya组件
                 'e81139675ac1b806d689fb17789e2f99',#斯大林病毒
                 '915178156c8caa25b548484c97dd19c1',#可删除文件的蠕虫
                 'dac5f1e894b500e6e467ae5d43b7ae3e',#可删除文件的蠕虫
                 '849da18699ea2332494e431c66be0ca6',#WindowsCrazyError
                 '56975ae355acb292220921ad61c58f2a',#MBR破坏
                 '44d88612fea8a8f36de82e1278abb02f',#引擎测试程序
                 '297de74cb20a975efaf20cd88fddf270',#鬼影木马
                 'c729d940eb78e927afcba4046543d8f8',#可让系统蓝屏的病毒
                 '8c71f2a4b3079332d4f8078eddb9974a',#小猪佩奇病毒
                 '19dbec50735b5f2a72d4199c4e184960',#MEMZ彩虹猫
                 '815b63b8bc28ae052029f8cbdd7098ce',#滑稽病毒
                 'c71091507f731c203b6c93bc91adedb6',#卢本伟病毒
                 "8c689f65508e1353fb3df35df87ba5c7",#'假蓝屏'病毒
                 ]

有点少。。。。。

大家发现一些病毒可以把他的哈希值发给我哈

编写杀毒界面

代码太多了,不容易讲,直接上代码了。界面用了滚动滑杆,用的是tkinter库

import tkinter as tk
from tkinter.ttk import *
import tkinter.filedialog as filedialog
filles=filedialog.askopenfilenames(title='选择文件',filetypes=[("All Files","*.*")]) #选择文件
viruses=[]
try:
    for i in filles:
        fileMD5=getFileMD5(i)
        print(i+"文件哈希值:"+fileMD5)
        if fileMD5 in Virus_Reservoirs:
            viruses. Append(i)
    show_viruses_win=tk.Tk()
    if len(viruses) == 0:
        show_viruses_win.withdraw()
        messagebox.showinfo("查杀结果","此次查杀未发现风险项")
        show_viruses_win.destroy()
    else:
        kills=[]
        fail_kills=[]
        def getlujing(event):
            str=""
            index1=viruss.curselection()
            for item in index1:
                str+=viruss.get(item)+"、"
                kills.append(viruss.get(item))    #选择要清理的病毒
            llabel.config(text="你选择了"+str)
        def killthem():
            for i in kills:
                kills.remove(i)
                try:
                    os.unlink(i)
                except:
                    fail_kills.append(i)
            show_viruses_win.destroy()
            jieguo_win=tk.Tk()
            jieguo_win.withdraw()
            if len(fail_kills) == 0:
                messagebox.showinfo("yeah","全部清除成功!")
            else:
                messagebox.showinfo("error",f"{fail_kills}清除失败,请手动清除!")
            jieguo_win.destroy()
        show_viruses_win.geometry("480x480") #界面
        show_viruses_win.title("请选择您想清理的病毒")
        show_viruses_win.configure(bg="#F5D7C4")
        llabel=tk.Label(show_viruses_win,height=5,wraplength=190,justify="left",bg="#F1DAA1",relief="groove")
        llabel.pack(side="top",fill="x",padx="10",pady="10")
        sc1=tk.Scrollbar(show_viruses_win)
        viruss=tk.Listbox(show_viruses_win,height=20,yscrollcommand=sc1.set,selectmode="multiple",justify='center',width=30)
        for i in viruses:
            viruss.insert(tk.END,i)
        viruss.pack(side='left',fill='x')
        viruss.bind("<<ListboxSelect>>",getlujing)
        sc1.pack(side="left",fill="y")
        sc1.config(command=viruss.yview)
        tk.Button(show_viruses_win,text="选择完毕,开始杀毒!",relief='groove',fg='white',bg='blue',cursor='hand2',command=killthem).pack()
        show_viruses_win.mainloop()
except:
    show_error_win=tk.Tk()
    show_error_win.withdraw()
    messagebox.showerror("error","无法查杀病毒或初始化杀毒引擎,请重试")
    show_error_win.destroy()

测试代码

先把代码汇总一下

总代码

import os,hashlib
import tkinter as tk
import tkinter.messagebox as messagebox
from tkinter.ttk import *
import tkinter.filedialog as filedialog
def GetFileMD5(filename):
    file = open(filename, 'rb') #用二进制方式读取文件
    file_content = file.read()
    file.close()
    file_md5 = hashlib.md5(file_content)
    return file_md5.hexdigest()   #返回文件的哈希值
Virus_Reservoirs=[
                 '40d8911754a4d6cd8d4c732f96eb3016',#无限cmd弹窗
                 '0d686bf04da1a4d11ea197375b99a48b',#无限cmd弹窗
                 'eda588c0ee78b585f645aa42eff1e57a',#中华黑豹升级版
                 '0a456ffff1d3fd522457c187ebcf41e4',#蠕虫
                 '1aa4c64363b68622c9426ce96c4186f2',#BIOS、MBR病毒
                 'd214c717a357fe3a455610b197c390aa',#Virus.Win32.disttrackA类型病毒
                 'b14299fd4d1cbfb4cc7486d978398214',#Virus.Win32.disttrackA类型病毒
                 'dffe6e34209cb19ebe720c457a06edd6',#无尽黑洞木马病毒
                 '512301c535c88255c9a252fdf70b7a03',#熊猫烧香
                 'd4a05ada747a970bff6e8c2c59c9b5cd',#WormOrg.Viking.A -->蠕虫
                 'ad41ec81ab55c17397d3d6039752b0fd',#WormOrg.Win32.Fujack.A  -->蠕虫
                 'a57db79f11a8c58d27f706bc1fe94e25',#Virus.Win32.Viking.A类型病毒
                 'fc14eaf932b76c51ebf490105ba843eb',#冲击波
                 '2a92da4b5a353ca41de980a49b329e7d',#蠕虫
                 '68abd642c33f3d62b7f0f92e20b266aa',#蠕虫
                 'ff5e1f27193ce51eec318714ef038bef',#蠕虫
                 '4c36884f0644946344fa847756f4a04e',#磁碟机
                 '2391109c40ccb0f982b86af86cfbc900',#AV终结者——>Pabug
                 '84c82835a5d21bbcf75a61706d8ab549',#WannaCry永恒之蓝
                 'db349b97c37d22f5ea1d1841e3c89eb4',#WannaCry永恒之蓝
                 '1de73f49db23cf5cc6e06f47767f7fda',#WannaRen
                 'af2379cc4d607a45ac44d62135fb7015',#Petya
                 '71b6a493388e7d0b40c83ce903bc6b04',#Petya组件
                 'e81139675ac1b806d689fb17789e2f99',#斯大林病毒
                 '915178156c8caa25b548484c97dd19c1',#可删除文件的蠕虫
                 'dac5f1e894b500e6e467ae5d43b7ae3e',#可删除文件的蠕虫
                 '849da18699ea2332494e431c66be0ca6',#WindowsCrazyError
                 '56975ae355acb292220921ad61c58f2a',#MBR破坏
                 '44d88612fea8a8f36de82e1278abb02f',#引擎测试程序
                 '297de74cb20a975efaf20cd88fddf270',#鬼影木马
                 'c729d940eb78e927afcba4046543d8f8',#可让系统蓝屏的病毒
                 '8c71f2a4b3079332d4f8078eddb9974a',#小猪佩奇病毒
                 '19dbec50735b5f2a72d4199c4e184960',#MEMZ彩虹猫
                 '815b63b8bc28ae052029f8cbdd7098ce',#滑稽病毒
                 'c71091507f731c203b6c93bc91adedb6',#卢本伟病毒
                 "8c689f65508e1353fb3df35df87ba5c7",#'假蓝屏'病毒
                 ]
filles=filedialog.askopenfilenames(title='选择文件',filetypes=[("All Files","*.*")]) #选择文件
print(filles)
viruses=[]
try:
    for i in filles:
        fileMD5=GetFileMD5(i)
        print(i+"文件哈希值:"+fileMD5)
        if fileMD5 in Virus_Reservoirs:
            viruses.append(i)
    show_viruses_win=tk.Tk()
    if len(viruses) == 0:
        show_viruses_win.withdraw()
        messagebox.showinfo("查杀结果","此次查杀未发现风险项")
        show_viruses_win.destroy()
    else:
        kills=[]
        fail_kills=[]
        def getlujing(event):
            str=""
            index1=viruss.curselection()
            for item in index1:
                str+=viruss.get(item)+"、"
                kills.append(viruss.get(item))    #选择要清理的病毒
            llabel.config(text="你选择了"+str)
        def killthem():
            for i in kills:
                kills.remove(i)
                try:
                    os.unlink(i)
                except:
                    fail_kills.append(i)
            show_viruses_win.destroy()
            jieguo_win=tk.Tk()
            jieguo_win.withdraw()
            if len(fail_kills) == 0:
                messagebox.showinfo("yeah","全部清除成功!")
            else:
                messagebox.showinfo("error",f"{fail_kills}清除失败,请手动清除!")
            jieguo_win.destroy()
        show_viruses_win.geometry("480x480") #界面
        show_viruses_win.title("请选择您想清理的病毒")
        show_viruses_win.configure(bg="#F5D7C4")
        llabel=tk.Label(show_viruses_win,height=5,wraplength=190,justify="left",bg="#F1DAA1",relief="groove")
        llabel.pack(side="top",fill="x",padx="10",pady="10")
        sc1=tk.Scrollbar(show_viruses_win)
        viruss=tk.Listbox(show_viruses_win,height=20,yscrollcommand=sc1.set,selectmode="multiple",justify='center',width=30)
        for i in viruses:
            viruss.insert(tk.END,i)
        viruss.pack(side='left',fill='x')
        viruss.bind("<<ListboxSelect>>",getlujing)
        sc1.pack(side="left",fill="y")
        sc1.config(command=viruss.yview)
        tk.Button(show_viruses_win,text="选择完毕,开始杀毒!",relief='groove',fg='white',bg='blue',cursor='hand2',command=killthem).pack()
        show_viruses_win.mainloop()
except:
    show_error_win=tk.Tk()
    show_error_win.withdraw()
    messagebox.showerror("error","无法查杀病毒或初始化杀毒引擎,请重试")
    show_error_win.destroy()

运行

运行成功

=)

总结

此程序利用文件的哈希值,精准清除病毒

望大家喜欢(❤ ω ❤)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1434112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

『运维备忘录』之 Vim 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

多彩贵州人文山水展风采,微环境监测智能调控护古韵

一、人文山水时光峰峦——多彩贵州历史文化展 2月3日&#xff0c;贵州省博物馆向公众开放《人文山水时光峰峦——多彩贵州历史文化展》。6000平方米展厅里&#xff0c;从石器时期开始&#xff0c;通过六个篇章&#xff0c;用3503件文物的回忆链&#xff0c;系统化的向观众揭开…

我要成为嵌入式高手之2月4、5日Linux高编第二天!!

读写函数接口 1、fgetc 语法&#xff1a; 功能&#xff1a;从流中获取一个字符 练习1&#xff1a;编写程序统计文件的行数 #include <stdio.h>int main(void) {FILE *fp NULL;char ch 0;int row 0;fp fopen("file.txt","r");if (NULL fp){pe…

C#验证字符串的长度,用正则表达式 vs 字符数组长度或字符串的长度

目录 一、使用的方法 1.使用正则表达式 2.通过计算字符串的长度验证 二、实例 1.源码 2.生成效果 一、使用的方法 1.使用正则表达式 使用正则表达式可以判断和限制用户输入的字符串长度。 比如验证用户密码不得少于8为&#xff0c;匹配的正则表达式"^.{8,}$"…

ShardingSphere 5.x 系列【5】Spring Boot 3 集成并实现读写分离

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. 使用限制3. 案例演示3.…

空气质量预测 | Matlab实现基于SVR支持向量机回归的空气质量预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 政府机构使用空气质量指数 (AQI) 向公众传达当前空气污染程度或预测空气污染程度。 随着 AQI 的上升,公共卫生风险也会增加。 不同国家有自己的空气质量指数,对应不同国家的空气质量标准。 基于支持向量机(Su…

高速接口PCB布局指南(一)高速信号接口概述

高速接口PCB布局指南&#xff08;一&#xff09;高速信号接口概述 1.什么是高速信号接口&#xff1f;2.高速信号PCB设计概述2.1 概述2.2 关键信号 tips&#xff1a;资料主要来自网络&#xff0c;仅供学习使用。 1.什么是高速信号接口&#xff1f; 高速信号接口是指用于传输高…

jmeter-04创建请求

文章目录 一、发送请求-查看响应流程二、新建请求三、选择请求方式&#xff0c;填写url1.发送get请求当只有请求方式不一样的时候&#xff0c;参数都填写在参数栏里面&#xff0c;GET请求与POST请求的区别&#xff1f; 2.发送post请求2.1 application/x-www-form-urlencoded2.2…

二叉搜索树题目:二叉搜索树的最近公共祖先

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉搜索树的最近公共祖先 出处&#xff1a;235. 二叉搜索树的最近公共祖先 难度 3 级 题目描述 要求 给定一个…

Springboot集成ElasticSearch快速入门demo

一、ElasticSearch介绍 elasticsearch是构建在Apache Lucene上的使用Java语言开发的开源分布式搜素引擎。Lucene是一个开源的全文搜索引擎工具包&#xff0c;它仅是一个工具包而不是一个完整的工作引擎&#xff0c;并且只能被Java应用程序调用&#xff0c;elasticsearch基于RES…

云计算运营模式介绍

目录 一、云计算运营模式概述 1.1 概述 二、云计算服务角色 2.1 角色划分 2.1.1 云服务提供商 2.1.2 云服务消费者 2.1.3 云服务代理商 2.1.4 云计算审计员 2.1.5 云服务承运商 三、云计算责任模型 3.1 云计算服务模式与责任关系图 3.2 云计算服务模式与责任关系解析…

C++进阶--搜索二叉树

概念 搜索二叉树是一种特殊的二叉树&#xff0c;其具有以下特点&#xff1a; 1.对于每个结点&#xff0c;它的左子树中的所有节点的值都小于该节点的值&#xff0c;而右子树中的所有节点的值都大于该节点的值。 2.左子树和右子树都是搜索二叉树。 这个 特性使得搜索二叉树可…

计算机网络原理基础

目录 前言&#xff1a; 1.网络发展史 2.网络通信基础 2.1IP地址 2.1.1定义 2.1.2格式 2.2端口号 2.2.1定义 2.2.2格式 2.3协议 2.3.1定义 2.3.2作用 2.3.3分层 2.4五元组 2.4.1定义 2.4.2组成 3.TCP/IP五层网络模型 3.1模型概念 3.2模型构成 3.3网络分层对应…

06-Java适配器模式 ( Adapter Pattern )

原型模式 摘要实现范例 适配器模式&#xff08;Adapter Pattern&#xff09;是作为两个不兼容的接口之间的桥梁 适配器模式涉及到一个单一的类&#xff0c;该类负责加入独立的或不兼容的接口功能 举个真实的例子&#xff0c;读卡器是作为内存卡和笔记本之间的适配器。您将内…

机器学习逻辑回归模型训练与超参数调优 ##3

文章目录 [TOC]基于Kaggle电信用户流失案例数据&#xff08;可在官网进行下载&#xff09;逻辑回归模型训练逻辑回归的超参数调优 基于Kaggle电信用户流失案例数据&#xff08;可在官网进行下载&#xff09; 数据预处理部分可见&#xff1a; 机器学习数据预处理方法&#xff0…

layui

基于复杂结构的自定义模版相关介绍 我这里的接口给的格式数据 我这里搜索往返时候要显示成这样的 layui.use([table,form], function(){ var table layui.table; var form layui.form;// 渲染表格 table.render({ elem: #test-table-reload,toolbar: #toolbarDemo, …

【PPT密码】ppt设置的编辑密码,如何取消?

不知道大家是否了解PPT文件的编辑密码&#xff0c;首先ppt中没有限制编辑功能&#xff0c;设置为只读模式后仍然可以编辑文件&#xff0c;但其实有一种类似于限制编辑的加密方式。在我们打开PPT文件的时候会有密码输入框。 如果我们没有输入密码&#xff0c;以只读方式进入&…

每日一题——LeetCode1403.非递增顺序的最小子序列

方法一 个人方法&#xff1a; 按题目要求&#xff0c;尽可能先取出nums里最大的值&#xff0c;这样才能满足子序列尽可能短且元素之和最大 var minSubsequence function(nums) {nums.sort((a,b)>a-b)let sum1nums.reduce((a,b)>ab,0),sum20,res[]while(sum1>sum2){…

libevent源码解析--evbuffer_chain,evbuffer,bufferevent,bufferevent_private

1.概述 前面我们已经分析了event&#xff0c;event_callback&#xff0c;event_base及监听套接字处理。 有了event_base我们便可实现事件监控&#xff0c;事件分发处理。 有了监听套接字处理&#xff0c;我们便可实现服务端监听&#xff0c;通过accept得到服务端通信套接字。 …

Linux---信号

前言 到饭点了&#xff0c;我点了一份外卖&#xff0c;然后又开了一把网游&#xff0c;这个时候&#xff0c;我在打游戏的过程中&#xff0c;我始终记得外卖小哥会随时给我打电话&#xff0c;通知我我去取外卖&#xff0c;这个时候游戏还没有结束。我在打游戏的过程中需要把外…