雖然windows3.1也已經設計了權限控制,并且將系統進行了分層,但是在這方面做得并不好,甚至可以說是相當的粗糙。
不過這也可以理解,畢竟這個系統剛剛出來,并且他們當時為了能夠盡快地推出,也非常的趕時間,將一些重要的功能首先實現了,對于普通用戶來說,他們設計的權限控制體系已經基本能夠滿足要求了。
Windows3X系列操作系統,根本就不是為實時操作系統而開發的,實時系統,他們有專門的windowsNT系列,其權限控制就比這個要完善多了,穩定性也極大的增強。不過,同樣的道理,他們想要對NT系統進行定制修改的難度也就更大了,總體說來,還沒有直接使用這個來得方便。
并且,windows系列的系統都是閉源的,說白了這是商業軟件,你想使用,就必須進行購買,他們現在這樣使用,是違反知識產權法的,使用的是盜版。要是被微軟發現,他們是可以通過司法途徑進行起訴的。當然,至于國內的法院受不受理,這又是另外一回事了。
Windows3.1系統的權限系統雖然簡單,但是在用戶層,想要對系統層進行操作這是絕對禁止的,因為會威脅到系統的穩定性,只要破壞了系統的某一個關鍵數據結構,很有可能就會讓系統崩潰。
涉及到系統底層的操作,都是通過微軟給出的SDK包里面的系統函數進行實現的。這些系統函數,不會亂操作內存里面關鍵的數據,而是會按照系統程序員所期望的方式實現某些功能。
這樣做,既不會影響系統的穩定性和安全性,又可以讓編寫應用軟件的程序員獲得想要的功能,還可以簡化操作步驟,讓他們不用關心底層的運行機制,簡直是一舉三得的好辦法。
當然。也并不是說系統層里面的東西。用戶層完全訪問不了,那些病毒木馬想要實現自己的功能,很大程度上就是利用了系統的漏洞,獲得了超過用戶層的權限。
不過,他們這個系統,已經被他們經過極度的優化,一些常見漏洞,也基本上給打上了補丁,要想找出這樣一個漏洞。還是很困難的。
所以,余波在聽到林鴻大言不慚地說“權限要自己動手去拿,不會自動送上門。”的時候,不由冷冷一笑,反駁道:
“你說得倒輕巧,有本事你拿一個看看?”
余波心中還對林鴻有些意見,畢竟正是他的到來,才導致大家人心惶惶。擔心自己為之工作了好多年的心血被推到重來。此外。他也對林鴻輕描淡寫的態度很是看不慣,就算你們公司自己編寫出了一個控制系統,但是也不能這樣信口開河吧?
他們在這個系統上浸淫了這么久,自認為自己對這個系統的了解,只是僅次于那些開發系統的人了。
他當然知道權限要自己去拿,并不會自動送上門,但是,說起來容易做起來難。有些事情是站著說不腰疼,這樣的人,他見得多了。
余波認為是林鴻想要在他們領導面前表現自己,才故意這樣“鼻孔插大蔥”——裝象。
林鴻聽到他的話,笑了下,沒有放在心上,而是對曹興平和徐直中說道:
“這個情況我之前是遇到過的。很多木馬和蠕蟲。就是通過重寫系統底層的函數來截流數據。這在系統安全領域,有一個專門的名詞,叫做‘中間人攻擊’。”
中間人攻擊,在黑客領域是一種非常古老并且有效的攻擊方式。
其本質原理,就是在數據流動的鏈路上,串接一個攻擊者自己的“轉發器”,從而達到嗅探竊取數據的目的。
這種情形,就好像將一個水管給截段,然后在上面連接一個自己的轉接頭,這個轉接頭是不會影響水管中水流的正常流動的,它只是對水流進行監控,一旦發現水流里面有一條魚經過,它就負責將這個信息給記錄在案,甚至,它還有其他一些比較神奇的功能,例如,將這條魚替換成一條泥鰍。
而水管兩端的人,由于缺乏溝通,根本不知道這些水流在流動的過程中到底發生了什么。
他們不知道自己私下發送的魚被別人監控了,甚至被人掉包,發送方以為自己發送了一條魚,而接收方則以為對方發送了一條泥鰍。
在網絡領域,這個中間人甚至可以是一臺電腦,用戶A向用戶B發送信息,卻被人偷偷地讓信息流跑到電腦C上面走了一圈,而AB用戶卻根本不知道自己的信息已經被人監聽了。由于電腦C只是對數據進行復制和備份,完全不對信息進行修改,是被動的行文,所以AB是很難發現這種行為的。
而在單機里面,中間人攻擊更多的就是像這次這樣,對某個環節或者函數進行接管,相當于在外面另外套了一層,要想訪問真實的內容,必須從中間人這里進入。
林鴻的超級蠕蟲對數據進行搜集,實際上也是這個原理,從表面上看,已經被感染的系統和原來的系統是根本沒有任何差別的,不會影響到數據的正常流動,也不會影響系統的穩定性。
而他們現在的這個雷達控制系統,很顯然也是這樣,有某一個東西正好接管了他們系統中所調用的一個系統函數,只是,對方在處理那個底層函數的時候,有個地方沒有處理好,導致他們在調用這個函數的時候,根本沒有調用成功,結果就沒有返回值。
徐直中和曹興平兩人對視一眼,然后徐直中問道:“小鴻,你能肯定是這個原因嗎?”
林鴻所說的話,通俗易懂,他們也聽明白了。
雖然**不離十,但是為了保險起見,林鴻還是得自己動手驗證一下才能打包票。
“這樣吧,如果方便的話,我就使用我自己的方式進行驗證一下。”他說道。
徐直中稍微想了一下,便點頭同意了。
在曹興平的示意下,余波只好讓出了自己的座位。
林鴻坐了上去,然后調出編譯器,立刻動手編寫一個小工具。
這個小工具非常簡單,只有一個功能,那就是持續不斷地對之前那個函數進行調用,然后使用內存DUMP的方式,將內存里面的指定數據保存在一個文本文件里面,與此同時,也監測那個函數的返回結果。
接著,林鴻便將余波之前做的過程重新做了一遍,重啟,然后進入靜默狀態,再重新恢復……
一個新的文件便被生成了。
林鴻使用編輯器將其打開,開始分析文本文件里面的內容。
站在林鴻身后,想看他好戲的余波頓時有些傻眼了。
也不知道林鴻是故意的還是怎的,他的動作非常快,寫代碼也感覺就像是心中早就編寫過無數次那樣,直接一溜煙地就編寫了過去,稍微修復了幾個由于疏忽而導致的錯誤之后,這個小工具便很快就寫完了。整個過程,用了不到三分鐘的時間。
余波站在身后一直目不眨眼地盯著都沒有跟上他的步伐。雖然看懂了大概的意思,但是其細節卻是完全理解不了,不知道對方為什么這么編寫。
而看到最終生成的那個文本文件,他更是傻眼,因為里面的內容按理說來,是根本訪問不到的,是系統層的內存數據。
“這不可……”余波還想說什么,不過立刻有閉了嘴,因為事實擺在眼前,他再說不可能,那不是一句廢話么?
林鴻將記錄迅速的看了一遍,最終點頭道:
“果然如此。里面的確有一個隱藏的程序,接管了這個函數。”
這個LOG文件中的記錄,非常明顯地顯示出,進入靜默狀態的時候,內存里面的函數棧有了比較明顯的變化,數據顯示一個新的函數被壓入了棧。
棧是數據結構中一個比較特殊的數據結構,其特點就是“先進后出”,例如彈夾就是一個典型的棧結構,子彈裝進去的時候,先壓入,再彈出,最先裝入的是最后被射出。
在程序中,函數里面的各個數據和變量,也是按照一定的順序,一個一個“壓入”,執行完畢之后,再一個一個“彈出”。
要想監控函數的變化,就只要監控指定位置的那個棧結構就行了。林鴻從內存中DUMP出來的數據,就是棧里面的東西。
這個結果,在場的其他三人臉色都有些變了。
這意味著,林鴻所說的話是正確的,系統底層的確有一個隱藏的程序在秘密活動,而他們之前對此卻毫不知情。
徐直中還好,已經有了心理準備,曹興平卻是臉色變得極其難看。
“那為什么在剛開始啟動的時候沒有這個問題,而進入靜默狀態才會出現?”
這個時候,余波突然插言問道,他這個時候,已經沒有心思去膈應林鴻了。
“這是因為在系統啟動的時候,你們的這個殼程序優先啟動,然后對方才啟動,這樣就根本沒有受到它的影響,兩者相安無事。但是進入靜默狀態的時候,殼程序會要關閉,再次啟動的時候,那個隱藏程序已經完全接管了整個函數接口,可能是對方在這一塊沒有處理好,導致兩者產生了沖突,殼程序調用的那個函數沒有能夠返回有效的數值,而你們恰好又沒有對這個返回值進行判斷處理,最終導致了整個殼程序的崩潰。”