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