又到了考(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一个周期。