如何伪造硬盘的容量?


90

我当时在读有关神奇的中国驱动器的文章。怎么做?这篇文章讨论了“循环模式”,并且有评论建议让操作系统使用其他控制器。

我去买了其中一台设备,尝试了一下,并以广告形式工作(已满时覆盖数据),尽管当我格式化它时,它开始显示其“真实”容量。

如何实现的?



14
我认为这个问题最好命名为“如何伪造闪存的容量”,因为它实际上是在伪造闪存驱动器而非磁硬盘上的存储量。
约瑟夫·厄尔

我想要其中一个中国魔术驱动器,但我不会飞往中国去获得一个!
摩押

+1。在“热门问题”视图中看到此问题“升至图表顶部”之前,我从未听说过此问题。
jprete 2011年

呵呵..谢谢:)当我对一个带有2个巨大螺母螺栓的“硬盘”感到好奇时,我没想到会有这样的回应
Rohan Monga

Answers:


59

FAT32有一个具有可用空间的主表。您可以十六进制编辑该主表以显示任何数量的可用空间。我已经有一个大小为3.7 GB的软盘了。


4
是的,您可以篡改FAT,但是也有一些方法可以修改微控制器以欺骗OS。Windows确实确实会反复格式化磁盘,从而错误地将其标识为大于实际大小。通常,它们具有某种内置算法来循环闪存芯片,使得操作系统实际上能够创建有效(外观)的主表。
TheCompWiz

当我开始四处摸索并弄乱了主表和控制器时,我希望随之而来的还有更多问题:)
Rohan Monga

2
希望详细说明在哪里可以找到主表或如何对其进行编辑?
Ivo Flipse,

2
我很乐意看到有关此问题的一些文档,我尝试通过编程来复制它,但无法让操作系统愚弄它的大小。看到这个线程这里,看看有什么我试图stackoverflow.com/questions/7482920/...
cromestant

我有一本使用Norton Commander和hexedit更改其报告分区大小的杂志。太糟糕了,我已经失去了杂志。
Barfieldmv

19

硬件未修改-只是修改了文件表以欺骗操作系统。在格式化期间,文件表将被擦除,因此将还原真正的容量读数。

如果您去不知名的卖家,那么您在任何时候都可能会被这类廉价的假冒闪存驱动器或什至在中国的硬盘驱动器所困扰。


11
去年,我从中国在Ebay上以15英镑的价格购买了据推测的64Gb记忆棒。我应该知道,价格不会提供容量。实际上,它是4Gb,标签上刻有假冒的前导“ 6”。文件系统的加密方式意味着您不会注意到问题,除非将4Gb 以上的文件复制到设备上,此时新文件才开始覆盖现有文件的一部分。我永远无法重新格式化它,因此至少可以将其用作4Gb记忆棒。
FumbleFingers 2011年

7
@FumbleFingers,是的,卖家通常会弄乱芯片信息,因此您不能直接格式化,但必须这样做:1.使用ChipGenius软件+大量生产工具来修复芯片信息。2.使用低级格式化工具执行实际格式。这是一个指南:agnipulse.com/2010/04/how-i-fixed-a-fake-64gb-usb-drive
KoKo

谢谢!也许我毕竟可以从中获得一些价值(如果我还没有把它丢进垃圾箱的话)。
FumbleFingers 2011年

6

在看到您的消息之前,我确定它是一个不同的控制器-使用修改后的控制器,您可以将所需的信息告诉操作系统。但是考虑到格式会修改此行为,这意味着在文件系统级别也会发生某种欺骗行为。这提出了两个选择:

  • 这是对控制器的修改,在格式化后根本无法使用,因为它取决于文件系统的修改(在我看来,这种可能性更大)。

  • 还有另一种方法无需硬件修改即可执行此操作,例如,将空闲块链接列表修改为循环(我对FAT32的细节还不熟悉,无法确定是否可行-可能几天后再检查一次)否则先做...)。

编辑:天真地假设正在使用FAT32,更可能的情况是使用了一个不同的文件系统,该文件系统无意中允许使用这种循环可用空间管理技巧(只要操作系统也支持该文件系统,它就会对用户几乎不可见)。这使得看着这样的设备更加有趣...


2
我确信这是文件系统。这些驱动器未进行物理修改。
crasic 2011年

4
但是我会买这么小的东西..用于测试目的:)
Greenleader

1
如果要使用自定义或修改的控制器,那么您将失去大量购买廉价控制器的价格节省。因此,对我来说,它似乎完全是在文件系统级别完成的-与替换/修改硬件相比,使用dd进行原始写入更快捷,便宜且容易。
kaerast 2011年

6

这是在密钥上(使用Linux)创建1,000,000,000,000字节(1 TB)磁盘的方法:

  1. 创建伪造的格式化1 TB磁盘:

    mkdosfs -C  temp_file 1000000000
    
  2. 检查它确实发生了

    ls -lh temp_file
    
  3. 连接您的DoK并检查其安装方式:

    mount
    
  4. 查找设备名称,例如/dev/sdb1 (如果在此处输入错误,则可能会破坏连接到系统的其他磁盘,因此请小心!)

  5. 卸载:

    sudo umount /dev/sdb1
    
  6. 找出我们的FAT表的大小:

    ls -s temp_file
    

(第一个数字是大小(以千字节为单位))

  1. 复制到DoK

    echo "head -c [size_from_above]K temp_file > /dev/sdb1" | sudo sh
    
  2. 吓坏你的朋友!您可以将其安装在本地以像这样玩:

    mkdir test
    sudo mount temp_file test -o loop
    

5

非常简单,

闪存芯片控制器包含一些设置。产品ID,供应商ID,闪存芯片的数量和大小。

通过使用带有小芯片的旧设备,用错误数量的闪存芯片覆盖固件,总驱动器容量将大于已安装闪存的数量。

因为地址行的数量没有改变,所以将始终写入芯片。例如,将首先写入128 MB,然后选择下一个芯片,然后再写入128。

因为只有一个芯片,所以未连接选择线,并且第二个闪存芯片数据将覆盖第一个芯片数据。

因为控制器会报告所有芯片的大小,包括未连接到操作系统的芯片,所以操作系统会很乐意将其格式化为错误的大小。


3
这里的问题是,如果以这种方式在硬件中完成更新,则新数据还将覆盖驱动器开头附近的FAT32文件分配表和根目录,从而使驱动器在重新格式化之前无法使用。事实并非如此,这表明它是一种使它起作用的文件系统黑客。
Mokubai

是的,确实如此,这将很快被发现。
Rohan Monga

1

有两种方法可以做到这一点:

  1. 分区:存在几种用于手动修改和创建分区的工具。例如,可以选择更多实际可用的气缸。做到这一点是微不足道的。例如 分区魔术师,我认为即使fdisk也可以做到这一点

  2. 设备固件:另一种方法是修改设备的固件。大多数设备(但不是全部)的固件中包含其信息(即插即用和其他信息)。

例如,通常的技巧是在容量较小的设备中使用容量较大的硬盘的固件,并“增加”空间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.