当前位置: 首页 > 科技观察

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

时间:2023-03-20 22:59:27 科技观察

大家好,我又回来了。昨天上厕所的时候突发奇想,当你插上usb的时候,它能不能自动执行usb上的程序。查了一下,发现只有Windows才有,具体也可以搜索(搜索关键字usbautorun)。但是,如果我想,比如插入usb后,在后台自动将usb中的重要文件复制到本地或上传到服务器,而无人察觉,则需要专门的软件辅助。于是心里想,能不能用python写个程序,让它在后台运行。每当插入U盘时,都会自动复制重要文件。如何判断U盘是否插入?首先我们打开电脑终端,进入/Volumes目录,此时插入U盘,可以发现挂载在这个目录下,也就是说我们只需要定时扫描这个卷目录即可,当这个目录下出现新的文件夹时,很有可能插入了U盘。我的设计是这样的,使用time.sleep(3)函数让程序保持运行状态,每三秒检查一次/Volumes/目录,如果文件夹多了就复制到另一个文件夹。正如标题所说,我们真的只用了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现在我们测试一下,root存放的是当前位置,会把所有的./testwalk/下的文件夹作为根目录,向下搜索并分别检查目录和文件。现在我们需要递归usb文件夹,找到所有文件,并检查大小。如果小于,比如3M,就复制进home,如果大于则丢弃。shutilmodule下面我们以刚才的文件夹为例。如果想将file1.txt复制到folder2:shutil中还有很多其他的工具,这里不再赘述。os.path.getsize()判断大小os.path.getsize(filename)返回一个字节值。如果用于检查文件大小,我们需要手动编写一个函数将其转换为易于阅读的形式。这里我们只需要选择小于3M的文件大小,3M=3*1024kB=3*1024*1024byte结合shutil.copy2就可以将选择大小的文件复制到我们的目标文件夹中。这里需要如何指定文件类型正则表达式可以帮助我们。正则表达式比较多,《python核心编程》用了一整章,就不深入了。下面是官方文档,有兴趣的可以看看。https://docs.python.org/2/library/re.html如下,我们允许将指定的文件后缀和指定的文件大小复制到我们的目标文件中:不要忘记导入re并使用更复杂的regularexpressionstochange指定文件类型,根据修改时间过滤文件。这时候我在目录下新建了一个叫newfile的文件。简而言之,可以过滤每个文件的修改时间,只复制最近修改或添加的文件,或者在特定时间段内。此功能在特定情况下很有用。总结其实标题只是为了吸引大家的眼球而已。这是一个小程序,不是病毒。想通过这个例子来展示python处理文件的强大能力,调动大家的学习热情。以上实现都是基于macos的,linux应该也一样,windows稍加修改即可成功。