在windows下,当我们删除了一个文件至回收站后,那么它实际去哪里了呢?当然是去回收站….. 废话….
Where ?
首先,我在桌面新建了一个文件R.txt
,而后删除之到回收站。接下来,让我们看看它移动去哪里了。
管理员权限打开cmd.exe
,试着按照以下步骤敲敲:
-
cd C:\$RECYCLE.BIN
-
继续
cd
, 然后Tab
、Tab
(或许不止2次), 然后会有类似一个这样的目录S-1-5-21-295736274-4050683623-1903285775-1001
即 windows的安全标识符 SID。当然,如果你的主机有多个用户的话,显然会有多个SID. -
不过,可以通过
whoami /all
查看之. -
DIR
命令展示一下列表,类似如下内容:1 2 3 4 5 6 7 8
2022/09/03 14:11 80 $I5P1J1G.txt 2020/09/04 21:13 <DIR> $R0Y3S9Z 2022/08/29 22:34 20 $R5P1J1G.txt 2021/07/22 21:39 <DIR> $RAGSQIS 2020/06/13 19:18 <DIR> $RIMKTRB 2020/06/05 22:54 <DIR> $RJJH8LK 2022/08/14 15:24 <DIR> $RO3MVMY 2022/08/14 15:15 <DIR> $RVYVD5U
如上,仅仅通过看,似乎无法解开这些看似规律又像乱码的文件。不过,上面有两个txt
后缀的文件在时间上和我们的删除时机几乎吻合,很难让人不猜测它们之间的是否存在相关性。不如,我们随便cat
一下看看里面是个什么玩意。
|
|
???这不是我们之前删除的文件嘛!以及C:\Users\HP\Desktop\R.txt
原路径嘛!
get it, 我们找到它了!
$RXX
、$IXX
?
Recycle Bin has 2 major formats, which can be roughly divided as “before Vista” and “after Vista”.
引用 Rifiuti2 对此文件结构的相关介绍,具体如下。
INFO2
file
虽然广为人知的是 INFO2 文件,但实际上它在 Windows 95 和 NT 4.0 中被命名为 INFO。 此隐藏文件包含所有已删除项目的相关元信息。 它的位置随文件系统的不同而不同(以C盘为例):
-
对于FAT16/32文件系统,它们位于
C:\RECYCLED
-
对于NTFS文件系统,它们位于
C:\RECYCLER\<sid>
从 Windows 98 开始,有关永久清除项目或恢复项目的元数据将保存在 INFO2 中。
有关这种旧格式的研究信息已广为流传 1,但它们通常仅涵盖 Windows XP/2003,这与早期的 Windows(95、98、ME 等)略有不同。
关于INFO2的格式,转参考https://abelcheung.github.io/rifiuti2/assets/Forensics_Recycle_Bin.pdf
$Recycle.bin
folder
对于这种格式,回收站文件夹位于 C:$Recycle.bin<sid>(以 C 盘为例)。 回收文件的删除信息不存储在单个文件中。
相反,每个回收文件都有自己的附带索引文件,名称非常相似。例如,上述中我们删除的txt文件,其信息是对应的即$R文件和$I文件是一一对应的:
删除的文件 | 索引 |
---|---|
$R5P1J1G.txt | $I5P1J1G.txt |
How to Parse ?
使用 hexdump.exe 分别查看一下两个信息文件,很显然R文件就是源文件的一个拷贝。所以,更值得我们关心的是I文件内容。
|
|
很显然,如上,对于源文件的路径实际上已经很清晰了,只需要稍微再调整一下,便可得到原路径。因此,为了更准确的得到与源文件有关的信息,需要结合一下Rifiuti2源码剖析一下。
|
|
源文件大小起始偏移为0x8
,长度为long long(小端)):
|
|
即文件大小为0x14
即80bits
。
文件的删除时间为long long共64位(小端):
|
|
即01d8 bf5b f669 60e0
,十进制为133,066,590,704,460,000
,单位为100ns.
转换为UTC:
$(133066590704460000 - 116444736000000000LL) / (10000000) = 1662185470$
时间戳转一下日期 2022-09-03 14:11:10
,即得到文件的删除时间。
文件名的起始偏移0x1C
,因此得到文件名:
|
|
又,windows的编码方式为unicode(准确的说法应该是UTF-16LE).所以,一个字符的表示共16位,比如C
的编码为0043
。此处的演示均为英文字符,因此很容易就能转为ANSI字符。但是,当路径含有中文或其他字符时,情况又不一样了,上述的16位编码仅仅表示一个字符的码位存储,比如中
字的码位为4e2d
即0100 1110 0010 1101
.当以UTF-8的格式编码时,根据以下规则,那么:
|
|
0800 < 4e2d < FFFF
落在第三行的规则,即
|
|
因此,中
在代码(UTF-8编码)的里的存储值为E4B8AD
。由此,可以得到源文件的路径为:
|
|
Tools
Rifiuti2 :是一个用于分析 Windows 回收站 INFO2 文件的工具。 Rifiuti2可以提取文件的删除时间、原路径和大小以及被删除的文件是否已被永久删除。