請教如何防止Creator裡的人物設定資源遭受破解

各位先進好:

我是打算發佈到原生平台上的 ( Android及IOS ),

現在遊戲需要一個設定檔,也就是人物的數值設定,
例如 攻擊速度、行走速度、基礎血量、守備力等等的數值,
目前是打算使用 Json 檔來做為設定檔,
在人物Initialize的時候,將相關的數值讀取進來,

我想到的幾個基本防破解機制如下:

  • 使用C++代碼,防止遊戲在被root或JB的手機上運行
    例如當發現系統裡有 /bin/su 就直接報錯,退出遊戲
    ( 雖然我覺得這樣好像有點笨 )

  • 儲存Json檔的時候,將Json先進行加密,在運行時期讀取出來後再解密使用

  • 在Json檔內的數值,不直接儲存數值,而是使用表達式,
    在運行時期再經由eval的方式將實際數值運算出來 ( 例如:數值是100,那就儲存 40+70-10 )
    那麼理論上,玩家想透過變數值搜索來修改記憶體難度就會比較高

  • 在戰鬥結束後,使用另外一個設定檔的副本,來校驗戰鬥中是否有數值遭受修改

目前大概是想到以上這些,

想請教各位前輩,是否有什麼建議可以給小弟呢?
感激不盡 :grinning:

1赞

能自己实现一套 c++ 加密存档机制当然最好拉

比较简单的方法是直接用 cc.sys.localStorage 接口,加上 js 层的加密算法,在存储 json 数据之前加密,这样原生数据库里保存的是加密后的数据。打包时 js 代码会被编译成 jsc。

2赞

謝謝 @nantas 南神的建議 :blush:

打算使用 crypto 這套 nodejs 的庫來實作js層的加解密

由於遊戲本身需要一套基礎數據設定檔,
( 玩家的角色數據,是基於這套數據,再疊加上等級加成等生成的 )
基礎數據這部份會由伺服器傳送過來,
只有玩家的角色數據會緩存在 cc.sys.localStorage 裡,

因為小弟自已也還沒有構思清楚全部的細節,
所以才需要詢問一下各位比較有經驗的大神,謝謝您的回覆 :grin:

数值设定,这些都是应该存在服务端的东西啊。游戏运行起来再从服务端读配置。
攻击速度和行走速度这种,还要额外通过心跳包来保持验证。
至于基础血量和防御力,客户端只负责显示,攻防掉血计算都在服务端做完,然后告诉客户端还剩多少血,客户端显示出来就可以了。

1赞

也许是单机~

謝謝 @wangzhe 領導的建議 :relaxed:

的確像您說的一樣,
所有的數值設定,在遊戲開始的時候由服務器傳過來,
這樣可以避免掉許多問題,目前已經朝這個方向去做設計

您提到的 攻擊、掉血 這個部份的,
由於我的遊戲是回合制 (3分鐘) 一場的設計,
目前是打算在客戶端做驗證,
當然,基礎的HeartBeat、戰鬥獎勵即時計算,還是由服務端處理,

因為我的服務器跟線路都是自已的,全部都做實時連接的話,可能會吃不消:cry:

所以才打算把客戶端的驗證做的牢靠一點,
最後再透過服務端做二次驗證,這樣應該可以避免大部份的問題

當然… 真的遇到高手,是怎麼都防範不了的
所以我在服務端,會做另一套掃描子系統,用來檢測數據異常的用戶
把等級提昇速度異常、戰鬥完畢速度異常… 等等之類的用戶做封號

以上是我目前的計劃,不曉得是否還有什麼可以加強的部份呢?

感謝您的建議 :grinning:

基本上,你这样设计已经没有什么漏洞了,就算有漏洞也会被事后扫描系统抓出来封号。

1赞

謝謝兩位大神的提點,感謝 :joy: