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