來源:量子位
又到了考(bao)驗(lu)閱(nian)歷(ling)的時候了。
盆友,你可識得此物?
在 80 年代 90 年代,可是有不少寶貴的代碼數(shù)據(jù),都是存儲在這樣的載體之中的,比如 DOS 版的仙劍 1。
辣么,如果現(xiàn)在有一張存儲古早代碼的軟盤到了你手里,你該如何解開其中的歷史秘密?要知道,在今天,你可能連讀取軟盤的設(shè)備都很難找到……
要是再磕了碰了,那就更完蛋了。
最近,vsftpd作者、Google Project Zero 創(chuàng)始人 Chris Evans 大佬就遇到了這樣的難題:
在和 Phil Pemberton 一起恢復(fù)存儲在軟盤中的幾個古早游戲代碼時,他們發(fā)現(xiàn),部分軟盤出現(xiàn)了不同程度的損壞,以致于直接用Greaseweazle這樣的設(shè)備是無法讀取的。
△Greaseweazle F7 Plus
怎么辦?大佬決心要搞出一個船新的方案,搶救寶貴歷史代碼。
設(shè)備也簡單,就用萬能的示波器。
沒錯,就是那種用來測試電路、顯示波形的儀器。
恢復(fù)出來的游戲代碼竟然還能玩,而且界面顯示清晰:
這波操作,看得網(wǎng)友直呼:數(shù)據(jù)考古不要太酷。
手敲 0 和 1,100% 恢復(fù)古早代碼
軟盤通常以模擬信號的方式存儲數(shù)據(jù)。
這里面存儲的模擬信號,用的是最原始的FM 調(diào)制(頻率調(diào)制)。
也就是說,它所存儲的信號0和1,分別會以不同的波形頻率表示。
△這代表的是 00101100
以下面這段波形為例,單位周期下,在信號為 0 時,輸出的頻率是比較慢的;而當信號變成 1 時,頻率就會突然變快。
因此,只需要找到周期規(guī)律,就能判斷一個周期里,信號代表的是 0 還是 1。
但也不能僅僅看峰值來判斷信號是否為 1。例如,在這個周期里,就出現(xiàn)了一個 "假峰值",然而人工解讀的結(jié)果還是 0。
因為這個峰值其實是一個噪音,信號的整體趨勢仍然是下降的,波形的頻率本質(zhì)上并沒有變化。(但信號為 1 時,波形會呈現(xiàn)一個完整的周期,起始點和終點的值是非常接近的)
有網(wǎng)友給出了簡單的判斷方法:一個周期過去,如果信號值變化很大,則代表 0;如果信號值幾乎不變,則代表 1。
據(jù) Chris Evans 介紹,代表 0 的正弦波信號,是8 μ s一個周期;而代表 1 的正弦波信號,則是4 μ s一個周期。
這種情況下,用 Greaseweazle 等 " 現(xiàn)代設(shè)備 " 直接讀取數(shù)據(jù),會出現(xiàn)一個問題。
如果軟盤中的數(shù)據(jù),由于各種外部原因(時間久遠、使用次數(shù)過多)出現(xiàn)了損壞,那么僅憑機器,是無法從這些帶有大量噪音的數(shù)據(jù)中完成解讀的。
△就像這樣,有一個扇區(qū)出現(xiàn)了問題
但人卻可以輕易看出這些數(shù)據(jù)中的 " 規(guī)律 ",從而判斷信號的狀態(tài)。
因此,用示波器將軟盤中傳輸?shù)哪M信號展示出來,再由人工進行解讀,會是個更好的方法。
于是 Evans 和 Pemberton 將示波器直接連上了軟盤驅(qū)動器的測試點,看看軟盤到底都輸出了些什么信號。
其中,輸入信號會呈現(xiàn)一正一負兩個波形,用來消除一部分噪聲。
從各種 " 年代久遠 " 的軟盤解讀出的信號來看,難怪 Greaseweazle 這些設(shè)備讀不出來……(連人也得仔細分辨一會兒)
接下來,就是處理這些神奇的波形了。
為了更好地處理噪音、繪制信號圖像,Evans 和 Pemberton 還用上了Audacity來處理模擬信號。
Audacity 是一個免費開源的音頻分析和編輯工具,能夠快速放大和檢查波形,還具有多功能低通濾波器,以及直接繪圖的功能。
另外,Audacity 也支持 CSV 文件的導(dǎo)入。
Evans 和他的小伙伴還利用這樣的音頻工具搞出了新的衍生玩法……
比如將速度放慢 100 倍,聽一聽軟盤記錄的聲音(軟盤每轉(zhuǎn)一次時間為 0.2 秒,該樣本為 20 秒):
恢復(fù)出來的數(shù)據(jù),效果還不錯。
但上面這些,還只能用于數(shù)據(jù)比較正常的信號。
對于軟盤本身有輕微損壞的信號,想要恢復(fù)就變得更困難了。
軟盤壞了怎么辦?
要是軟盤上有劃痕,這部分的信號就會變得非常難以辨認。
這是 Evans 和 Pemberton 還原的其中一個凹痕的信號,顯然中間那部分,信號振幅(圖中信號的強度)丟失得非常厲害,還自帶噪音。
其中一種方法是,多用幾種不同的軟盤驅(qū)動器試試。
先用 MF504C 軟盤驅(qū)動器過濾一下噪音:
好像效果不大。
換上另一個 TEAC 軟盤驅(qū)動器后,顯示的信號更加給力了,但強度還是很?。?/p>
用肉眼分辨的話,難度還是太高了。
鑒于此,Evans 和 Pemberton 又換上了 TEC 軟盤驅(qū)動器,效果好多了,峰值也變得清晰可辨。
除此之外,應(yīng)對這類信號振幅丟失的情況,還有另一種方法:手工繪制修復(fù)。
由于峰值缺失得實在太厲害,只能通過人為修復(fù),繪制部分峰值信號,來解決強度過低的問題。
但無論如何,這些信號都可以被修復(fù)。
據(jù)作者介紹,上面這些辦法100%可以恢復(fù)軟盤中的數(shù)據(jù)。
除非真的出現(xiàn)了不可抗力。
例如,軟盤的一部分被損壞得很徹底:
這種情況下,軟盤數(shù)據(jù)就徹底沒辦法恢復(fù)了。
所以,家里有 " 上古寶物 " 的小伙伴,一定要保護好自己的軟盤!
關(guān)于作者
這個項目的作者之一,是最受歡迎的 Linux 發(fā)行版 FTP 服務(wù)器程序vsftpd作者、著名黑客Chris Evans。
他畢業(yè)于牛津大學,畢業(yè)后進入甲骨文工作,其后又在谷歌工作了 9 年時間,是 Chrome 瀏覽器安全團隊和谷歌黑客團隊 Project Zero 的創(chuàng)建者。
據(jù)報道,Project Zero 團隊由谷歌內(nèi)部頂尖安全工程師組成,使命是找出全球范圍內(nèi)高價值的安全漏洞,并將其徹底消除。
2015 年,特斯拉把這位黑客大神攬入麾下,負責領(lǐng)導(dǎo)安全工作。2016 年,Evans 從特斯拉離職。
Evans 還是漏洞賞金平臺 HackerOne 的成立顧問。
現(xiàn)在,據(jù)老哥自己說,他處在 " 半退休 " 狀態(tài)。
最后的最后,你是否也對 80 年代的游戲代碼長啥樣產(chǎn)生了好奇?
Evans 表示,這些恢復(fù)出來的源代碼已經(jīng)交給游戲原作者,是否開源就要看原作者的意思了,如果你感興趣,不妨蹲個后續(xù) ~