草庐IT

拳打电脑管家,脚踢金山毒霸,3分钟用Python撸一个杀毒软件

士别三日wyx 2024-05-11 原文

「作者主页」:士别三日wyx
  此文章已录入专栏《Python入门到精通》
  2021最新版Python小白教程,针对0基础小白和基础薄弱的伙伴学习

        事情要从一次重保行动说起,由于活动还没结束,这里就先不透漏了。我抱着亲手做的康师傅红烧牛肉泡面,还没开始吃,就听见后面有人喊我名字,说是有个用户的电脑卡死了,要我过去看看。

        我问她能不能等我吃完这桶泡面再去,我已经3个小时没有吃过饭了,现在饿得没有力气走到用户那里。

        她说那是主任的电脑,你自己看着办吧。

        我向来不畏惧权贵,但九年义务教育告诉我,别人有困难的时候一定要去帮一把……

        我到现场一看,电脑上就只有一个空空桌面,连个鼠标都找不到,看来是电脑太卡了,软件图标都卡没了。

        我问用户之前有没有做过什么奇怪的事情

        他说没有,电脑一开机就是这个样子

        我好像明白了什么,拔掉电源重启,电脑开机以后,果然跟我想的一样,360、电脑管家、金山毒霸这三兄弟整齐的站在右下角,桌面上满满当当的全家桶,这不卡才怪呢。刚好电脑上没有什么重要文件,懒得一个一个删了,招呼来联想的同志给他重新做个系统。

        回去的路上我跟联想的同志吐槽:“这群流氓软件真是不讲武德,就知道欺负这种电脑小白。”

        联想的同志白了我一眼:“看把你能的,有本事自己写一个”


        我向来不喜欢斤斤计较,写杀毒软件只是出于爱好。

        首先,杀毒这个动作,本质上就是删除病毒文件,这还不简单,os模块就能干

import os
os.remove(r'E://python/病毒.txt')

        病毒软件肯定不是只有一种,因此我们需要准备一个病毒库,把文件扔到病毒库里匹配,匹配上了就把病毒文件删除

import os

病毒库 = ['病毒.txt']

path = r'E://python/病毒.txt'

if path in 病毒库:
    os.remove(path)
    print('已经删除病毒文件', file)

        当然,病毒查杀肯定不能只查一个文件,需要查询所有的文件,而目录下所有的文件,可以写个函数,递归查询

def getAllFile(path):
    # 获取目录中的所有文件并遍历
    files = os.listdir(path)
    for file in files:
        # 拼接路径,如果是目录则递归获取所有文件
        new_path = path + r'/' + file
        if os.path.isdir(new_path):
            getAllFile(new_path)

        既然是自己写的杀毒软件,那查杀什么地方当然要自己说了算,毕竟做网安这一行,很多工具本身就是病毒。写个input,自定义查杀目录

path = input('请输入需要查杀的目录:')
getAllFile(path)

完整代码如下:

import os

病毒库 = ['病毒.txt']

def getAllFile(path):
    # 获取目录中的所有文件并遍历
    files = os.listdir(path)
    for file in files:
        # 拼接路径,如果是目录则递归获取所有文件
        new_path = path + r'/' + file
        if os.path.isdir(new_path):
            getAllFile(new_path)
        else:
            # 如果是文件则查询病毒库,匹配成功则删除
            if file in 病毒库:
                os.remove(new_path)
                print('已经删除病毒文件', file)

path = input('请输入需要查杀的目录:')
getAllFile(path)

        先自己写一个病毒

        运行程序,输入需要查杀的目录

        好了,病毒已经被沙雕了

        小小病毒,可笑可笑。

        正当我伸着懒腰想着怎么加大查杀力度时,感觉手好像碰到了一个硬邦邦的东西,我突然意识到不对劲……

        原来是我两个小时前泡的那碗泡面,坨了!

书单推荐


本书从网络攻防实战的角度,对Web漏洞扫描利用及防御进行全面系统的研究,由浅入深地介绍了在渗透过程中如何对Web漏洞进行扫描、利用分析及防御,以及在漏洞扫描及利用过程中需要了解和掌握的基础技术。
全书共分10章,包括漏洞扫描必备基础知识、域名信息收集、端口扫描、指纹信息收集与目录扫描、Web漏洞扫
描、Web常见漏洞分析与利用、密码扫描及暴力破解、手工代码审计利用与漏洞挖掘、自动化的漏洞挖掘和利用、Web漏洞扫描安全防御,基本涵盖了Web漏洞攻防技术体系的全部内容。书中还以一些典型漏洞进行扫描利
用及实战,通过漏洞扫描利用来还原攻击过程,从而可以针对性地进行防御。

书名京东自营价格
Web渗透攻防实战https://item.jd.com/13471058.html92.20

        感谢大家的三连支持,我是三日,我们下期再见!

有关拳打电脑管家,脚踢金山毒霸,3分钟用Python撸一个杀毒软件的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  3. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  4. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  5. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  6. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  7. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  8. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  9. ruby - 一个 YAML 对象可以引用另一个吗? - 2

    我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的ruby​​yaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir

  10. ruby - Rails 关联 - 同一个类的多个 has_one 关系 - 2

    我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下

随机推荐