”
回宮后,艾達否坐到自己王位上,翹著右手小拇指,捏著硬盤的USB口,插入到他的主機上,把鏡像系統導入虛擬機,然后暢游在其中。
503寢室的燈亮了一夜,第二天一早,艾達否推醒了一旁抱著椅子睡得正香的盧赫。
“小赫子,快醒醒,朕要施展絕技了。”艾達否指著屏幕上一個屎黃色的文件夾,“看看,這個Immortal,就是核心程序的主文件夾。不得不說,上個世紀的碼農還都挺中二的,這單詞是什么意思?永垂不朽?”
盧赫揉了揉眼睛,打了個大大的哈欠,“這詞是永存和不死的意思吧,寓意很好啊。”
艾達否撇撇嘴,打開一個叫ExeinfoPE的軟件,把文件夾里一個名為Immortal.exe的文件拖了進去,然后按下了回車鍵。
進度條飛快地走著,不一會兒,軟件下半部顯示出了兩條信息:
Microsoft Visual C++ V2.0 -100x -x86
脫殼成功
“完美!”艾達否激動到拍桌,“古董軟件就是如此簡單。也許他們的加殼手段在當時看來很復雜,但在20年后的今天,脫殼就像喝水一樣簡單。”
“什么是加殼脫殼啊?”盧赫被觸及到了知識盲區。
“加殼就是為了防止軟件被破譯,在指令的頭部寫入一層額外的指令,把程序入口點和動態鏈接庫的地址表隱匿起來。”艾達否說完又思索片刻,“打個不太恰當的比方就是,你不想被別人看光光,所以要穿衣服,這叫加殼。現在我非要看光你,就強行把你衣服給扒了,這叫脫殼。”
“變態。”盧赫捂住自己的領口,“那下一步呢?”
“下一步啊,那就是我的拿手絕技了,對這些可執行文件和動態鏈接庫進行逆向分析,盡可能全地反推出程序源碼。”艾達否說著拍了拍自己胸脯,“這破軟件是C屁屁寫的,我拿手,放心好了!”
于是之后的一周里,503寢室的就寢率急劇地從0%提升到了77%,雖然天花板上的那盞老舊的吊燈,每日都不堪重負地徹夜長明。
那個和艾達否同名的軟件,一如既往地給力,僅用靜態分析,便還原出了80%以上的高級語言。艾達否孜孜不倦地啃食它們,可吃完了以后,卻發現自己吃了個寂寞。
因為那些能夠被解析的部分,全部都在調用系統接口,從對象屬性、函數名和執行邏輯來看,它們的功能僅僅在于讀取交互數據,以及把不知道從哪里蹦出來一長串字符通過自定義的接口,傳遞給另外一個明顯是用來自動化操縱硬件的軟件。
這就像好不容易把別人衣服給扒下來了,卻發現人家還額外穿了一套內衣,一個點都沒露。想要一飽眼福,就要再去做動態分析和黑盒分析。
動態分析就是給程序打斷點或者干脆直接單步執行,觀察寄存器、內存數據和堆棧的變化,猜測程序做了什么;黑盒分析就是給程序輸入大量的測試樣例,通過觀察輸入和輸入數據的關系,猜測程序到底做了什么。
這兩種分析方式都是難啃的硬骨頭。
于是在未來的半個月里,每當艾達否靜坐在電腦屏幕前一邊撓頭一邊扣腳時,盧赫都會為他遞上一杯熱騰騰地黑芝麻糊。因為他本就不濃密的頭發,愈加稀疏了。
在喝下37杯黑芝麻糊之后,艾達否終于崩潰了。他叫來盧赫,鄭重地說:
“現在我宣布一個驚天大秘密:這個鋅指平臺沒有任何技術含量,它的原理就是你隨機給它輸入一串堿基序列,然后它再隨機地給你輸出一串。就這樣,他們花了大幾百萬買了一臺彩票機,就電視上那種,一個鼓風機往透明塑料轉盤里吹,隨機吹出一個又一個的球。”