怎么样通过前端手段拿到已经扔到回收站里的文件数据?

前言

先祝大家国庆快乐!

近期需要获取到,已经移入回收站的文件的原始路径,对这方面进行了一些研究。

研究过程参考了参考资料[1]的内容,补充其未提到的中文乱码的解决办法。

回收站里的存的是什么

众所周知,回收站像是一个特殊的文件夹。但是特别的在于,表面看上去他的文件名是可以重复的,这也意味着他有一套独特的逻辑去存储文件。

当一个文件被删除之后,Windows 将会自动将其重命名之后再放到一个自己维护的一个文件夹结构里去(即X:$Recycle.Bin)

因此,在 Windows Explorer 下看起来是同名的文件,在回收站的文件系统中实际存储的文件名不重复。

摘自参考资料[1]

我们进入这个目录,不论是cmd还是explorer,都发现他是一个空白的目录

在这里插入图片描述

在这里插入图片描述

实际上,window会创建一个隐藏的目录,用SID作为名称,里面存放着回收站文件的数据,我们可以用whoami /user指令拿到SID。

在这里插入图片描述

我们在$Recycle.Bin下执行cd 上面拿到的SID即可进入这个隐藏目录,并通过dir拿到所有文件的信息。

在这里插入图片描述

这样做的原因是为了进行权限控制,来避免一个普通用户(非管理员)可以查看、读取或删除其它用户的回收站文件。摘自参考资料[1]

如上图,我们会发现,有多组以$I$R开头的同名文件

在这里插入图片描述

每当删除一个文件进入回收站,都会生成两个文件,分别$I$R开头。

$R 开头的文件中存储着文件的实际内容,而$I 前缀的文件存储着这个文件在被你丢进回收站之前的文件名,路径,时间等信息。尽管没有办法证实,但是你可以猜测R代表 Recycled,而 I 代表 Information。摘自参考资料[1]

信息还原

我们先使用命令将目标的$I文件拷贝出来,使用hexdump打开,内容如下

在这里插入图片描述

这是一个文件名为新的空白文件,对应上上图的$I934H4F文件)

依稀能看到后面的内容就是文件路径,但是中文似乎并没有直接支持。

如果目标文件不可能是英文文件名,其实到现在已经可以结束研究了,在浏览器中FileReader都可以直接读取这个文件,经过处理后就可以拿到原始路径:

在这里插入图片描述
但是对于中文,我们需要一些其他的办法。

兼容中文

经过观察,很容易发现,它是由两个字节表示一个字符,包括英文

在这里插入图片描述

因为英文不需要占满两个字节,所以有一个是00

照这个思路向下寻找一个两字节且不是00的组合,很容易发现
在这里插入图片描述

此处有一个B065,而65B0正是新字的16进制ASCII码值,由此我们可以推断出回收站以小端存储的,我们只需要两两交换再拼接,即可得到正确的16进制ASCII。

(从上面的00其实也可以初见端倪,笔者愚钝未能提前发现)

基于上面的思路,简单的写一段node:

在这里插入图片描述

运行代码,输出如下:
在这里插入图片描述

再试一个word文件:(也就是上面的$IPMD0NG.doc
在这里插入图片描述

其在回收站的属性如下图

在这里插入图片描述

可以发现中文兼容良好

关于源文件的修改时间、大小等信息可参照参考资料【1】,这里不再赘述。

参考资料

[1] https://www.zhihu.com/question/272210371/answer/367326483

广告

我是掘金用户2921546326657 给个关注好不好 T_T
https://juejin.cn/user/4336943126822024

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笨笨2019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值