第139章 棧緩衝區溢出

第二天,學校食堂。

SAM三人組又聚在了一起共同進餐。

亞瑟和馬修兩人臉上的傷痕如果不注意看的話已經看不出來,浮腫也完全消失,他們都稱讚林鴻的“雲南白藥”非常神奇。

在他們的桌子上,擺放着三個TI-82型計算器,他們一邊吃飯,一邊不時地看看桌上的計算器,有時候還互相對視而笑,臉上雖然疲倦,但眉目之間卻露出非常〖興〗奮和自豪的神色。

這三個計算器,正是已經被成功破解了的計算器!

迅速吃完之後,馬修馬上拿起了自己的那個計算器,在上面按了幾下,調出一個目錄,然後運行其中的程序,整個計算器液晶屏頓時一刷新,只見一個右邊一個小小的黑色長條開始慢慢從右至左開始移動,馬修將計算器側了過來,開始津津有味地玩了起來。

昨天,竟然有直接在BBS上就將TI-82計算器的電路圖紙直接發佈在上面,所以,德州儀器郵寄的資料,實際上已經意義不大了。那個人就是德州儀器公司的工程師,他在上面回答了許多用戶提出的問題,並且說歡迎大家提出改進建議,他會向公司提交反饋內容。

由於提前拿到了圖紙,破解的事情立刻提上了日常,〖興〗奮之下的三人根本沒有心思睡覺,他們做了一個重要決定,那就是一定要趕在返校舞會到來之前,將計算器破解出來。

他們分工合作,馬修和亞瑟負責設計出一個有意思的軟件或者遊戲,而林鴻則負責計算器的破解。等破解出來之後。就移植到計算器上面,給大家來一個巨大的驚喜。

由於有了BBS上那些帖子的基礎,林鴻已經對破解計算器有了非常大的把握,他最終讓亞瑟拿出工具箱,將計算器給拆了開來,對照電路圖仔細研究了計算器的硬件結構。

最終林鴻確定,並不需要對計算器進行硬件方面的修改,就完全可以突破德州儀器公司在固件上設置的限制枷鎖。

這是因爲在其中一個帖子中。有一個用戶描述了他發現的一個現象,按照他給出的幾個按鍵順序和方式,就可以讓計算器進入一個特殊的模式——“DEBUG-N”。不過那個用戶的這個回覆貼很快就被緊接而來的其他回覆給淹沒了,只有很少人才注意到了他的這個回覆。

因爲林鴻需要對計算器進行破解,所以他對立面的所有回覆都比較關注。這個用戶的回帖他非常重視,專門用自己的計算器按照對方描述的順序,完整地操作了一番,然後再將計算器連接到計算機上面進行了一系列測試,結果驚喜地發現,這個模式似乎是德州儀器公司的工程師在開發過程中用來調試用的。在這個模式下,用戶對計算器的操作擁有很大的權限。

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

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

他找到了一個計算器裡面的棧緩衝區溢出,從而成功地往裡面寫入了自己的代碼,突破了固件系統對用戶操作空間權限的限制。

程序在運行過程中,爲了臨時存取數據的需要。一般都要分配一些內存空間,通常稱這些空間爲緩衝區。

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

所以這些系統內核數據區域是被嚴格限制和保護的,用戶不能對其進行操作。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

亞瑟之前在學習編程的時候。曾經**開發過這個遊戲,有現成的源代碼,移植起來的難度並不大。

於是,他們又將陣地轉移到了林鴻房間,因爲他這臺機器可以模擬Z80CPU的運行環境,將亞瑟之前編寫的那個源程序進行簡單的修改和優化之後,就將其編譯成爲了一個可在計算器裡面執行的文件。然後通過數據線傳輸到了計算器存儲空間中。

剛開始的幾次運行都出了點問題,但是這是很正常的情況,移植到另外一個平臺,如果能一次性就成功,那就太誇張了,就算是再牛逼的程序員,有時候也是會犯一些低級錯誤的,例如變量名稱寫錯,忘記寫分號之類的,這是很正常的情況。只要根據調試信息,有針對性地進行修改就行了。

編寫程序就是這樣,調試、運行、再調試……

不斷地和各種錯誤和BUG做這鬥爭,直到最終順利通過的那一刻!

在進行過十幾次不斷地來回調試和傳輸程序的過程之後,亞瑟的俄羅斯遊戲終於順利地在TI-82上運行了!

馬修第一時間將計算器搶了過來,然後開始玩了起來。

玩俄羅斯方塊遊戲,只需要至多五個按鍵就可以,三個方向鍵,一個鍵用來變換,另外一個鍵則用來加速。而計算器上有幾十個按鍵,足夠了。

馬修在玩了一會兒就發現,由於計算器顯示屏高度太低,很容易就會被撐到頂,最終掛掉。

於是,他提出了改進意見,將顯示方式向順時針方向旋轉90度,這樣方塊下落的路程就可以大大加長,可以降低難度。

於是,亞瑟又開始對遊戲的源程序進行修改……

在整個過程中,林後都沒再插手,他只是在旁邊觀看着亞瑟編寫程序。

亞瑟的這個俄羅斯方塊程序是用C語言進行編寫的,林鴻來美國之後纔開始接觸這門編程語言,用得還不是很熟,今天看到亞瑟不斷修改調試,也學到了不少東西。

