老趙剛才提到的外掛一詞也激起了孫軼民的好奇。關於遊戲外掛,自打孫軼民進入公司與老趙共事以來,透過耳濡目染也大致有個概念上的了解。畢竟老趙的崗位負責了《天問》工程的伺服器安全這一塊。
但是關於外掛程式實現的具體細節,他並不是特別清楚。此時便好奇跟老趙打聽了起來:「你給我科普一下看,遊戲外掛具體是如何工作的?篡改伺服器上的資料嗎?」
「嚴格上說確實是這樣,」老趙解釋道,「對於網遊來說,外掛程式準確的定義指透過駭客手段串改伺服器遊戲資料,或者利用遊戲設計上的漏洞實現諸如穿牆,瞬移之類的非法操作,從而為玩家謀取利益的作弊程式或軟體。從本質上講,她就是一種駭客攻擊軟體,是非法的。但是這種程式只存在於網遊剛剛流行的那個時代。如今隨著網遊安全技術的不斷提升,這樣的外掛程式基本上不存在。」
「哦?是嗎?」孫軼民一臉疑惑的望著老趙。
老趙慢條斯理的繼續解釋道:「現在市面上流傳的大多數所謂外掛,其實根本不算真正意義上的外掛,它頂多只能叫做遊戲輔助程式。因為它不能篡改伺服器資料,也不會對伺服器造成損害或增加額外的負擔。它的作用是幫助玩家提高遊戲操作的效率,速度,從而占據優勢。比如說一些輔助城西可以代替玩家手動操作,從而提高角色的行動速度與精準性,等等。這些輔助程式一定程度上造成了對其他玩家的不公平,因此作為網遊運營者來說,對此還是要反對與杜絕的。」
孫軼民琢磨了老趙這一番話,大致明白了其中的含義。想來,自己近日在計劃著手製作的一個可以在醉風月中操作他的霸王角色自動戰鬥的程式,也並不屬於什麼非法外掛,而是一種輔助程式而已。因為孫軼民根本沒有想過要去黑遊戲伺服器或者篡改資料,他只是希望藉助這一輔助程式來提升操作速度與戰鬥效率。
但是這個工程他目前只完成了一小部分——用程式代替手指自動按鍵的功能,剩餘關鍵部分如何實現,他還沒開始好好琢磨。今日是個不錯的機會,他想藉此好好請教一下老趙,看看是否能在技術方面獲得一些有用的資訊。
「那你能不能說說,現在那種遊戲輔助程式,具體是如何工作的呢?」孫軼民問。
「目前的輔助程式分兩種,」老趙重新坐了下來點上煙,緩緩吐出一口深灰色的煙氣之後,他解釋道:「其中第一種是最原始的模擬按鍵程式,這種工作原理很簡單,無非是用程式向遊戲視窗傳送虛假的按鍵資訊,從而代替手工按鍵。它不能解讀從遊戲伺服器返回的資訊從而判斷遊戲角色自身的狀態與各種屬性數值,只能傻乎乎的按照設定好的順序傳送虛擬按鍵,僅此而已。說白了,他的作弊效果非常有限,對遊戲造成的不公平性也不大。對於這種,我們一般都不太去管。」
孫軼民暗想,這種輔助程式功能確實連菜鳥程式設計師都會都會,自己昨晚就做出來了。然而對於他的遠大目標來說,這並沒什麼卵用。
「那第二種呢?」孫軼民問。
「另一種就比較高階了,技術含量也比較高。它可以解讀遊戲客戶端接收到的資料,或者從客戶端程式虛存中讀取各種遊戲資料,然後從這些資料中解譯出各種遊戲資訊,比如角色當前的生命值,技能冷卻狀態,自己的增益或受控狀態等等。然後根據這些資訊,讓程式操縱遊戲角色隨機應變,作出合適的動作或操作。舉個簡單的例子來說:輔助程式會判斷自身角色的剩餘生命值是否低於某個閾值,如果是,那麼自動服用生命恢復藥劑。」
「那麼輔助程式如何操縱角色動作?」孫問。
「有些輔助程式可以偽造資料包傳送給伺服器,從而可以取代遊戲的客戶端直接操作角色行動。但是這種製作難度高,而且很容易被發現,一旦被發現角色就容易被封號。所以現在大多數的外掛都是透過向遊戲客戶端傳送模擬的按鍵資訊的方式來驅動角色的動作,也就是說,客戶端必須存在。這種操作方式從本質上不屬於非法操作,因此比較難被監測到。」
「那你們是如何防範這些輔助程式作弊的呢?」孫軼民用右手柱起腦袋,望著老趙,好奇的問。
對此,老趙耐心的解釋了一番:「對於第二種,最關鍵的措施就是對於傳輸的資料進行加密了,加密方式越高階越安全。就現在而言,基本上沒人能夠破解這種傳輸方式的,所以,這種外掛的製作難度非常高。對於第一種的話,只能從客戶端著手,讓客戶端程式檢測收到的按鍵資訊是否虛構,但這個其實很難預防,因為聰明的程式設計師完全可以把視窗訊息模擬的真假難辨。不過我們還有另外一種方法,那就是掃描客戶端所在電腦的程序列表,找出市面上常見的那種按鍵外掛的程序名稱,上報給伺服器就行了。」
「加密?難道以前的遊戲都是明碼傳輸資料的?」孫問。
「嗯。以前的網遊資料傳送方式基本不加密,或者加密方式非常簡單,很容易被人破解,所以導致輔助程式泛濫。但現在情況不一樣了。它在資料傳輸方面採用了更複雜更強壯的加密方式,因此你想透過解讀資料包來獲取遊戲數值是難上加難,更別說想透過程式向伺服器傳送模擬的遊戲資料了。」
「正如你剛才提到的,除了解讀客戶端接收到的資料包,還可以透過鎖定關鍵遊戲資料的虛存地址來獲取遊戲資料啊?」孫軼民脫口而出。
「虛存中儲存的遊戲資料也是經過加密轉換的,不知道加密方式和密碼,你根本就沒辦法去分析,還談什麼鎖定記憶體地址?」老趙笑道。
孫軼民愕然。思索良久,又想到了一點,問道:「其實除了解讀資料包和分析虛存地址,還有一種方法也可以獲取資料,那就是透過子視窗控制代碼。比如說,我想讓程式獲取我的角色身上攜帶的金幣數量,那麼我可以先鎖定包裹介面的子視窗控制代碼,然後透過控制代碼號呼叫API函式,就可以獲取此子視窗上的任何資料。不是麼?」
「呵呵,你能想到的,我們反外掛部門都想到了。構建客戶端介面採用windows子視窗?那是老古董的網遊設計師的做法了。現在的網遊介面除了一個主視窗,在其內部沒有任何一個子視窗。所有的對話方塊,文字框,都是採用GDI函式畫出來的,明白麼?唯一你能得到的,是遊戲主視窗的控制代碼號,但那沒有任何意義。」
原本對於製作戰鬥輔助程式信心滿懷的孫軼民,此時忽然遭到了沉重的打擊。可以想見,醉風月的運營方,肯定也做了這樣的防範措施。看來自己的宏大目標只能停留在構想狀態了,根本無法付諸實施。
而老趙的總結也從側面證實了這一點:「事實上透過採取這些防範措施,現在市面上真正牛逼的網遊輔助程式已經很少見。現在市面上有的輔助程式,無非就是一些按鍵精靈之類的軟體,雖然有些先進一些可以自助寫按鍵指令碼,但本質上還是盲人摸象型別的。對玩家的實際幫助不大,對遊戲造成的危害也不大,基本上屬於第一種。」
孫軼民點了點頭。沉默了一會兒,抬起頭問道:「按你剛才所說的,市面上流行的輔助外掛因為程序名稱的關係容易被發現。那麼如果一個懂得程式設計的玩家,自己設計一款自己專用的輔助軟體,不在市面上流傳,對於你們來說,還是很難發現它的。」
「這是沒錯。」老趙說道,「但這無關緊要,如果只是一個玩家在用外掛,對遊戲整體上影響不大。我們也不會刻意去對付。」
孫軼民又問:「那麼你在工作過程中,有捕獲過類似第二種那麼厲害的外掛麼?」
「從來沒有,因為這難度太高了。」老趙答道。
孫軼民笑掩飾:「純屬好奇。」
老趙起身掐滅了菸蒂,提起公文包離開了。孫軼民也收拾了一下,帶著一些失落的情緒,步出了辦公室。
老趙的講解給了它很大的打擊,但此時他心中仍然有些不服與不甘。他想:「回家我再試試,或許事情並沒有老趙說的這麼難。」
出門的時候,再次碰到了黎允兒,站在公司大門口似乎在等人。沒多久,遠處一個頭髮染成爆炸式紅色看不清楚容顏的瘦弱男子,騎著一輛摩托出來到停車場中,抬頭望這邊忘了一眼。擺了個奇異的手勢。
黎允兒隨機興沖沖的跑去,跨上摩托車后座,絕塵而去。
孫軼民看得一臉訝異,問老趙:「這誰啊?」
「他男朋友啊,好像是剛換的。」老趙不假思索道。
「這小小年紀的小屁孩談什麼男朋友,現在的女孩子啊,真是不可思議。」孫軼民感慨道。
「小孩的世界咱們理解不了,有代溝也是正常的。我家那女兒在學校都有了喜歡的小男生了。」老趙笑道。
「你女兒幾年級。」孫問。
「六年級,小學。」
【請到①⑦К閱讀㊣版】