9

用示波器恢复软盘里的游戏,这个程序员大神的操作太硬核了

 3 years ago
source link: https://www.techug.com/post/restore-the-game-in-floppy-disk-with-oscilloscope-the-operation-of-this-programmer-is-too-hard-core.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

用示波器恢复软盘里的游戏,这个程序员大神的操作太硬核了

2
鱼羊 萧箫 发自 凹非寺
量子位 报道 | 公众号 QbitAI

又到了考(bao)验(lu)阅(nian)历(ling)的时候了。

img1621822515157921553.png

盆友,你可识得此物?

在80年代90年代,可是有不少宝贵的代码数据,都是存储在这样的载体之中的,比如DOS版的仙剑1。

辣么,如果现在有一张存储古早代码的软盘到了你手里,你该如何解开其中的历史秘密?要知道,在今天,你可能连读取软盘的设备都很难找到……

要是再磕了碰了,那就更完蛋了。

最近,vsftpd作者、Google Project Zero创始人Chris Evans大佬就遇到了这样的难题:

在和Phil Pemberton一起恢复存储在软盘中的几个古早游戏代码时,他们发现,部分软盘出现了不同程度的损坏,以致于直接用Greaseweazle这样的设备是无法读取的。

Greaseweazle F7 Plus

怎么办?大佬决心要搞出一个船新的方案,抢救宝贵历史代码。

设备也简单,就用万能的示波器

没错,就是那种用来测试电路、显示波形的仪器。

恢复出来的游戏代码竟然还能玩,而且界面显示清晰:

这波操作,看得网友直呼:数据考古不要太酷。

手敲0和1,100%恢复古早代码

软盘通常以模拟信号的方式存储数据。

这里面存储的模拟信号,用的是最原始的FM调制(频率调制)。

也就是说,它所存储的信号01,分别会以不同的波形频率表示。

这代表的是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表示,这些恢复出来的源代码已经交给游戏原作者,是否开源就要看原作者的意思了,如果你感兴趣,不妨蹲个后续~

不过,此前量子位还介绍过另一个从21张软盘中被“抢救”出来的红白机游戏,代码已在GitHub上开源:

https://github.com/DickBlackshack/Days-of-Thunder-NES-Unpublished/

参考链接:
[1]https://scarybeastsecurity.blogspot.com/2021/05/recovering-lost-treasure-filled-floppy.html
[2]https://news.ycombinator.com/item?id=27187435

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK