0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

10行Python代码写1个USB病毒

Android编程精选 来源:知乎 作者:DeepWeaver 2022-11-02 13:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序。查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到。但是,如果我想,比如,当一个usb插入时,在后台自动把usb里的重要文件神不知鬼不觉地拷贝到本地或者上传到某个服务器,就需要特殊的软件辅助。

于是我心想,能不能用python写一个程序,让它在后台运行。每当有u盘插入的时候,就自动拷贝其中重要文件。

如何判断U盘的插入与否?

9308187c-59eb-11ed-a3b6-dac502259ad0.jpg

首先我们打开电脑终端,进入/Volumes目录,这时候插入U盘,可以发现它被挂载在了这个目录之下,也就是说,我们只要在固定时间扫描这个目录,当这个目录有新文件夹出现的时候,很可能有U盘被插入了。

我的设计是这样的,用time.sleep(3)函数,让程序保持运行状态,并且每隔三秒查看一下/Volumes/目录,如果多出来文件夹,就将其拷贝到另外的文件夹。

9321d8e8-59eb-11ed-a3b6-dac502259ad0.jpg

就像标题所示,我们真的只用了10行(其实是11行,凑个整:)完成了这个“病毒”。我们可以发现usb中的目录,在插入半分钟后全部躺在了home目录下了。

如何选择性的复制文件?

刚刚我们写了一个很简易的脚本测试了一下这个想法的可行性,但是还是有问题。刚才之所以能把U盘中所有文件很快复制进去,是因为U盘中只有两三个文件,大小不超过15M。如果目标U盘中有很多电影,音乐,这些我们并不需要的文件,我们的程序就应该能跳过它们,仅仅选择一些重要的比如.docx比如.ppt文件,或者仅仅复制最近修改过的那些文件,或者排除所有大小大于5M的文件。我们可以用python做到吗?当然!

os.walk 递归文件夹中所有文件

http://www.runoob.com/python/os-walk.html

这里我放了一个别人的教程。大家可以大概了解一下,总之我大概理解是这么个东西。

还是举个例子吧。

我在某目录下创建了testwalk文件夹,里面有file123.txt三个文件,folder123三个文件夹,其中folder1中有文件file4.txt以及folder4

93341030-59eb-11ed-a3b6-dac502259ad0.png

现在我们来测试一下

9342c5b2-59eb-11ed-a3b6-dac502259ad0.png

root存放的是当前位置,它会把./testwalk/下所有的文件夹作为根目录,往下搜索

934a57dc-59eb-11ed-a3b6-dac502259ad0.png

单独查看 dirs

93537308-59eb-11ed-a3b6-dac502259ad0.png

单独查看 files

935c8268-59eb-11ed-a3b6-dac502259ad0.png

好了,我们现在需要递归usb文件夹,找到所有的file,查看大小,如果小于,比如3M,就拷贝进home,大于就舍去。

shutil模块

93a8cce0-59eb-11ed-a3b6-dac502259ad0.jpg

现在我们拿刚才的文件夹举例子,如果想把file1.txt拷贝到folder2:

93b2f256-59eb-11ed-a3b6-dac502259ad0.png

还有许多使用工具在shutil里面这里就不详述了。

os.path.getsize()判断大小

os.path.getsize(文件名)返回的是一个单位为byte的数值,如果用来查看文件大小,我们则需要手动写一个函数,将其换算成容易阅读的形式。

93bc6174-59eb-11ed-a3b6-dac502259ad0.png

这里我们只要选择文件大小小于3M的即可,3M = 3 * 1024kB = 3 * 1024*1024byte

93c77ffa-59eb-11ed-a3b6-dac502259ad0.png

结合shutil.copy2就可以把选定大小的文件复制进我们的目标文件夹了

如何指定文件类型

这里就需要正则表达式来帮助我们了。

正则表达式内容很多,《python核心编程》中用了整整一章来讲,所以我们也不深入了。下面是官方文档,感兴趣的可以看一下。

https://docs.python.org/2/library/re.html

如下,我们让指定文件后缀以及指定文件大小可以复制进我们的目标文件:

别忘了导入 re

93cf55c2-59eb-11ed-a3b6-dac502259ad0.png

用更加复杂的正则表达式可以更好地指定文件类型

根据修改时间筛选文件

93db1fba-59eb-11ed-a3b6-dac502259ad0.png

这时候我在目录下创建了一个文件叫做newfile

93eb79aa-59eb-11ed-a3b6-dac502259ad0.jpg

总之,对每一个文件进行修改时间的筛选可以只复制那些近期,或者特定时期修改或者添加过的文件,这个功能在特定情况下很有用。

总结

其实,标题这么起只是为了吸引大家注意,这就是一个小程序,也谈不上病毒。我更想通过这个例子,展示python对于文件处理的强大能力,引发大家的学习热情。以上实现都是基于macos,linux应该一样,windows稍加修改也可以成功。

-End-

