十行 Python 代码写一个USB病毒


十行 Python 代码写一个USB病毒

文章插图
文 | 我爱学Python@简书 编辑 | EarlGrey
推荐 | 编程派公众号(ID:codingpy)
昨天在上厕所的时候突发奇想 , 当你把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病毒


推荐阅读