在日常生活中,我们使用app时,经常会遇到软件弹个窗获取“读取设备中的照片及文件”的权限。这很平常,一般都会同意该权限请求,拒绝的话一些换头像、保存图片的功能就不能够使用了。但是当我们同意该权限请求时,软件内部到底读取了哪些文件,有没有越界偷偷读取不相关的内容,我们是无法感知的。
所以这里我就利用这一点做一款电脑程序,当双击点击程序时,使其隐藏图标,后台运行。然后扫描磁盘上各分区的文件夹信息,传到服务器上,最后我们再进一步发出指令,获取该电脑上的任意文件到我们的服务器上。达到窃取目标电脑重要文件的目的。
其实这个实现起来挺简单,相信用C/C++编写这样一个功能的软件肯定很好实现,虽然我对于C/C++开发电脑程序一无所知。所以在这里我就用Python开发客户端,Java开发服务端。
先看看效果图。双击程序,看似是没反应的,实际上查看任务管理器就能够看到该进程服务已经后台运行着了,而且双击之后的1秒内,服务端也已经打印了获取到的目录信息,还是非常快的。
客户端
首先当脚本运行时就开始读取磁盘的分区及文件夹目录信息
1 | def get_disklist(): |
然后通过消息接口发送到服务端
1 | def seedMsg(message): |
接着循环读取服务端的配置接口,等待返回接下来要读取的信息。该配置接口就是配置的要读取哪个文件/文件夹,是文件是就通过上传接口上传到服务端。是文件夹时,就通过发送消息接口发送该目录下的信息到服务端。为了不重复发送数据到服务端,可以设置一个全局变量link_conf
存储接口信息,本次接口和上一次接口的信息一样就不发送数据,否则就发送。
1 | def readNetConf(): |
上传文件的方法
1 | def uploadFile(_path, _file_name): |
读取文件夹的方法
1 | def readFile(_path): |
最后把这些方法整合起来。通过pyinstaller
模块配置下参数,打包成可执行的exe程序。
服务端
服务端也很简单,通过客户端的代码就能够发现一共就3个接口。
接收文件的接口
1 |
|
返回配置信息的接口,从数据库读取配置信息
1 |
|
接收发过来消息的接口
1 |
|
这里存储文件夹目录的表设计可借鉴递归模式。id、文件夹名称、父文件夹id、创建时间…
最后把java程序打包,扔到服务器上运行,当有小鱼双击程序时,服务端就会收到磁盘的目录信息。然后数据库根据目录信息配置下要读取文件夹路径。就可以一步步的窃取目标的文件信息了。