關燈 巨大 直達底部
親,雙擊螢幕即可自動滾動
第66部分

個模式下,使用者對計算器的『操』作擁有很大的許可權。

這絕對是個好訊息,原本林鴻還以為需要對硬體進行改動,現在有了進入這個模式的方式,他完全可以直接不透過硬體,僅從軟體上的漏『洞』就可以直接對這個計算器進行破解。

經過一個晚上的奮戰,林鴻最終成功了。

他找到了一個計算器裡面的棧緩衝區溢位,從而成功地往裡面寫入了自己的程式碼,突破了韌體系統對使用者『操』作空間許可權的限制。

程式在執行過程中,為了臨時存取資料的需要,一般都要分配一些記憶體空間,通常稱這些空間為緩衝區。

這個區域一般是可以進行資料儲存和刪除『操』作的,保護級別並不嚴格。而在緩衝區之外,在存在著其他一些系統核心資料區域,存放的資料都是系統中非常重要的資料,一旦那些資料被修改,整個系統就可能發生崩潰,當然,也有可能出現其他意想不到的結果。

所以這些系統核心資料區域是被嚴格限制和保護的,使用者不能對其進行『操』作。

棧是一種特殊的資料結構,特點是先入後出。就像一條死衚衕,大家排隊進去,滿了之後停止進入,然後再一個一個排著隊出來,先進去的那個人,最後才出來。這種資料結構生活中也有不少例子,例如『交』試卷,先『交』的人一般要到最後才會被老師看到,還有就是以前ktv裡面點歌系統,先點歌的人,反而排在最後面唱。

按理說,德州儀器的工程師在編寫程式的時候,是需要對壓入棧裡面的資料長度進行檢查的,一旦這個棧已經滿了,就必須停止對其再進行壓入,否則就會產生溢位。

而林鴻找到的這個棧緩衝區,正是那些工程師編寫程式碼的時候不嚴謹,忘記對這個棧進行長度檢查,於是林鴻一直往其中壓入資料,等它滿了也不管,繼續壓入,於是便發生了棧記憶體溢位。

溢位便意味著棧緩衝區之外的單元會被改寫,而假如這些資料單元裡面儲存的資料是有用資料的話,就會產生意想不到的後果,最常見的後果就是程式崩潰,通常情況下,這隻能算是程式的一個bug,但是當向這些棧中壓入經過進行設計的資料,就不僅僅是bug了,而是成為了可供駭客利用的漏『洞』。

林鴻正是『精』心設計好了一個小程式,然後將其編譯成機器碼,先是向他找到的那個棧中壓入一些無效的資料,『精』確計算這些資料的長度,等達到一定長度之後,再將他設計好的資料給壓入進去,讓其發生溢位,覆蓋緩衝區之外的區域,這樣當韌體系統執行到這裡的時候,就會成功地呼叫執行他的這個程式……

於是,這個嚴密的堡壘便被林鴻給成功攻克了。

這個過程,說起來看似簡單,實際上卻是經過林鴻無數次測試才找到的,為了『精』確計算棧的長度,他至少反反覆覆重複了五十遍以上的資料壓入過程,而為了能夠讓自己的這個程式能夠順利接管韌體的執行流程,其中所『花』費的時間和『精』力,也是無法三言兩語描述得清楚的。

林鴻將其成功破解之後,興奮之下,忘記了別人不像自己根本不用睡覺,當時就立刻敲響了亞瑟的房『門』,幸好他們剛剛睡下不久,聽到他這麼快就將計算器給破擊出來了,原本已經瞌睡得睜不開眼睛的兩人頓時『精』神一振,將睡意拋到了九霄雲外。

立刻想要看一下破解之後的成果,可是接下來難題又來了——沒有合適的可以執行在上面的軟體。

之前他們兩個討論了很久,始終無法確定第一個軟體該編寫什麼功能。亞瑟比較傾向於做一個實用『性』的軟體,例如可以輔助學生在學校的學習,而馬修則傾向於編寫一個有意思的遊戲。

兩個人的意見不能統一,時間就在他們不斷地爭辯中流逝,結果什麼東西都沒做出來。

現在機器已經出來了,卻沒有合適的軟體,真是夠鬱悶的。

這個時候,馬修提出,先編寫一個相對比較簡單的遊戲跑起來再說,得到了林鴻和亞瑟的一致認可。

三人商量了一下,最終決定將俄羅斯方塊這個遊戲移植到計算器中。

俄羅斯方塊是蘇聯科學家阿列克謝*帕基特諾夫一個經典遊戲,它看似簡單但卻變化無窮,令人上癮。1988年在美國上市之後,立刻獲得了巨大的商業成功,受到了男『女』老少所有人的歡迎,成為一款極為經典的大眾遊戲,沒有任何一款遊戲能夠與其媲美。

亞瑟之前在學習程式設計的時候,曾經獨立開發過這個遊戲,有現成的