他發現,亞瑟編寫程序的時候,有一些細小的編程習慣值得借鑑和學習,例如在關鍵的地方給點註釋、給代碼語句多分行縮進,提高代碼的可讀性……等等。

在將近凌晨五點的時候,他們終於將最終版的俄羅斯方塊遊戲給確定下來。

此刻,除了林鴻,亞瑟和馬修都疲憊不堪,直接倒在牀上呼呼大睡。

這天早晨的晨練,亞瑟和馬修都沒能去,只有林鴻一人。

第171章 監聽第401章 有點麻煩第365章 不甘第425章 一片漆黑第351章 天眼第278章 新的無線調製方式第566章 九龍堂的大哥第119章 偶像、醫院第237章 MIT無線電協會的項目第237章 MIT無線電協會的項目第590章 超能之上第336章 美女評分第96章 研究所所長第407章 極品美女第247章 勘探者火箭第10章 記名弟子第661章 接口第418章 報上名來第25章 好消息第30章 KOCH訓練法第227章 開始入侵第469章 溢出漏洞第183章 破解教程第298章 HELLC重出江湖第37章 160M天線第305章 他不適合你第342章 意外驚喜第225章 黑客聖地第623章 衝浪算法第577章 嚴峻形勢第388章 中間人攻擊第660章 情況逆轉第168章 別犯傻第540章 引蛇出洞第499章 不要殺我!第387章 崩潰的原因第674章 出事了第226章 傳教士第417章 三朵金花第468章 來點有趣的第275章 能量共振波第669章 紅黃藍第132章 三本着作第674章 語言大師第288章 高考第167章 銀行劫匪第175章 破解第591章 一坨狗屎第592章 代碼倉庫第466章 成名高手第625章 合作細節第168章 別犯傻第661章 接口第297章 發展計劃第302章 原來是你第483章 影響第682章 苦逼的蛙人第638章 無間系統植入第254章 槍戰第308章 值得一做第121章 簽證第325章 目標,教務處第385章 無奈之下的選擇第671章 語言第414章 病毒鼻祖第634章 包圍第261章 等着看好戲第12章 熱鬧的頻段第629章 貴人第290章 突破物理限制第254章 槍戰第257章 拯救地球組織第541章 低調的香港黑客第533章 數字娛樂出版公司第68章 形意秘傳第206章 反射和智能第554章 招牌節目第681章 求助第150章 lus? linus!第565章 面具殺人色魔第511章 重傷第678章 隧道任務第232章 比特信使之家第493章 地下一層第367章 爭氣第58章 真情流露第631章 重大發現第336章 美女評分第65章 一拳打飛好幾米第534章 破解小組第420章 世界太瘋狂第90章 熱心的庫克第614章 坦克大戰第319章 殭屍傀儡第261章 等着看好戲第420章 世界太瘋狂第582章 意識網絡?第631章 重大發現第668章 笑容第670章 絲綢之路
第171章 監聽第401章 有點麻煩第365章 不甘第425章 一片漆黑第351章 天眼第278章 新的無線調製方式第566章 九龍堂的大哥第119章 偶像、醫院第237章 MIT無線電協會的項目第237章 MIT無線電協會的項目第590章 超能之上第336章 美女評分第96章 研究所所長第407章 極品美女第247章 勘探者火箭第10章 記名弟子第661章 接口第418章 報上名來第25章 好消息第30章 KOCH訓練法第227章 開始入侵第469章 溢出漏洞第183章 破解教程第298章 HELLC重出江湖第37章 160M天線第305章 他不適合你第342章 意外驚喜第225章 黑客聖地第623章 衝浪算法第577章 嚴峻形勢第388章 中間人攻擊第660章 情況逆轉第168章 別犯傻第540章 引蛇出洞第499章 不要殺我!第387章 崩潰的原因第674章 出事了第226章 傳教士第417章 三朵金花第468章 來點有趣的第275章 能量共振波第669章 紅黃藍第132章 三本着作第674章 語言大師第288章 高考第167章 銀行劫匪第175章 破解第591章 一坨狗屎第592章 代碼倉庫第466章 成名高手第625章 合作細節第168章 別犯傻第661章 接口第297章 發展計劃第302章 原來是你第483章 影響第682章 苦逼的蛙人第638章 無間系統植入第254章 槍戰第308章 值得一做第121章 簽證第325章 目標,教務處第385章 無奈之下的選擇第671章 語言第414章 病毒鼻祖第634章 包圍第261章 等着看好戲第12章 熱鬧的頻段第629章 貴人第290章 突破物理限制第254章 槍戰第257章 拯救地球組織第541章 低調的香港黑客第533章 數字娛樂出版公司第68章 形意秘傳第206章 反射和智能第554章 招牌節目第681章 求助第150章 lus? linus!第565章 面具殺人色魔第511章 重傷第678章 隧道任務第232章 比特信使之家第493章 地下一層第367章 爭氣第58章 真情流露第631章 重大發現第336章 美女評分第65章 一拳打飛好幾米第534章 破解小組第420章 世界太瘋狂第90章 熱心的庫克第614章 坦克大戰第319章 殭屍傀儡第261章 等着看好戲第420章 世界太瘋狂第582章 意識網絡?第631章 重大發現第668章 笑容第670章 絲綢之路