大约 1 年前,我使用 Windows 10 计算机在记事本文本文件 (.txt) 中保存了一些代码。但是,我删除了部分代码,并使用新的 c++ 代码补丁保存了文本文件,以为这没什么大不了的。但是,我刚刚意识到,我在文本文件中删除的代码实际上非常重要,我需要找回它,因为 Arduino C++ 代码包含一条注释 [//such as this],其中包含一个朋友/同事的重要电话号码。幸运的是,我仍然有 SanDisk SSD,并使用 Linux 计算机找到了文本文件的文件位置,使用我在 Altex 购买的 SATA 转 USB 加密狗将 SSD 驱动器连接到 Linux 树莓派计算机。不幸的是,在尝试在 KaliOS 上使用各种 Linux 恢复/取证软件(如十六进制编辑器)多次后,我似乎无法获取文本文件的版本历史记录以将其恢复到以前的版本……即使使用 System32 上的十六进制编辑器进行搜索并尝试获取 Notepad.exe 日志文件,此外还检查了 C:/users/username/AppData/local/Microsoft/InputPersonalization/TextHarvester 中的键盘记录,看看它是否奇迹般地存储了击键。我只能调出当前版本。此外,这也是在我尝试在驱动器启动的同一台 Windows 计算机上使用版本历史记录之后,通过右键单击文件并在文件资源管理器上检查属性、版本历史记录等。
我几乎尝试了所有方法,[包括版本历史],包括使用多个 Windows 10 计算机取证工具(如 Paladian/Samurai 和 DiskDrill)来获取丢失的文件版本,但都没有成功。还有什么我还没想到的技巧可以尝试吗?一年来,连接 SSD 的计算机已经打开和关闭了几次,但我一直很小心,不再删除任何文件或经常使用它,以防止隐藏数据被覆盖。我知道它就在某个地方,如果 FBI 获得了我的计算机,他们很容易就能使用 FLASH 硬件分析仪在瞬间恢复该文件,但我需要能够只用那个文件做同样的事情,而不会花太多钱。最后,我确实有一个 Arduino UNO,包括一个带有 128x64 OLED 屏幕的 USB Shield,所以也许我可以尝试对 usb 协议进行位拆解,以某种方式通过 SATA/USB 转换器分析存储在 SSD 中的纯原始二进制数据,以获取隐藏的数据。谢谢,任何事情都可以帮助。
答案1
我知道它就在某个地方,如果 FBI 拿到了我的计算机,他们就能轻松地使用 FLASH 硬件分析仪在很短的时间内恢复该文件
据我所知这是一个神话。
让我们首先分析一下当您(部分)覆盖文件时在文件系统级别会发生什么。文件系统驱动程序有两个选项,我见过这两种情况(如实际观察到的那样):
- 文件保存到与原始文件相同的群集。
- 新的簇被分配给该文件。
请注意,文件系统中的簇静态映射到 LBA 扇区地址,因此我们在簇级别执行的任何操作都会发生在映射到簇的扇区上。
如果 1 则如果:
传统的旋转驱动器:那么在传统的旋转驱动器上,恢复文件内容的机会就降为零。与某些人的看法相反,没有办法从某种磁性残留物或其他东西中恢复以前的数据。--> 无法恢复。
一些基于NAND闪存的驱动器:那么就会发生两件事(我会尽量避免这个话题为什么SSD 按照其方式做事)。
a) 如果我们假设一个旧的非常简单的控制器/固件,那么映射到我们已删除的数据的 NAND 页面将被擦除(因为它们需要在页面重新编程之前进行),并且数据被写回到同一页面。-->数据无法恢复。
b) 现代闪存驱动器会将新的物理 NAND 地址重新分配给新保存的数据,同时将原始 NAND 地址标记为“将被垃圾收集器擦除”。--> 因此,理论上,这里有一个恢复数据的机会。但是,先前分配给现在已删除的数据的 NAND 已从 LBA 取消映射。这意味着传统的文件恢复(包括取证工具)将不再能够从这些区域恢复数据。
使用更先进的技术从基于 NAND 闪存的驱动器恢复数据
基本上有两种方法,第一种方法是控制器/固件 A 的配合,第二次尝试完全绕过控制器 B。
对于这两种方法,我们只能在垃圾收集器尚未擦除数据的情况下恢复数据,这只是时间问题。垃圾收集通常发生在空闲时间,但在某些情况下可能随时发生(如果由于写入的数据多于可用页面而需要擦除页面,则控制器别无选择,只能让用户等待并擦除页面*)。
我们需要假设,如果 SSD 接通电源,就会发生此类后台处理。因此,即使您在删除一些数据后不使用 SSD,即使您断开数据线,只要驱动器接通电源,这些进程就会运行。
A:Acelab 的 PC3000 等工具可以与一些(远远不是) SSD 并说服驱动器的固件授予对非 LBA 映射 NAND 内存的访问权限。通过这样做,您可能能够恢复已删除的数据。
请注意,类似的过程也适用于 SMR 硬盘!
如果 PC3000 不支持该控制器(换句话说,固件没有为我们进行逆向工程),那么我们将面临一个复杂的芯片嗅探、故障等过程,试图破解固件并自己完成所有这些工作。一种趋势是,SSD 的设计人员趋向于越来越严格,而且随着时间的推移,这种固件储备工程路线变得越来越困难。换句话说,从文本文件中获取电话号码需要付出巨大的努力,而据我们所知,文本文件可能已经不存在了。
乙:使用方法 2,我们从驱动器中移除 NAND 芯片,并尝试对控制器用于将数据写入 NAND 芯片的算法进行逆向工程。一般来说,这只是从 SD 卡、USB 闪存驱动器以及一些非常旧的 SSD 型号中恢复数据的可行方法。
我的 NAND 读取器 + 软件从二进制 NAND 转储中恢复数据:
我们不能将此方法应用于现代固态硬盘的主要原因是加密:无论你是否要求,现代固态硬盘都会对数据进行加密。很多人认为,只要你不设置密码,数据就不会被加密,但设置密码仅仅意味着它会要求你输入密码才能访问数据,如果没有密码,它只会允许你访问数据。
幸运一击
由于 NAND 闪存的工作方式以及垃圾收集器的工作方式,存在一种我们称之为“写入放大”的现象。这意味着如果我们写入一个扇区的数据,实际上这可能会导致该扇区被多次写入驱动器。甚至在写入扇区的数据之后,例如垃圾收集器可能会复制该扇区并将 LBA 扇区地址重新映射到新的物理地址,以合并一个可以实际擦除的擦除块。研究表明,某个时候一个扇区最多可以存在 10 个副本。
从理论上讲,这意味着如果我们能够通过绕过固件等方式访问 RAW 数据,则已删除的数据可能仍然存在。当然,这假设我们处理的不是加密数据。
无论如何,CIA/FBI 或任何三个字母的机构能够连接驱动器并毫不费力地访问我们早已删除的数据只是一个神话。
恢复文本文件
如果文件的内容仍然存在于 LBA 空间内,那么即使文件系统不再引用它,您也应该能够找到它。我通常使用 HxD 并在驱动器中搜索我知道存在于文本文件中且有点独特的短语,以避免太多误报。
如果检测到短语,则使用 ascii 列来定位文件的边界,选择该短语并复制到新文件中。
如果您从文本文件中知道一个阶段但无法找到它,那么除非尝试我上面提供的高级方法,否则无法恢复该文件。