艾格拉斯张鹏:重度手游防外挂及安全
生活随笔
收集整理的這篇文章主要介紹了
艾格拉斯张鹏:重度手游防外挂及安全
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
艾格拉斯張鵬:重度手游防外掛及安全
圖/文 游戲茶館
前言
? ? ? ? ?2015年1月10日,【問道一線】品牌沙龍第一期,有幸邀請到的艾格拉斯創始人之一、CTO張鵬先生,以《游戲防外掛及安全》為主題,進行了近60分鐘的線下分享。在文前,再次向艾格拉斯,及張鵬先生本人表示誠摯的謝意。
? ? ? ? ?張鵬以艾格拉斯自研、自運營,2012年7月上線,目前支持8個語種的重度手游《英雄戰魂》為背景,對游戲安全做以下五個大類做分享:游戲服務器防外掛、游戲服務器防黑、web平臺的api安全、客戶端防外掛和備份。
(注:【問道一線】是游戲茶館和CSDN共同主辦,獨屬于開發者的純技術小型手游分享會,每期一個主題,根據主題邀請一線人物獻身說案,講述開發,運營中,跳過的那些“坑”。俗稱,開發純干貨。)
一、游戲服務器防外掛
1、客戶端的安全和網絡連接
? ? ? ? ?做ARPG,通信這塊兒是要非常注重安全的,曾經我們遇到過,有用戶用截包器把包攔下來了,然后把數據改了,再發過來。其實現在,在手機游戲上,之前游戲的外掛、黑客,都能遇到。? ? ? ? 我們在通信這塊兒,是強鏈接,在加密的方式上,你的密鑰不能是固定的,我們使用的是一個有序的秘鑰,比如,這次我們是“1”,下次是“2”,在下次是“3”……當然,這只是舉了一個例子。
? ? ? ? 這樣做的好處是,一旦你的游戲包被用戶截住以后,他沒有把辦法通過這個包的秘鑰或固定方式去破解。當然,他要是看到了你游戲的原碼或者是分析了代碼的工作方式,那也沒轍。因為這是在客戶端做的事情。
? ? ? ? 更加完整的加密方式,需要非對稱加密。服務端和客戶端約定一個鑰匙,這個鑰匙需要一個公鑰和次鑰進行匹配,通過約定的鑰匙雙方進行通信。每個包在發送之前,都是用不同的鑰匙加密,每次加密通過錯位等方式,將相同數據加密的結果每次都不一樣,這樣他們就很難分析。
? ? ? ? 以前在PC活躍的外掛開發者,在做手游外掛的時候,基本是無所不用其極,我們遇到最嚴重的,是直接把安卓包,直接把里面的SO這個文件破解,反編譯把其中一個指令給改了。
? ? ? ?首先第一點,在游戲過程中得把大門守好。
2、防加速
? ? ? ? 加速是最影響用戶體驗的行為。也是對游戲影響最直接的。之前,《英雄戰魂》也遇到過這樣的問題,有一個玩家,他發某一個技能的頻率就很高,游戲是10秒發一次,他是1秒發一次;另外是對其他用戶,兩個人PK,用戶花的錢比對手多,卻一秒鐘被打死了。? ? ? ? 這個怎么解決?由客戶端向服務器,定期的發一個數據包,這個包的內容是當前時間。這樣子可以做2各方面的事情:一方面是服務器能根據包,接收到這個包的頻率,這個包發過來監測客戶端,如果加速了,客戶端頻率會升高(當然會有一個誤差值),如果過高我們會給他暗地里記上一筆,如果持續增高,那么這個用戶就是在作弊了。還有一種加速是,不改發包頻率,改客戶端某一個操作的頻次,提高頻次,服務器通過頻率沒法解決,可以客戶端的時間來監測。
? ? ? ? 一般加速外掛,不是針對某一游戲設計的,是通用的,把整個系統或者是進程的速度提升上來。通過客戶端第一個包和最后一個包的時間差,與服務器第一個包和最后一次接受的包的時間做比較,如果時間差越來越大,那么這個玩家就是在作弊。
3、賬號登陸校驗
? ? ? ? 賬號登陸系統,防止用戶被盜號。有時候,游戲設計者會把用戶名和密碼放在客戶端,如果有些用戶裝著惡意程序,有可能會被盜號,那么驗證這一塊兒,主要是防止用戶的密碼在傳輸的過程中被盜。比如HTTP在傳輸過程中,密碼傳輸和簡單的加密,都很容易被破解。? ? ? ? 一種方式是,使用HTTPS,現在基本大的網站和安全性比較高的網站,比如淘寶、支付寶這樣子的,登陸都使用的是HTTPS,另一個就是,采用服務器與服務器之間的通信,這個是可信的,然后為了使傳輸過程中,密碼不泄露,采用了MD5加密(這個加密是單向加密,只能加不能減),最后匹配這2個MD5的串兒密碼是不是一樣的。
? ? ? ? 有一個經驗給大家分享:如果你用它的密碼,生成了一個MD5的串兒,那這個串兒就會永遠有效,用戶也可以拿著去登陸,這個是不允許的,所以我們在這個加密MD5的時候,讓它加入一個時間戳,這個時間戳,它不能太精準,太精確會有問題。比如你精確到秒級,服務器那端也是秒級, 這2個串兒的驗證是通不過的。比如,那個是3秒加密的,到這邊也需要3秒加密,而實際上服務器這邊是變化的,隨著時間增加,所以把時間精確到10分鐘以內比較合適,再設置時把時間單位精確到毫秒,但把后面6位都填為0,然后它的時間應該在17分鐘左右,往前推17分鐘,往后推17分鐘,這樣產生一個MD碼,那么就是加密方和匹配方,這2個只要相差在正負17分鐘之內,就是可以驗證通過的,這樣就能防止用戶拿著一個MD5碼就去登陸。
4、關鍵數據服務器校驗
? ? ? ? ?關鍵數據(如技能CD、走路速度及距離)服務器校驗,防止技能加速,瞬移,穿墻。部分采信客戶端,關鍵數據以服務器為基準。戰斗數值以服務器為準。? ? ? ? ?游戲過程中如果用戶采用加速或者是修改客戶端的形式,使一些關鍵數據,比如發招的頻率發生改變的時候,你不能無所事事了,這時候你需要去做一個校驗,允許這個大招每10秒才能發送一次,那么我就記下,把這個招的上次發生的時間和這次發生的時間,考慮網絡傳輸的時間差(需要有一定誤差允許),比如你在7、8秒發過來我也是允許的,但是你要是在5秒或者是更短的時間發過來,就不被允許了。你可以發,但是不會生效,就像某個人打了一拳過去,但是并沒有少血。
? ? ? ? 有時候,你判定太嚴的話,用戶有時候真的是因為是網絡原因傳輸速度的問題,導致用戶被踢下線了,打電話過來質問客服。以前,客服就有被罵哭的。其實,我們在驗證的時候,不能太嚴,如果多次被記錄有違規的情況,給他再做進一步處理。
? ? ? ? 主要是說,服務器端對一些關鍵性的東西,要做一些校驗,并且這個在計算過程中,以服務器為準,目前,我們公司的游戲,大多所有戰斗、傷害數值等有關的數值,都是以服務器產生的,在最多的時候,服務端會說,我打到誰了,服務端會驗證,可不可能打得著。戰斗過程的傷害這些,全是由服務器來計算的。客戶端,作為一個表現,來反饋給用戶。
5、監控指令發送頻率
? ? ? ? 這個監控指令的發送頻率,跟剛才那個是有關系的,某一些指令你發送過于頻繁的話呢,會導致這個游戲失去平衡,用戶在它那兒,只要對他有利的,任何辦法,他都可能用得上,所以,是需要監控某一些指令的發送頻率。? ? ? ? 為什么單列出這一點,是有一些指令它其實發送頻率本來就很高,有一些是每秒甚至每500毫秒發一次,所以你在校驗的時候,很難在2個指令之間判定是否符合條件,因為網稍微卡一下,200毫秒就過去了,如果這個技能是500毫秒的話,它已經超過一半了,所以很難。所以,統計一段時間之內的平均發送頻率,這樣最終能夠判定這個用戶是否真正在作弊。一段時間之內平均發送時間超過了一半,那么就是有問題的。
? ? ? ? 那么,當我們監測到用戶可能在作弊的時候,我們就讓客戶端發回來這個用戶的進程列表,然后通過這些進程列表,配置了已知的外掛的進程名字,因為世界上外掛非常多,有些用戶可能自己開發了一個外掛,所以,只能對已知的比較知名的,去比較監測,如果說有大量的用戶反饋,某一個用戶在作弊,然后我們會調出來他的進程列表,看是否有可疑。比如,如果有一個人在每次被反映他在作弊的時候,都有一個進程,并且這個進程是未知的,不知道是干嘛的,那就比較可疑了。那么,這件事情,就變成人工的了。
二、游戲服務器防黑
? ? ? ?當游戲相對市場來說,用戶比較多的時候,黑客就有利可圖。1、操作系統最小化安裝
? ? ? ? 首先,很多公司都是用linux,用windows很少了。在裝的時候,最小化安裝,然后開放的服務和端口最少,只把我們需要的應用端開了,其他的端口都關著。因為,有些應用它有漏洞,如果你沒有專業的技術去處理這些問題,很有可能他就從某一個漏洞進來了。
2、 遠程操作限制
? ? ? ? 然后,我們一般是用SSH去登陸遠程的計算機,還有呢我們的mysql端口,這些面向公網開放的話,是很不安全的,后來呢我們利用ss5代理登陸ssh,mysql,所有游戲服務器,采用遠程終端管理系統進行管理,服務器自上架后,所有的管理操作由此系統完成,管理系統單點登錄,僅開放一個服務端口,有效防止黑客入侵。對操作者來說是一樣的。當然,如果公司比較有錢,可以搞一個硬件防火墻。? ? ? ?ss5代理服務器安全,啟用SSH證書登錄驗證,禁止root密碼登陸方式。這樣,可以防止密碼泄露的情況下被黑。
3、GM遠程操作限制
? ? ? ? 另外一個,遠程操作限制。最早的時候,有用戶切入到系統里面來了,拿到了我們GM工具,這是給客服用戶,它拿到這個東西以后,開始給別人加錢,在淘寶上賣,賣磚石,賣代幣這種形式來串改游戲數據。后來,我們在這塊兒加入了一個用戶驗證信息,以服務器到服務器的通信形式。現在登陸的這個用戶是否是合法的。4、應用啟動權限
? ? ? ? 在服務器上,起應用的時候,千萬不用root,我們最早那波被入侵的時候,就是因為我們的java應用或者是服務什么,都是以root來啟動,然后黑客一旦進來以后,什么都看見了,最后把所有的系統整理以后,不能以root方式啟動,必須給他創建一個新的用戶, 然后用那個用戶啟動,并且那個用戶,只對那個文件夾或某一個應用生效,要不然就很危險。5、數據庫管理
? ? ? ?mysql用戶權限分離:root,操作用戶,游戲用戶數據庫的密碼文件采用多次加密方式,系統內不存在明文密碼。并且數據庫密碼周期性的更新。防止侵入后,數據庫密碼泄露。? ? ? ?把操作用戶分離,跟系統這塊創建新的用戶來運行是一樣的道理。就是不能把root開放給游戲或者是很多的人。最后,就是系統內核、數據庫、jdk及時升級或打補丁。
?案例1:
? ? ? ? 早期,因沒有啟用socks5單點登陸服務器,服務應用采用root啟動,僅使用iptables來限制,遭到了黑客入侵,利用服務漏洞進入我們服務器,并安裝木馬代碼塊,利用“中國菜刀” 遠程登陸入侵。? ? ? ? 這個叫“中國菜刀”的黑客工具,入侵進來以后,在我們一個HTTP的一個服務器上,掛了這個東西。這實際上是一個很簡單的PHP/JSP 的一個網頁,但他能通過這個網頁做很多事情。它獲取到GM工具以后,拿到了比較高權限的用戶密碼,把號盜走了。
案例2
? ? ? ? ?早期,黑客利用專有gmtool工具入侵游戲服務端修改數據? ? ? ? ?解決辦法,啟用了認證服務器,服務器應用https服務,采用s2s通信,避免入侵及損失。
三、web平臺的api安全
? ? ? ?通常web平臺的安全主要指通行證驗證系統,充值系統服務端,渠道sdk服務端。1、應用服務器管理功能限制
? ? ? ? 應用服務器(Glassfish)的管理端口只允許ss5代理服務器的IP訪問;應用服務器使用非root用戶啟動,以防止黑客入侵成功后獲得操作系統的控制權限,并通過iptables的端口轉發功能,將對80端口的請求轉發至應用服務器提供服務的端口;? ? ? ? 對游戲服務器或渠道方訪問的API接口(如:充值回調)設置了IP白名單;我們公司使用的是一個Glassfish集群提供的一些充值等服務,他的管理端口不能對公眾開放,必須使用單點登陸的方式去訪問,使用非root啟動,少開端口,對一些比較特別的IP使用白名單,Ip白名單,比如說:充值回調。百度、360等渠道告訴我們這個游戲充值成功了的時候,只允許它個別的IP來訪問,不允許公眾來訪問。
2、密碼別名
? ? ? ?在應用服務器內配置需要使用密碼的資源時(如:數據庫連接池),通過應用服務器提供的密碼別名功能,隱藏數據庫賬號的明文密碼。? ? ? ?當部署的應用需要使用數據庫資源時,只需將別名注入到應用中,應用只能獲得數據庫連接,無法獲取到數據庫賬號。
?防止在開發過程中,數據庫還有一些其他的密碼泄露。解決密碼以明文方式顯示。
3、數據庫限制
? ? ? 為應用分配賬號時,創建獨立的表空間,且只對此賬號可見,同時收回賬號對表、表索引、存儲過程、函數的刪除權限
四、客戶端防外掛
1、資源檢測機制
? ? ? ? 由于限制了其他作弊方式,玩家中通過修改客戶端的資源來使某些值變化,比如速度值,技能cd等。? ? ? ?檢測客戶端資源文件md5,報告給服務器做驗證。
2、內存數據混淆和修改
? ? ? ?關鍵數據內存混淆已及修改檢測,玩家位移,玩家位置的檢測,跟客戶端的關鍵數據內存混淆相結合,關鍵數據傳送服務器校驗,位移位置數據,有效防止玩家穿墻,加速,瞬移等作弊手段。? ? ? ?有些用戶用瘋狗還有其他內存修改器,去改游戲運行過程當中的數,當然怎么改,通過不同的匹配數,改一下匹配一下,改一下匹配一下,最后查找到這個位置是血,然后把它鎖定成10萬,永遠不死的。改了以后,再去和別人PK,把血鎖定,就永遠不會死。怎么解決?一個是我通過要服務器去驗證,另外一個在客戶端,在制作的時候,把關鍵數據在內存里面混淆。
? ? ? 在內存里不是以一個通常的數字放在里面,而是經過加密,用戶是找不著這個數的,普通的用戶不能通過內存修理器去改這個數據。
3、文本資源加密
? ? ? ? 通過可逆的加密算法,加密敏感的文本資源,使用戶不能通過簡單的二進制查看得到具體的內容。? ? ? ?這個通常不會對游戲平衡性產生影響,但是也不好。從公司出去的東西,不讓用戶改,自定義改變格式,用戶就不可以用一些普通的方式去竄改。
? ? ? ? 數據庫,主從要分離。當你的用戶量很大的時候,主庫寫,從庫讀。主庫不要做統計功能,比如你要看日活多少,3天內登錄多少,不要在主庫上去做,在從庫上去做,這樣不影響主庫服務用戶。以前,我們嘗試過半夜3點鐘去做這些統計,但還是有一會兒用戶就登不上。
? ? ? ? 然后把二進制LOG打開,防止在極端的情況下,回檔。有時候,硬件壞了的情況,數據配置錯了,刷錢,刷物品等。把這些工作做好了,你想恢復到幾點幾分,都能恢復過去。我們一般是保存10天。
? ? ? ? 每一天有一個備份,這個東西是實時的,這個是冷備,我可以從某一天備份的時間,和編LOG的時間。每次大家在更新之前,一定要備份,防止策劃、程序上的一些BUG,導致用戶在上去以后把數據搞亂了。
? ? ? ?服務器最好用raid,我們主要的數據庫呢都是用raid10,一個是速度快,另外是它安全性很高。
后記
? ? ? ? 分享這些,是希望大家提一個概念性的東西,知道哪些地方有坑,因為我們做每一件時間、人力和金錢的成本。遇到安全性問題,一定要馬上解決,因為用戶的信心非常重要,如果用戶信心崩塌了,你這個游戲基本就走不遠了。今天,我對我們遇到了哪些坑兒,是怎么解決的分享,就到這兒。謝謝。
總結
以上是生活随笔為你收集整理的艾格拉斯张鹏:重度手游防外挂及安全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虎嗅 24 小时点赞器,一个案例附带一个
- 下一篇: 工作汇报ppt案例_职场PPT实战:秒杀