【问题标题】:Writing raw data "signature" to disk without corrupting filesystem将原始数据“签名”写入磁盘而不损坏文件系统
【发布时间】:2012-03-28 13:16:38
【问题描述】:

我正在尝试创建一个程序,它将一系列 10-30 个字母/数字以原始格式写入磁盘(而不是操作系统将读取的文件)。也许为了让我的尝试更清楚,如果您要在十六进制编辑器中打开磁盘,您会看到 10-30 个字母/数字,但 Windows 资源管理器等文件管理器不会看到它(因为数据不是文件) .

我的目标是能够用一系列字符“签名”磁盘,并能够在我的程序中读取和写入该“签名”。我理解 NTFS 与其他文件系统一样使用 NTFS 标志对其分区进行签名,并且我必须小心不要将我的签名写入任何这些关键部分。

C++/C 中是否有任何库可以帮助我在低级别写入磁盘,我如何知道开始将签名写入的安全扇区?为了缩小范围,它只需要能够写入 NTFS、FAT、FAT32、FAT16 和 exFAT 文件系统并在 Windows 上运行。非常感谢任何链接或参考!

编辑:经过一些研究,USB 驱动器只允许 1 个分区,而没有应用会为用户带来更多问题的黑客技巧。不幸的是,这排除了“分区想法”。

【问题讨论】:

  • 你打算如何阻止文件系统覆盖你的“签名”?
  • 文件系统可以对磁盘做任何事情。这就是你拥有它的原因。事实上,磁盘的“top/start”通常是文件系统活跃的地方——它最基本的数据结构通常存储在那里。
  • 您不想这样做至少有几个原因。 (1) 没有“管理员”或“root”权限,这是不可能的。 (2) 即使您可以以这种方式写入磁盘,地球上的任何病毒检查器都会将您的程序标记为“邪恶”。 (3) 你的程序将如何适应文件系统的未来变化?
  • 好吧,如果您创建自己的整个 分区,那么您可以在其中放置任何您想要的内容(但您仍然需要管理员/root 访问权限才能执行此操作原始写入)。您是要“签署”disk 还是filesystem?有很大的不同。
  • @GregHewgill :您应该发布分区想法作为答案。迄今为止最干净的方式。

标签: c++ ntfs disk raw-data


【解决方案1】:

这是非常危险的,然而,零填充程序会做同样的事情,所以你可以用谷歌搜索如何在 C++ 中用零擦除你的硬盘。

最困难的部分是找到一个你知道的没有使用过且不会被使用的地方。

【讨论】:

    【解决方案2】:

    虽然我认为这通常是一个非常糟糕的想法,但显而易见的方法是将集群标记为“坏”,然后将其用于您自己的目的。

    问题:

    1. 将其标记为错误并非易事(在 NTFS 上,错误群集存储在名为 $BadClus 之类的文件中,但用户代码无法访问它(我什至不确定设备驱动程序是否可以访问它) )。
    2. 有多种程序可以扫描(并尝试修复)坏簇/扇区。由于我们甚至不相信这个真的很糟糕,所以几乎所有有效的工具都会发现它很好并重新投入使用。
    3. 无论如何,人们想到做这样的事情(例如将特定软件安装绑定到特定计算机)的大多数原因都很愚蠢。
    4. 您必须扫描所有“坏”扇区以查看其中是否包含您的签名。

    【讨论】:

    • (4) 实际上是主要的;尝试读取真正的坏扇区通常需要很长时间。磁盘在放弃之前重试了很多次。同时,磁盘通常不会执行任何其他 I/O。
    • @MSalters:很公平。已编辑。
    【解决方案3】:

    首先,正如评论者所说,你应该看看为什么你要这样做,看看这是否真的是个好主意。大多数试图绕过用户使用他/她的计算机的正常 UI 的应用程序在各种方面都是“糟糕的”。

    也就是说,您可以尝试找到一个众所周知的文件,该文件将始终在系统上,并且磁盘的块大小有一些松弛,然后写入该松弛。我不认为大多数文件系统会关心 slack 中的额外数据,如果文件恰好被重定位,它甚至可能会被复制(在磁盘级别复制整个块更有效)。

    只是一个想法;不知道它有多可行,但似乎它在理论上可以工作。

    【讨论】:

      猜你喜欢
      • 2014-10-24
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      相关资源
      最近更新 更多