我正在尝试在 ntfs 分区上实现反取证工具。我需要保留 1GB(在精确的物理位置)的空间不被文件系统写入。我的想法:
- 尝试在特定位置创建一个 1gb 文件(如何?),以便将其视为已使用
- 尝试手动编辑 MFT 并插入一个虚假条目以将该区域标记为已使用(如何?)
关于如何实现这两个想法或其他的任何建议?
这是危险的,需要一些实验。
手动,您可以使用BAAD在 MFT 中人为创建文件记录!记录开头的幻数(而不是FILE0),使其 Data 属性非常驻,并指向数据运行列表中的该位置以获得所需的集群数。现在您必须在 $Bitmap 文件中用 1 标记这些集群。您还必须将集群添加到 MFT 中的 $BadClus 文件中。
MFT 中的 $Bitmap 文件是一个具有卷大小的结构,每个位代表卷中的每个簇,从 0 到簇中卷的大小。如果该位为0,则对应的簇空闲,否则被占用。
如果您可以在没有 Windows 认为卷已损坏的情况下完成此操作,这意味着您已经从 NTFS、Windows 资源管理器和其他遍历卷查找文件的 Windows API 函数的角度正确完成了所有操作。任何事物。但是,大多数取证工具可以自己解析原始卷,并专门寻找这些差异。但是您的文件将受到保护,不会被写入(除非驱动器被重新格式化)。
欺骗某种取证工具的最佳选择是创建一个常规文件,您可以将其挂载为重解析点或驱动器,但您必须创建自己的 API 来加密/解密该文件并将其挂载为与文件系统无关的卷它可能包含。该工具将看到该文件,但它会被加密。
直接编辑 MFT 是非常危险的。文件系统真的很喜欢负责,因为它缓存了东西)。
您可以通过使用 FSCTL_MOVE_FILE 将 1Gb 文件的任何部分移动到您想要的磁盘位置来实现您想要的。
请注意,这种方法有一个复杂性和一个问题。复杂之处在于您需要移动到已经没有文件数据的地方,这意味着您必须先清除目的地。这意味着您必须阅读位图以找出要将其移动到的位置。听起来像是碎片整理程序,是吗?
说到碎片整理程序,一旦您创建了此文件,任何运行的碎片整理程序都可能将其移出首选位置。请注意。