post | sidebar | footer

2008年10月7日 星期二

[口胡]為了快樂檔重灌了快20次的Vista…

(本篇為筆記)

這兩天快被某快樂檔整死XD


一時不查,灌Vista忘了把XP分割區設為隱藏。
結果快樂檔寫入MBR的時候「順手」Copy了一份bootmgr到XP的分割區…
這是一連串不幸的開始…


一般推測快樂檔的原作者大致做了這樣的逆向工程
正常的開機是BIOS收到訊號,然後啟動BIOS設定的第一開機順位磁碟上的MBR
MBR再去導引作業系統的開機程序。XP的時候是ntldr,到了Vista改成bootmgr
在不改寫Vista的開機前導bootmgr的前提下
改用祖國開發的grldr(GRUB4DOS)去「卡」在MBR和bootmgr之間
引導bootmgr來開機。
這玩意本來就是開放原始碼的多重開機程序,用來導引Vista開機倒是小事一件。
逆向工程的動作在那個謎樣的grldr,在裡面預先寫入了謎樣BIOS的資訊
配合系統裡啟用的謎序號跟謎證書可以騙到系統認為已經正式啟用系統。
就算以後大硬改成封鎖這個grldr來啟動,了不起就乾脆換把鑰匙再戰…

原作者應該有改寫到更前端的MBR資訊,因為我的當機是這樣發生的。

同一顆實體硬碟,原本割了一個主要分割(1)跟邏輯分割(2)
為了裝Vista,又臨時擠不出一顆實體硬碟來裝的情況下(唉,抓太多檔的悲哀…),只好在那顆實體硬碟上又切出一個主要分割(3),特地用來放Vista的系統資料。

到這裡都很順利。我之前也成功啟動過Vista SP1 32位元版。
64位元只不過就是多了個邏輯64位元運算單元(x86-64指令),啟動方式大同小異。
問題就在於我裝64位元的時候,忘了先「隱藏」XP的分割區…
所以變成XP跟Vista底下都有bootmgr這個隱藏檔(用來讓Vista認得舊版作業系統多重啟動)
結果快樂檔很快樂的把XP也當作了Vista系統,寫入改寫過的grldr

如果只是這樣也就算了,接下來的問題更囧。

讓我們回憶一下前面描述過的分割情形。
我的硬碟分割大概長這樣,由上而下正好是排列順序。

主要分割(3) -> 給Vista開機
主要分割(1) -> 給XP開機
邏輯分割(2) -> 亂塞XD

快樂檔用的是開放原始碼的GRUB4DOS,這軟體跟他的前身GRUB一樣,本身是Linux系的作業系統用的多重開機程式。Linux系看系統分割的順序跟Windows系又不一樣,會把「先切」的順序放前面,「後切」的放後面。上面分割區後面括弧的數字,就代表我先後切割成形的順序。

推測快樂檔是這樣運作的。

尋找主要分割區(1) -> 找到的話,看看上面有沒有bootmgr ->沒有的話,換下一個主要分割區(2)或(3)。

如果找到的話 -> 載入grldr -> 再載入bootmgr -> 接著載入winload.exe之後開機,系統被假訊息矇騙,認為系統完全啟動。

邏輯分割區(2)本身就不會有任何開機程式會去找他麻煩,所以不重要。
問題出在主要分割區(1)跟(3)
雖然Windows看到(3)在(1)前面,會認為(3)才是第一順位
但是非Windows系的看到先有(1)才有(3),就認為順位不是(3)優先。

於是當機的流程如下

尋找主要分割區(1) -> 發現了bootmgr -> 載入grldr -> 再載入bootmgr -> 接著載入winload.exe…咦?沒有這個檔案(因為是XP,winload.exe只有Vista才有),無法開機(回報找不到winload.exe)

一開始還沒發現到問題出在這,以為哪裡灌壞了,老樣子,出了問題就拿系統光碟直接上
一樣又灌在那個主要分割區(3)
順道一提,(1)裡面可是我用的好好的XP分割區,我一點也不想砍掉啊XD


然後,我重複Try & Error了快20次,每一種不同的虛擬證書跟序號大概都快試過一輪(甚至打算把Vista每個版本都裝過一次試試...XD),中間試著灌Vista 32位元也是不能啟動,直到我發現XP分割區有個隱藏檔好像怪怪的...

砍掉XP分割區中被植入的bootmgr檔跟grldr檔,為防萬一,仔細檢查了一下system32資料夾裡有沒有winload.exe這個不屬於XP的檔案。
重灌Vista,當然重灌前先讓XP分割區隱藏,如何隱藏分割區的方法很多,SPFDISK就可以做到了

看到順利啟動的字樣時我整個腿軟了...



如果不是看到網路上有人說Vista會在其他可開機的微軟作業系統分割區種木馬(誤)的討論,我還真想不到問題竟然出在自己的XP分割區裡面(囧)

沒有留言:

張貼留言