十行代码使用Python写一个USB病毒


Posted in Python onJune 21, 2019

大家好,我又回来了。

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

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

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

十行代码使用Python写一个USB病毒

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

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

十行代码使用Python写一个USB病毒

就像标题所示,我们真的只用了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

十行代码使用Python写一个USB病毒

现在我们来测试一下

十行代码使用Python写一个USB病毒

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

十行代码使用Python写一个USB病毒

单独查看 dirs

十行代码使用Python写一个USB病毒

单独查看 files

十行代码使用Python写一个USB病毒

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

shutil模块

十行代码使用Python写一个USB病毒

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

十行代码使用Python写一个USB病毒

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

os.path.getsize()判断大小

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

十行代码使用Python写一个USB病毒

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

十行代码使用Python写一个USB病毒

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

如何指定文件类型

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

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

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

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

别忘了导入 re

十行代码使用Python写一个USB病毒

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

根据修改时间筛选文件

十行代码使用Python写一个USB病毒

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

十行代码使用Python写一个USB病毒

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

总结

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

Python 相关文章推荐
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
centos6.4下python3.6.1安装教程
Jul 21 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
利用python将图片转换成excel文档格式
Dec 30 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
python操作日志的封装方法(两种方法)
May 23 Python
python的set处理二维数组转一维数组的方法示例
May 31 Python
Python字符串的一些操作方法总结
Jun 10 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 Python
python爬虫selenium模块详解
Mar 30 Python
Python pandas DataFrame操作的实现代码
Jun 21 #Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 #Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 #Python
python之当你发现QTimer不能用时的解决方法
Jun 21 #Python
Pandas库之DataFrame使用的学习笔记
Jun 21 #Python
pyqt5之将textBrowser的内容写入txt文档的方法
Jun 21 #Python
pandas 数据索引与选取的实现方法
Jun 21 #Python
You might like
用libtemplate实现静态网页生成
2006/10/09 PHP
php小偷相关截取函数备忘
2010/11/28 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
2015/06/18 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
2020/05/26 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
彪马英国官网:PUMA英国
2019/02/11 全球购物
思想政治自我鉴定
2013/10/06 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
中层干部培训方案
2014/06/16 职场文书
教师读书笔记
2015/06/29 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers