前言
對於單機遊戲,或者客戶端跑遊戲邏輯且服務器不驗證的網遊,需要一些反作弊手段。
內存數據加密, 遊戲數據合理性檢測, 服務器重跑驗證等都是有效的方案。
本文主介紹內存數據加密。
正文
內存修改器原理:
修改器修改的數值都是在內存中常駐的,也就是說,數值在內存中的地址是不變的。
我們通過一個例子來看修改器的基本流程。
比如遊戲內金幣爲100, 修改器先搜100,會得到值爲100的變量內存地址。
等金幣變200後,再搜200。
一般重複3到4步操作,修改器就能定位到金幣這個變量所在的內存地址。
接着就是修改。
在基本搜索之外,一些強大的修改器還提供了模糊搜索和反加密搜索。
模糊搜索:
一些類似於血條等看不到具體數字的數值,模糊搜索提供了搜索“變大”、“變小”、“變化了”、“沒變化”等操作,進行內存篩選。
模糊搜索的步驟比直接搜數值要多,一般要重複7到10步操作才能找到變量對應的內存地址。
反加密搜索:
顧名思義,當數值經過加密後存放到內存中時,需要反加密才能找到內存地址。一般都是簡單的異或加密或者倍值加密公式。
如何進行內存加密
內存加密一般分爲可逆加密和不可逆加密
可逆加密:
顯示的數據 ~= 內存的數據。
將內存中常駐的數據加密起來,在顯示的時候解密即可。
例如簡單的異或加密或者y = nx + m。
有興趣的可以搜索一些複雜的加密算法。
不可逆加密:
顯示的數據 == 內存的數據。將存儲變量加密,保存在驗證變量中。
在每次使用變量之前,將變量加密與驗證變量對比,這樣就能發現是否內存被修改。
例如計算變量的md5值,並保存起來,下次取值時,先進行md5驗證。
除了加密:
除了加密外,還有些很有用的小技巧。
不斷變化敏感數值的內存存儲地址:將讀寫變量的方法封裝成set和get兩方法, 調用set方式時自動切換變量存儲地址、變化加密密鑰等。
取敏感數值時進行範圍判斷。比如商店商品價格不可能爲負數,單局戰鬥獎勵數量不可能突破天際。