最近有一些小伙伴,让我帮忙找一些面试题资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • U盘
    +关注

    关注

    7

    文章

    496

    浏览量

    65529
  • 函数
    +关注

    关注

    3

    文章

    4408

    浏览量

    66916
  • python
    +关注

    关注

    57

    文章

    4860

    浏览量

    89653

原文标题:10 行 Python 代码写 1 个 USB 病毒

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Termux中调试圣诞树Python代码

    在Termux中调试Python代码(以圣诞树立例)非常简单,核心分为环境准备、代码编写、运行调试三步骤,下面一步步教你操作: 一、环境准备(首次使用需做) Termux默认可能没有
    发表于 12-09 09:02

    LABVIEW 2023 Q1调用python后一直报错1671

    LABVIEW 2023Q1调用python后一直报错1671报错信息:PythonNode_AddTwoDoubles.vi中的打开Python会话Python returned
    发表于 11-12 09:51

    Python 给 Amazon 做“全身 CT”——可量产、可扩展的商品详情爬虫实战

      目标字段 & CSS 选择器   四、MVP:120 代码即可跑通 单文件脚本,支持异步并发 10 ASIN,自动重
    的头像 发表于 10-21 16:59 397次阅读
    用 <b class='flag-5'>Python</b> 给 Amazon 做“全身 CT”——可量产、可扩展的商品详情爬虫实战

    termux调试python猜数字游戏

    用termux做一猜数字游戏 下面是在Termux中创建猜数字游戏的步骤及完整实现方案,结合Python实现(最适配Termux环境): ? 一、环境准备(Termux基础配置) 1
    发表于 08-29 17:15

    termux如何搭建python游戏

    用VS Code编辑 - 版本控制:`git`管理代码,同步至GitHub/Gitee - 任务调度:通过`crontab`设置定时测试(如每分钟运行游戏脚本:`*/1 * * * * python
    发表于 08-29 07:06

    HarmonyOSAI编程编辑区代码

    理解的情况下进行代码。在编辑器中的内容较少时,AI可能无法有效理解用户的意图并生成相应的代码。 模型反馈需满足规则:光标上文10内,有
    发表于 08-21 15:43

    HarmonyOS AI辅助编程工具(CodeGenie)代码

    理解的情况下进行代码生成。在编辑器中的内容较少时,AI可能无法有效理解用户的意图并生成相应的代码。 模型反馈需满足规则:光标上文10内,有效代码
    发表于 07-15 16:15

    基础篇3:掌握Python中的条件语句与循环

    \"] for name in names: print(name) 以及一使用while循环的示例,用于计算从1加到100的总和: 复制代码 sum = 0 number = 1
    发表于 07-03 16:13

    fx3 sdk中的usb control center在win10以上系统中烧固件失败怎么解决?

    fx3 sdk1.3中的usb control center在win10和以上系统中烧固件失败,状态栏提示failed,在win7系统中烧写成功没有问题,请问在win10以上系统中怎
    发表于 05-08 06:00

    10分钟上手写代码,LuatOS协程轻松掌握!

    上手写代码~   1、协程是什么?——小白秒懂版‌    场景‌:小明一边写作业,一边等外卖: ‌普通做法‌: 5分钟作业→开门看外卖→再写5分钟→再去看外卖...(效率低) ‌协程做法‌: ‌协程A(写作业)‌:
    的头像 发表于 04-10 15:18 522次阅读
    <b class='flag-5'>10</b>分钟上手写<b class='flag-5'>代码</b>,LuatOS协程轻松掌握!

    零基础入门:如何在树莓派上编写和运行Python程序?

    是一种非常有用的编程语言,其语法易于阅读,允许程序员使用比汇编、C或Java等语言更少的代码Python编程语言最初实际上是作为Linux的脚本语言而开发的。Py
    的头像 发表于 03-25 09:27 1580次阅读
    零基础入门:如何在树莓派上编写和运行<b class='flag-5'>Python</b>程序?

    创建了用于OpenVINO™推理的自定义C++和Python代码,从C++代码中获得的结果与Python代码不同是为什么?

    创建了用于OpenVINO™推理的自定义 C++ 和 Python* 代码。 在两推理过程中使用相同的图像和模型。 从 C++ 代码中获得的结果与
    发表于 03-06 06:22

    Dockcase推出USB-C 10Gbps 扩展坞

    2 月 6 日消息,海外厂商 Dockcase 近日推出了一款七合一 USB-C 10Gbps 扩展坞,为数码设备用户带来了全新的解决方案。 从接口配置来看,该扩展坞十分丰富。它拥有 1
    的头像 发表于 02-07 18:02 1241次阅读

    使用Python实现xgboost教程

    使用Python实现XGBoost模型通常涉及以下几个步骤:数据准备、模型训练、模型评估和模型预测。以下是一详细的教程,指导你如何在Python中使用XGBoost。 1. 安装XG
    的头像 发表于 01-19 11:21 2258次阅读

    飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程之烧方法

    。 注意:使用USB OTG烧时,不能插入TF卡。 一、打开烧工具mfgtools所在文件夹:ELF 1开发板资料包\\06-常用工具\\06-4 烧
    发表于 12-19 09:09