第61章:外掛原理
作者:顓煜      更新:2020-11-04 11:52      字數:3344
  老趙剛才提到的外掛一詞也激起了孫軼民的好奇。關於遊戲外掛,自打孫軼民進入公司與老趙共事以來,通過耳濡目染也大致有個概念上的了解。畢竟老趙的崗位負責了《天問》工程的服務器安全這一塊。

  但是關於外掛程序實現的具體細節,他並不是特別清楚。此時便好奇跟老趙打聽了起來“你給我科普一下看,遊戲外掛具體是如何工作的?篡改服務器上的數據嗎?”

  “嚴格上說確實是這樣,”老趙解釋道,“對於網遊來說,外掛程序準確的定義指通過黑客手段串改服務器遊戲數據,或者利用遊戲設計上的漏洞實現諸如穿牆,瞬移之類的非法操作,從而為玩家謀取利益的作弊程序或軟件。從本質上講,她就是一種黑客攻擊軟件,是非法的。但是這種程序隻存在於網遊剛剛流行的那個時代。如今隨著網遊安全技術的不斷提升,這樣的外掛程序基本上不存在。”

  “哦?是嗎?”孫軼民一臉疑惑的望著老趙。

  老趙慢條斯理的繼續解釋道“現在市麵上流傳的大多數所謂外掛,其實根本不算真正意義上的外掛,它頂多隻能叫做遊戲輔助程序。因為它不能篡改服務器數據,也不會對服務器造成損害或增加額外的負擔。它的作用是幫助玩家提高遊戲操作的效率,速度,從而占據優勢。比如說一些輔助城西可以代替玩家手動操作,從而提高角色的行動速度與精準性,等等。這些輔助程序一定程度上造成了對其他玩家的不公平,因此作為網遊運營者來說,對此還是要反對與杜絕的。”

  孫軼民琢磨了老趙這一番話,大致明白了其中的含義。想來,自己近日在計劃著手製作的一個可以在醉風月中操作他的霸王角色自動戰鬥的程序,也並不屬於什麽非法外掛,而是一種輔助程序而已。因為孫軼民根本沒有想過要去黑遊戲服務器或者篡改數據,他隻是希望借助這一輔助程序來提升操作速度與戰鬥效率。

  但是這個工程他目前隻完成了一小部分——用程序代替手指自動按鍵的功能,剩餘關鍵部分如何實現,他還沒開始好好琢磨。今日是個不錯的機會,他想借此好好請教一下老趙,看看是否能在技術方麵獲得一些有用的信息。

  “那你能不能說說,現在那種遊戲輔助程序,具體是如何工作的呢?”孫軼民問。

  “目前的輔助程序分兩種,”老趙重新坐了下來點上煙,緩緩吐出一口深灰色的煙氣之後,他解釋道“其中第一種是最原始的模擬按鍵程序,這種工作原理很簡單,無非是用程序向遊戲窗口傳送虛假的按鍵信息,從而代替手工按鍵。它不能解讀從遊戲服務器返回的信息從而判斷遊戲角色自身的狀態與各種屬性數值,隻能傻乎乎的按照設定好的順序發送虛擬按鍵,僅此而已。說白了,他的作弊效果非常有限,對遊戲造成的不公平性也不大。對於這種,我們一般都不太去管。”

  孫軼民暗想,這種輔助程序功能確實連菜鳥程序員都會都會,自己昨晚就做出來了。然而對於他的遠大目標來說,這並沒什麽卵用。

  “那第二種呢?”孫軼民問。

  “另一種就比較高端了,技術含量也比較高。它可以解讀遊戲客戶端接收到的數據,或者從客戶端程序虛存中讀取各種遊戲數據,然後從這些數據中解譯出各種遊戲信息,比如角色當前的生命值,技能冷卻狀態,自己的增益或受控狀態等等。然後根據這些信息,讓程序操縱遊戲角色隨機應變,作出合適的動作或操作。舉個簡單的例子來說輔助程序會判斷自身角色的剩餘生命值是否低於某個閾值,如果是,那麽自動服用生命恢複藥劑。”

  “那麽輔助程序如何操縱角色動作?”孫問。

  “有些輔助程序可以偽造數據報發送給服務器,從而可以取代遊戲的客戶端直接操作角色行動。但是這種製作難度高,而且很容易被發現,一旦被發現角色就容易被封號。所以現在大多數的外掛都是通過向遊戲客戶端發送模擬的按鍵信息的方式來驅動角色的動作,也就是說,客戶端必須存在。這種操作方式從本質上不屬於非法操作,因此比較難被監測到。”

  “那你們是如何防範這些輔助程序作弊的呢?”孫軼民用右手柱起腦袋,望著老趙,好奇的問。

  對此,老趙耐心的解釋了一番“對於第二種,最關鍵的措施就是對於傳輸的數據進行加密了,加密方式越高級越安全。就現在而言,基本上沒人能夠破解這種傳輸方式的,所以,這種外掛的製作難度非常高。對於第一種的話,隻能從客戶端著手,讓客戶端程序檢測收到的按鍵信息是否虛構,但這個其實很難預防,因為聰明的程序員完全可以把窗口消息模擬的真假難辨。不過我們還有另外一種方法,那就是掃描客戶端所在電腦的進程列表,找出市麵上常見的那種按鍵外掛的進程名稱,上報給服務器就行了。”

  “加密?難道以前的遊戲都是明碼傳輸數據的?”孫問。

  “嗯。以前的網遊數據傳送方式基本不加密,或者加密方式非常簡單,很容易被人破解,所以導致輔助程序泛濫。但現在情況不一樣了。它在數據傳輸方麵采用了更複雜更強壯的加密方式,因此你想通過解讀數據報來獲取遊戲數值是難上加難,更別說想通過程序向服務器發送模擬的遊戲數據了。”

  “正如你剛才提到的,除了解讀客戶端接收到的數據包,還可以通過鎖定關鍵遊戲數據的虛存地址來獲取遊戲數據啊?”孫軼民脫口而出。

  “虛存中存儲的遊戲數據也是經過加密轉換的,不知道加密方式和密碼,你根本就沒辦法去分析,還談什麽鎖定內存地址?”老趙笑道。

  孫軼民愕然。思索良久,又想到了一點,問道“其實除了解讀數據報和分析虛存地址,還有一種方法也可以獲取數據,那就是通過子窗口句柄。比如說,我想讓程序獲取我的角色身上攜帶的金幣數量,那麽我可以先鎖定包裹界麵的子窗口句柄,然後通過句柄號調用api函數,就可以獲取此子窗口上的任何數據。不是麽?”

  “嗬嗬,你能想到的,我們反外掛部門都想到了。構建客戶端界麵采用i

  dos子窗口?那是老古董的網遊設計師的做法了。現在的網遊界麵除了一個主窗口,在其內部沒有任何一個子窗口。所有的對話框,文本框,都是采用gdi函數畫出來的,明白麽?唯一你能得到的,是遊戲主窗口的句柄號,但那沒有任何意義。”

  原本對於製作戰鬥輔助程序信心滿懷的孫軼民,此時忽然遭到了沉重的打擊。可以想見,醉風月的運營方,肯定也做了這樣的防範措施。看來自己的宏大目標隻能停留在構想狀態了,根本無法付諸實施。

  而老趙的總結也從側麵證實了這一點“事實上通過采取這些防範措施,現在市麵上真正牛逼的網遊輔助程序已經很少見。現在市麵上有的輔助程序,無非就是一些按鍵精靈之類的軟件,雖然有些先進一些可以自助寫按鍵腳本,但本質上還是盲人摸象類型的。對玩家的實際幫助不大,對遊戲造成的危害也不大,基本上屬於第一種。”

  孫軼民點了點頭。沉默了一會兒,抬起頭問道“按你剛才所說的,市麵上流行的輔助外掛因為進程名稱的關係容易被發現。那麽如果一個懂得編程的玩家,自己設計一款自己專用的輔助軟件,不在市麵上流傳,對於你們來說,還是很難發現它的。”

  “這是沒錯。”老趙說道,“但這無關緊要,如果隻是一個玩家在用外掛,對遊戲整體上影響不大。我們也不會刻意去對付。”

  孫軼民又問“那麽你在工作過程中,有捕獲過類似第二種那麽厲害的外掛麽?”

  “從來沒有,因為這難度太高了。”老趙答道。

  孫軼民點頭沉默,此時老趙仰起頭一臉好奇的望著孫軼民,問道“咦,你問那麽多做什麽?難道你也要做外掛?”

  孫軼民笑掩飾“純屬好奇。”

  老趙起身掐滅了煙蒂,提起公文包離開了。孫軼民也收拾了一下,帶著一些失落的情緒,步出了辦公室。

  老趙的講解給了它很大的打擊,但此時他心中仍然有些不服與不甘。他想“回家我再試試,或許事情並沒有老趙說的這麽難。”

  出門的時候,再次碰到了黎允兒,站在公司大門口似乎在等人。沒多久,遠處一個頭發染成爆炸式紅色看不清楚容顏的瘦弱男子,騎著一輛摩托出來到停車場中,抬頭望這邊忘了一眼。擺了個奇異的手勢。

  黎允兒隨機興衝衝的跑去,跨上摩托車後座,絕塵而去。

  孫軼民看得一臉訝異,問老趙“這誰啊?”

  “他男朋友啊,好像是剛換的。”老趙不假思索道。

  “這小小年紀的小屁孩談什麽男朋友,現在的女孩子啊,真是不可思議。”孫軼民感慨道。

  “小孩的世界咱們理解不了,有代溝也是正常的。我家那女兒在學校都有了喜歡的小男生了。”老趙笑道。

  “你女兒幾年級。”孫問。

  “六年級,小學。”

  【請到17k閱讀㊣版】

  。