許毅見還有幾個人(沒有參加虛擬機器編寫計劃的)對這個並不瞭解,於是便耐著性子,給他們講解起來……
虛擬機器,顧名思義,虛擬的機器。其核心思想是用軟體來模擬硬體。它作為原作業系統下的一個應用程式,可以為運行於其上的目標作業系統創建出一部虛擬的機器,目標作業系統就像是執行在單獨的一臺真正的機器上一樣,絲毫察覺不到自己處於虛擬機器的控制之下。在一個成熟的虛擬機器中,完全可以模擬整個計算機開機、啟動、執行、關機等過程。按下電源鍵(Pern),視窗中也會出現機器自檢的畫面,接著是作業系統的載入,一切都和真實的一模一樣,甚至還有專門的一套BI來處理各種I/中斷。而實際上,他們只不過執行在一個虛擬的平臺上而已,表現在真實的作業系統中,它只是系統中的系統,只要硬體配置足夠高,這樣的系統可以執行很多個,就像應用程式那樣,多執行緒,互不影響,互不妨礙。在虛擬機器中執行的應用程式認為自己獨佔整個機器,它們相信自己是從真正的鍵盤和滑鼠獲得輸入,並從真正的螢幕上輸出,它們甚至認為自己完全擁有CPU和全部記憶體。
例如,虛擬機器中作業系統的硬碟是最外層作業系統中的表現通常是一個檔案,這個檔案是模擬硬碟,虛擬機器中的作業系統要進行檔案的讀取的儲存操作,實際上只是在這個檔案中進行——在這個檔案中格式化、分割槽、建立和刪除檔案等。
因為這個平臺是軟體的,是能夠透過程式設計師程式設計而控制的,所以在虛擬機器中,無論是作業系統的執行還是應用程式的執行,所有過程都是可跟蹤和可觀察的。程式設計師可以隨時觀察虛擬的CPU各個暫存器的狀況和跟蹤記憶體中資料地交換——這是一個多麼奇妙的功能!編寫作業系統的時候,最令程式設計師頭疼的就是各種各樣千奇百怪不可預期的BUG,一不小心,就會導致CPU掛死(宕機)。而這個時候,根本沒有任何有效的手段來得知那個時候,CPU中的狀態到底是怎麼樣的,為什麼會發生這種情況?所有的這些僅僅透過程式設計師來推測、來估計幾乎是不可能的。所以,虛擬機器往往被用來編寫作業系統。
許毅最開始動心思編寫虛擬機器就是因為這個原因。後來由於實在是太過複雜,轉而去編寫了一個比較簡單的。這也就是“生死鬥”平臺的前身。
“啊,原來還有這樣的好東西!”一個剛剛加入團隊學習的新人驚歎道,“那樣的話,我們豈不是隻要將病毒程式建立一個虛擬的執行環境,提供它可能用到的一切元素,包括硬碟,埠等,讓它在上面自由發揮……而我們則慢慢跟蹤,最後根據它的結果來判定其執行機制就可以了?”
好幾個人深以為然地點了點頭。當然,這些人都是沒有參加過虛擬機器開發的。
小黑聽完之後苦笑道:“理論上是行得通的,不過實際操作起來就沒有那麼容易了。”
許毅說道:“小黑說得不錯,一個完整的虛擬機器的開發,是一個非常龐大的工程,並不是說想開發就能開出來的。在裡面需要模擬的元素太多了,單單只是做虛擬機器就已經非常困難了,再加上一些其他判斷,其行為分析甚至還要藉助於人工智慧理論。”
“那……你們編寫的那個不是虛擬機器嗎?”好問的新人再次問道。
“當然是虛擬機器!”小黑反駁道,之後他又說道,“不過不是你認為的虛擬機器罷了。嚴格說來叫它為虛擬CPU更為準確一點,或者說是通用解密器,不過大家都習慣稱之為虛擬機器。”這個專案是許毅一手策劃的,其中很多東西都進行了簡化,要不然,現在肯定還完成不了。
“那怎麼辦?這個虛擬機器有沒有用?”
大家聽到這個問題,紛紛將目光看向了許毅。
“當然有用。那個虛擬CPU已經足夠用來做分析了,當然,還要一些輔助手段,你們有興趣的話,就在旁邊看看吧。”許毅有心讓他們見識一下,也不介意他們在旁邊觀看。而現在他關心的是,這個病毒到底是不是CIH病毒,從中毒的症狀來看,和那個病毒很相似,不過許毅又不能確定,畢竟按照歷史,CIH目前還沒有出現。難道因為他的出現,陳盈豪接觸計算機的時間也提前了?許毅不能確定的原因有兩點,首先盈豪現在應該還有努力學習計算機技術中,因為他接觸計算機的時間很晚,是因為上網之後頻頻被病毒困擾而反感於那些防毒軟體的無用才下決心編寫CIH病毒惡作劇的。另外一點就是CIH病毒的爆發日期是4月26日,那是他的高中座號,也是他的綽號。而這和這個神祕病毒爆發的時間不吻合。
在大家的強烈期待之中,許毅開始了病毒的分析破解工作。所用的主要工具就是小黑他們剛剛編寫出來的虛擬CPU,它可以像真正CPU那樣取址、譯碼和執行,可以模擬一段程式碼在真正CPU上執行得到的結果。
許毅將獲得的病毒樣本輸入這個虛擬機器中,病毒的程式碼說穿了一二就是一組機器的序列,最終還是要透過CPU才能執行,而現在有了這個虛擬機器,許毅就可以一步一步來跟蹤這種病毒的行為。
在跟蹤之前,許毅還對這個新完成的虛擬機器進行了一番組裝,將幾個常用的工具組合到了一起,這樣他就可以隨時暫停虛擬CPU的執行,檢視各個暫存器中的資料,以及檢視虛擬記憶體地址中的資料。組合中所涉及到的介面是許毅在最初設計的時候就已經考慮到的,所以現在做起來並不複雜,很快就弄好了。其他在旁邊圍觀的人,只有少數幾個看得懂許毅在做什麼。
病毒開始執行,虛擬機器自動從機器碼序列中取出第一條指令操作碼部分,判斷操作碼的型別和定址方式,確定這條指令長度之後,便在相應的函式中執行它,接著又根據執行後的結果確定下一條指位置……這個過程在反覆迴圈著,指令計數器一直在增長,許毅的眼睛則一刻也沒有離開暫存器現實框,觀察著裡面的資料,手中則根據那些資料不停地調節著,時快時慢……一會兒之後,病毒頭部入口處的解密子便完全執行完畢,接下來的過程便將是透過得到的控制權的解密程式碼對已經加密的病毒主體進行迴圈解密——這正是變形加密病毒的特徵。而這個時候許毅也沒有發現任何有用的資訊,不能確定這是否就是CIH病毒。
“反病毒安全部”的那些傢伙都屏氣凝神眼睛一眨不眨地觀察著許毅的一舉一動,他們只看到許毅此刻的神情非常的專注,全身心地投入分析過程中,顯示器中眼花繚亂的資料像瀑布雨一樣往上不停地刷著……外行看熱鬧,內行看門道。看不懂的新人只覺得這個情景非常酷,帥極了,頗有科幻電影中駭客情節的意味,伴隨著這種想法的自然是對許毅更加佩服和崇拜。而以小黑為首的這些能看懂一些操作的,心中的震驚遠比那些新人來得要大。準確而迅速地設定斷點,跟蹤,除錯……一系列眼花繚亂的動作讓他們大開眼界,而最讓他們震驚的是在這些動作的背後得要多快的思維速度!要知道,那些操作可不是簡單的執行一下就行了,這其中還涉及到很多計算,病毒編寫者在加密的時候,還會設定各種反追蹤手段和措施,竭力阻止破解。這些操作只要其他有一個操作不當,就會陷入死衚衕,得重新開始,而現在,許毅竟然就這樣流暢地執行下來了!這不得不讓他們感到難以置信!
現場靜悄悄的,只有許毅擊鍵的聲音。
“快了,快了……”許毅在心中說道。解密過程非常順利,連他自己都感覺有點意外,現在的他對這些數簡直變得再**不過了,一看就通,甚至成了本能的反應一樣。相信再過幾分鐘,他就可以完全將這個病毒破解。
指尖在鍵盤上跳舞——這就是在場的所有人現在的感覺。他們看到許毅的手指越來越流暢,輕快地迅速敲擊著黑色的按鍵,甚至連擊鍵的聲音也開始帶有一定的節奏。
“嘀——嘀——”
正在這時,房間裡面突然傳來了刺耳的報警聲,把大家嚇得夠嗆!幾乎所有的心臟都猛地跳了一下,連帶著身體也有很小幅度的動作,包括許毅,他正沉浸在一種非常玄妙的狀態當中,突然來了這麼一下,他的手指不由得一抖,一下按錯了……