又到了考(bao)驗(yàn)(lu)閱(nian)歷(ling)的時(shí)候了。
盆友,你可識(shí)得此物?
在80年代90年代,可是有不少寶貴的代碼數(shù)據(jù),都是存儲(chǔ)在這樣的載體之中的,比如DOS版的仙劍1。圖片
辣么,如果現(xiàn)在有一張存儲(chǔ)古早代碼的軟盤(pán)到了你手里,你該如何解開(kāi)其中的歷史秘密?要知道,在今天,你可能連讀取軟盤(pán)的設(shè)備都很難找到……
要是再磕了碰了,那就更完蛋了。
最近,vsftpd作者、Google Project Zero創(chuàng)始人Chris Evans大佬就遇到了這樣的難題:
在和Phil Pemberton一起恢復(fù)存儲(chǔ)在軟盤(pán)中的幾個(gè)古早游戲代碼時(shí),他們發(fā)現(xiàn),部分軟盤(pán)出現(xiàn)了不同程度的損壞,以致于直接用Greaseweazle這樣的設(shè)備是無(wú)法讀取的。
△Greaseweazle F7 Plus
怎么辦?大佬決心要搞出一個(gè)全新的方案,搶救寶貴歷史代碼。
設(shè)備也簡(jiǎn)單,就用萬(wàn)能的示波器。
沒(méi)錯(cuò),就是那種用來(lái)測(cè)試電路、顯示波形的儀器。
恢復(fù)出來(lái)的游戲代碼竟然還能玩,而且界面顯示清晰:
這波操作,看得網(wǎng)友直呼:數(shù)據(jù)考古不要太酷。
▍手敲0和1,100%恢復(fù)古早代碼
軟盤(pán)通常以模擬信號(hào)的方式存儲(chǔ)數(shù)據(jù)。
這里面存儲(chǔ)的模擬信號(hào),用的是最原始的FM調(diào)制(頻率調(diào)制)。
也就是說(shuō),它所存儲(chǔ)的信號(hào)0和1,分別會(huì)以不同的波形頻率表示。
△這代表的是00101100
以下面這段波形為例,單位周期下,在信號(hào)為0時(shí),輸出的頻率是比較慢的;而當(dāng)信號(hào)變成1時(shí),頻率就會(huì)突然變快。
因此,只需要找到周期規(guī)律,就能判斷一個(gè)周期里,信號(hào)代表的是0還是1。
但也不能僅僅看峰值來(lái)判斷信號(hào)是否為1。例如,在這個(gè)周期里,就出現(xiàn)了一個(gè)“假峰值”,然而人工解讀的結(jié)果還是0。
因?yàn)檫@個(gè)峰值其實(shí)是一個(gè)噪音,信號(hào)的整體趨勢(shì)仍然是下降的,波形的頻率本質(zhì)上并沒(méi)有變化。(但信號(hào)為1時(shí),波形會(huì)呈現(xiàn)一個(gè)完整的周期,起始點(diǎn)和終點(diǎn)的值是非常接近的)
有網(wǎng)友給出了簡(jiǎn)單的判斷方法:一個(gè)周期過(guò)去,如果信號(hào)值變化很大,則代表0;如果信號(hào)值幾乎不變,則代表1。
據(jù)Chris Evans介紹,代表0的正弦波信號(hào),是8μs一個(gè)周期;而代表1的正弦波信號(hào),則是4μs一個(gè)周期。