【问题标题】:Authorize USB drive授权 USB 驱动器
【发布时间】:2014-06-16 10:13:22
【问题描述】:

有什么方法或建议如何在C#编写的程序中准备和授权USB驱动器?我不想准备某种白名单,但以某种方式检测到 USB 驱动器是由我准备的。 USB 驱动器将用于更新我的程序。

检测隐藏文件和文件夹不是解决方案,因为用户总是可以显示/删除所有这些隐藏的东西。

此外,程序必须检测 USB 驱动器在 Windows >= XP 上已获得授权。

编辑

USB 驱动器应该像普通 USB 一样在每个操作系统上工作,除了它应该在我的程序中被授权的东西。

【问题讨论】:

  • 我不确定你是否可以在 C# 中通过调用低级驱动程序来做到这一点,但你可以考虑磁盘 FAT、MBR 等的基本结构。例如,你可能是可以使用Host Proctected Area
  • 或者您可以尝试对驱动器进行分区,将“签名”数据扇区放入其中一个分区并将其标记为没有标准磁盘结构(例如 FAT32 以外的其他结构等)。再说一次,这不是我想说的在 c# 中很容易做到的事情。
  • 致那些对我的问题投反对票的人:请告诉我你为什么这样做

标签: c# windows usb usb-drive


【解决方案1】:

基于一些Mike of SST advices,我设法准备了一个让我满意的解决方案。它不直接使用 C#,但可以使用该语言进行管理,

解决方案中的步骤:

  1. 在您的 USB 驱动器中创建尽可能小的未分配分区(在我的情况下为 7.8MB)
  2. 根据 USB 驱动器信息创建一个散列字符串并将其写入该未分配分区。

在该解决方案中,用户根本不知道该 USB 是否被授权,他可以格式化一个可见分区并在其上写入所有内容。即使复制该驱动器的映像也不会授权复制的 USB 驱动器。

使用 dd for Windows 我可以读取和写入该哈希值,并且可以直接从 c# 运行该进程。

【讨论】:

  • 你把更新文件放在哪里?因为到目前为止,在我看来,您设法创建了一个不可伪造的数据包,但没有打开盖子,因此任何人都可以放入或取出某物,而您的程序只会购买它。
  • 老实说,我放置更新文件的文件夹并不重要。问题在于授权 - 而不是文件的位置。即使用户会放置一些无效的更新文件,我也会通过在未分配分区上通过它的散列唯一编号识别 USB 驱动器来知道它。检测损坏的文件只是另一个问题。
  • 然而,就授权 USB 驱动器而言,我不得不承认您已经找到了一个不错的解决方案,至少看起来是这样。
  • 感谢您批准我的解决方案并感谢您提出的所有建议。
【解决方案2】:

您为什么要尽量避免使用特殊文件?您放置一个隐藏的 txt 文件,其中包含生成的哈希键。此哈希是根据您的 USB 驱动器制造商序列号和密钥(您的程序具有)生成的。当您将 USB 驱动器放入计算机时,您的程序会从文件中读取哈希密钥并将其与程序计算的结果进行比较。如果它们相同,则您授权 USB 驱动器。您只是不授权没有此文件的 USB 驱动器。如果你想让用户无法删除这个文件,你应该使用隐藏分区,但它是更复杂的解决方案。

【讨论】:

  • 该解决方案中的问题是用户可能会意外删除此文件并失去获得授权 USB 的可能性
【解决方案3】:

如何加密整个驱动器或在其上放置加密文件/容器?密码可以嵌入到您的程序中。 (这不是最安全的解决方案,但对您的目的来说是一种简单的解决方案。)

【讨论】:

  • 添加“特殊”文件/文件夹不起作用,因为它很容易删除。我正在考虑一个解决方案,让用户不知道这个 USB 是经过授权的,或者只是让他们想知道为什么。
猜你喜欢
  • 2012-03-14
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 2011-03-24
  • 2014-07-01
相关资源
最近更新 更多