用示波器恢复软盘里的游戏,这个程序员大神的操作太硬核了
来源:量子位
又到了考(bao)验(lu)阅(nian)历(ling)的时候了。
盆友,你可识得此物?
在 80 年代 90 年代,可是有不少宝贵的代码数据,都是存储在这样的载体之中的,比如 DOS 版的仙剑 1。
辣么,如果现在有一张存储古早代码的 软盘 到了你手里,你该如何解开其中的历史秘密?要知道,在今天,你可能连读取软盘的设备都很难找到……
要是再磕了碰了,那就更完蛋了。
最近, vsftpd 作者、Google Project Zero 创始人 Chris Evans 大佬就遇到了这样的难题:
在和 Phil Pemberton 一起恢复存储在软盘中的几个古早 游戏 代码时,他们发现,部分软盘出现了不同程度的损坏,以致于直接用 Greaseweazle 这样的设备是无法读取的。
△ Greaseweazle F7 Plus
怎么办?大佬决心要搞出一个船新的方案,抢救宝贵历史代码。
设备也简单,就用万能的 示波器 。
没错,就是那种用来测试电路、显示波形的仪器。
恢复出来的游戏代码竟然还能玩,而且界面显示清晰:
这波操作,看得网友直呼:数据考古不要太酷。
手敲 0 和 1,100% 恢复古早代码
软盘通常以 模拟信号 的方式存储数据。
这里面存储的模拟信号,用的是最原始的 FM 调制 (频率调制)。
也就是说,它所存储的信号 0 和 1 ,分别会以不同的波形频率表示。
△ 这代表的是 00101100
以下面这段波形为例,单位周期下,在信号为 0 时,输出的频率是比较 慢 的;而当信号变成 1 时,频率就会突然变 快 。
因此,只需要找到周期规律,就能判断一个周期里,信号代表的是 0 还是 1。
但也不能仅仅看峰值来判断信号是否为 1。例如,在这个周期里,就出现了一个 " 假峰值 ",然而人工解读的结果还是 0。
因为这个峰值其实是一个噪音,信号的整体趋势仍然是下降的,波形的频率本质上并没有变化。(但信号为 1 时,波形会呈现一个完整的周期,起始点和终点的值是非常接近的)
有网友给出了简单的判断方法:一个周期过去,如果信号值变化很大,则代表 0;如果信号值几乎不变,则代表 1。
据 Chris Evans 介绍,代表 0 的正弦波信号,是 8 μ s 一个周期;而代表 1 的正弦波信号,则是 4 μ s 一个周期。
这种情况下,用 Greaseweazle 等 " 现代设备 " 直接读取数据,会出现一个问题。
如果软盘中的数据,由于各种 外部原因 (时间久远、使用次数过多)出现了损坏,那么仅凭机器,是无法从这些带有大量噪音的数据中完成解读的。
△ 就像这样,有一个扇区出现了问题
但人却可以轻易看出这些数据中的 " 规律 ",从而判断信号的状态。
因此,用示波器将软盘中传输的模拟信号展示出来,再由人工进行解读,会是个更好的方法。
于是 Evans 和 Pemberton 将示波器直接连上了软盘驱动器的 测试点 ,看看软盘到底都输出了些什么信号。
其中,输入信号会呈现一正一负两个波形,用来消除一部分噪声。
从各种 " 年代久远 " 的软盘解读出的信号来看,难怪 Greaseweazle 这些设备读不出来……(连人也得仔细分辨一会儿)
接下来,就是处理这些神奇的波形了。
为了更好地处理噪音、绘制信号图像,Evans 和 Pemberton 还用上了 Audacity 来处理模拟信号。
Audacity 是一个免费开源的音频分析和编辑工具,能够快速放大和检查波形,还具有多功能低通滤波器,以及直接绘图的功能。
另外,Audacity 也支持 CSV 文件的导入。
Evans 和他的小伙伴还利用这样的音频工具搞出了新的衍生玩法……
比如将速度放慢 100 倍,听一听软盘记录的声音(软盘每转一次时间为 0.2 秒,该样本为 20 秒):
恢复出来的数据,效果还不错。
但上面这些,还只能用于数据比较正常的信号。
对于软盘本身有轻微损坏的信号,想要恢复就变得更困难了。
软盘坏了怎么办?
要是软盘上有划痕,这部分的信号就会变得非常难以辨认。
这是 Evans 和 Pemberton 还原的其中一个 凹痕 的信号,显然中间那部分,信号振幅(图中信号的强度)丢失得非常厉害,还自带 噪音 。
其中一种方法是,多用几种不同的软盘驱动器试试。
先用 MF504C 软盘驱动器过滤一下噪音:
好像效果不大。
换上另一个 TEAC 软盘驱动器后,显示的信号更加给力了,但强度还是很小:
用肉眼分辨的话,难度还是太高了。
鉴于此,Evans 和 Pemberton 又换上了 TEC 软盘驱动器,效果好多了,峰值也变得清晰可辨。
除此之外,应对这类信号振幅丢失的情况,还有另一种方法:手工绘制修复。
由于峰值缺失得实在太厉害,只能通过 人为修复 ,绘制部分峰值信号,来解决强度过低的问题。
但无论如何,这些信号都可以被修复。
据作者介绍,上面这些办法 100% 可以恢复软盘中的数据。
除非真的出现了不可抗力。
例如,软盘的一部分被损坏得很彻底:
这种情况下,软盘数据就彻底没办法恢复了。
所以,家里有 " 上古宝物 " 的小伙伴,一定要保护好自己的软盘!
关于作者
这个项目的作者之一,是最受欢迎的 Linux 发行版 FTP 服务器程序 vsftpd 作者、著名黑客 Chris Evans 。
他毕业于牛津大学,毕业后进入甲骨文工作,其后又在谷歌工作了 9 年时间,是 Chrome 浏览器安全团队和谷歌黑客团队 Project Zero 的创建者。
据报道,Project Zero 团队由谷歌内部顶尖安全工程师组成,使命是找出全球范围内高价值的安全漏洞,并将其彻底消除。
2015 年,特斯拉把这位黑客大神揽入麾下,负责领导安全工作。2016 年,Evans 从特斯拉离职。
Evans 还是漏洞赏金平台 HackerOne 的成立顾问。
现在,据老哥自己说,他处在 " 半退休 " 状态。
最后的最后,你是否也对 80 年代的游戏代码长啥样产生了好奇?
Evans 表示,这些恢复出来的源代码已经交给游戏原作者,是否开源就要看原作者的意思了,如果你感兴趣,不妨蹲个后续 ~