我們從圖書館里借了很多關于硬件方面的書,經過一個星期的研究,費了九牛二虎之力,終于把代碼取出來了,還放到了我的筆記本電腦上。
取出代碼后的第二步便是研究代碼,那是我們老虎機計劃最重要的一步,然而我們碰了很多預想不到的問題。
第一個是警察查房,二零一七年時深圳出臺了很多關于房子宏觀調控的政策,于是乎,我們公寓附近很多平民租房紛紛改建為公寓,在我們那一片區域,很多租房被逼搬進搬出,人口流動量特別大,警察隔三叉五便會查房作人員流動登記。我們很擔心的是被警察認出那是老虎機的主板,于是每次研究時都會將大門關上,將窗戶窗簾拉下,像做賊一樣。
第二個是季純在那時搬到了我們公寓,她就住我們隔壁602,她在她原公寓沒有等到那個的男孩子,就決定離開了。搬家是個麻煩的混賬事,我們三個男生幫季純搬家整理東西花了整整一個周末的時間。
第三個是我們工作上的事分了我們很多心神,過完年后,我們公司準備進軍3D打印機這一塊,王老板很看好3D打印機市場。
二太子對于3D打印機質量這塊抓得特別嚴格,甚至到達一種吹毛求疵地步,為了保證產品的質量以及生產數據的可靠性,他要求我們深圳分公司仿寫歐美一款叫菲馬系統的軟件,這菲馬系統其實是潛在的失效模式及后果分析幾個英語單詞首字母的縮寫,簡拼成菲馬系統。
為什么不直接購買這套系統,其一是因為國外軟件的版權費太昂貴,維護起來也相當麻煩;其二是菲馬系統作用的對象比較特殊,不具備大眾化,因此這款軟件在國內連個破解版的都沒有;其三,也是最重要的一點,最費時費力的是就連菲馬系統怎么使用都要軟件公司派專人過來現場教,可以說相當麻煩;斟酌再三,二太子準備動用公司資源人力仿寫此系統。
這菲馬系統比較龐大,界面和框架本身比較復雜,其中有很多的圖形處理界面,于是我們過完年后,便忙起這事來,而且忙得焦頭爛額的,所以很多時候加班加到很晚,根本沒時間做其他的事兒。
第四個是技術上的問題。
我們取出來的代碼是機器碼,也就是二進制代碼,那里面全是0101字樣,密密麻麻的,連斷句都不知怎么斷,完全沒有可讀性。于是,我們先作了反編譯處理,將那些機械代碼反編譯成能易理解和讀懂的更高級些的匯編語言代碼。
雖然反編譯的代碼容易理解很多,但也存在弊端。
通常來說,程序員在編寫程序時通常會有些注釋,解釋,標記,以便于日后自己或他人在閱讀自己代碼時,知道當初這樣設計的用意和最初目的,但在反編譯后,這些類似于路標,書簽一樣的東西全部沒有了。
用一句話來概括我們遇到的技術難點是第一次接觸老虎機這種機器,沒有說明文檔,也沒有輔助文件,連匯編代碼中的注釋語句都沒有,想通過直接閱讀代碼方式,完全弄懂整個老虎機的設計流程以及所有細節,那簡直是不可能的事兒。
一開始我的研究工作走入了一個誤區,我們采用剝繭抽絲的方法,想將每一句代碼從頭到尾都弄得一清二楚,我們一行一行的往下閱讀著代碼,每閱讀完一行,便會在行后面加上注釋,有不理解的地方,會在行后打個問號,希望看完所有代碼重新回頭再看時能有所收獲。
后來我們發現這種做法不是很明智,因為越往下看,發現問題點越多,探討了半天也討論不出個結果來,很多時候都直接陷入死胡同和迷失在茫茫的代碼海里。
后來我們改變了策略,用一個行業話來形容我們的新策略叫關鍵代碼段。
老虎機最核心最關鍵的是如何隨機產生數,所以我們只需要找到產生隨機數的關鍵代碼,并弄懂它們即可攻破老虎機,我們當時是那樣想的,后來實事證明,我們當時的決定非常明智。
經過了長達一個月的苦心研究,終于我們在二零一七年四月十六號的晚上,揭開了老虎機神密的面紗,我感覺那段時間,我起碼死了幾億的腦細胞,頭發都不知道白了多少根,加良更慘,差點就謝頂了。
我們取得成功最重要的一點是我們豐富的開發經驗給了我們很大的幫助,產生隨機數的算法在編程里經常要用到,在開發菲馬系統時,我就曾用到。
在我所從事的高級語言的開發中,具體怎么實現產生隨機數呢?當然是調用隨機函數,然后是人為輸入一個數字作為種子,由不同的種子和其他復雜的數據融合碰撞后,得到一個看似隨機的結果,這便是一般隨機數產生的核心算法。在這種產生隨機數的算法中,種子的選擇很重要,因為相同的種子會產生相同的結果,所以這隨機數其實是一個偽隨機數,而并非真正意義上的隨機數。而我通常會以服務器的實時時間為種子,因為實時的時間永遠不會重復,這樣才能保證最大化接近隨機。
瑞典著名計算機科學家Wirth提出一個很經典的理論是說:程序其實是等于數據結構加算法,這個理論套用任何計算機上都實用,包括老虎機。
老虎機內部隨機數產生算法跟我們高級語言的算法極其類似的,它里面有一個叫隨機數生成器的東西,它跟隨機函數的功能很類似,能產生無法預測的、無窮的隨機數列。
隨機數生成器也需要種子,那么它的種子是如何來的呢?我們通過分析得知,它其實來源于老虎機內部芯片記錄的時間。
同樣的問題,這個虎機內部芯片記錄的時間又是怎么來的呢?我們又通過分析得知,它是通過外部人員下注時按下拉桿的時間,這個時間被會記錄下來,并作為參數傳遞給隨機數生成器。
所以,老虎機最終產生的結果依賴于偽隨機數生成器,偽隨機數生成器依賴于內部芯片記錄的時間,內部芯片記錄的時間取決于外部拉下拉桿的那個時間點,這就是老虎機奧秘所在。
于是,我們費了九牛二虎之力根據老虎機的核心算法,仿寫了一個叫老虎機字典的程序,用‘字典’二字來形容我們那個破解的程序很貼切,因為只要人為給它輸入時間,它便能根據相應算法,產生老虎機最后隨機數的結果,它就跟字典一樣,能查看所有時間點的老虎機產生的結果。
研究出成果的那一天,我們臉上的興奮簡直無法言表,總算是黃天不負有心人。
我們的研究成果是否經得起實踐的檢驗,這個要等到去了澳門賭場才知道,但如果老虎機字典真可行的話,可以這么說,我們能通過它把賭場的老板給贏個精光,它成讓我們成為世界首富。