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