##發佈到外網的代碼,不要打log## 首先得認可,在可能出問題的地方加上log是一個好習慣。可是log很容易暴露一些關鍵信息,好比代碼的處理流程。就算是咱們的log輸出要有開關才能在Debugview中打印,也是不安全的。由於打log的函數在PE文件中能夠被看到,會減小黑客逆向的成本。算法
因此,在代碼中應該用一個宏去控制log的輸出,debug版本才把打log的函數編譯,release版本就不要帶上log了。安全
##敏感數據要加密保存## 這個很容易理解,數據若是未經加密,長期保存在內存中,是很危險的。應該選用一些加密算法,只在內存中保存加密後的串,待用到時,再解密。函數
##加密算法的key動態變化## 就算數據加密了,黑客也是會經過不斷的改變一些值,而後觀察內存的變化去分析其中的規律。加密
舉個例子說吧,好比一個玩家身上的金幣在一個int存放,這個int是通過加密的。玩家身上有1000金幣時,加密串爲0XABCD,10金幣的加密串爲0XEFGH。那麼玩家能夠不斷的從錢莊中存和取金幣,而後反覆在內存中查看,通過幾輪篩選後,玩家就能定位到表示身上金幣的int類型加密串的內存位置了!線程
爲了解決這個問題,咱們能夠在每次讀取金幣的值時,更換一下加密的key,這樣,當玩家把900金幣存放到錢莊而後再取出來時,這時候加密的串再也不是0XABCD了,這一定會增長玩家的破解成本!debug
##敏感數據不要一次所有傳遞## 若是存在線程A和線程B,線程A經過一個函數func,把一組敏感信息,通過解密後,傳遞給線程B。黑客只要hook了這個函數func,就能拿到全部的敏感信息。爲了提升黑客的破解成本,咱們能夠把這些敏感信息,分屢次傳遞。遊戲
##敏感信息不要集中存放## 若是敏感信息在內存中是連續存放的,這樣會很方便黑客攻擊,除了簡單的將不一樣的信息放到不一樣的內存區域外,咱們甚至能夠精細到一個變量,放到不一樣的內存中。好比將一個int分拆成幾塊,存在不一樣的內存塊中,用到時在拼接起來。內存
##敏感信息添加內存校驗碼## 上文提到,黑客可能會經過觀察內存的變化,定位出敏感信息的內存地址。這時候,黑客可能會試探性的修改一些值,而後回到遊戲中查看是否生效。編譯
咱們須要給敏感數據的內存添加校驗碼,當讀取內存時,先要檢查內存的校驗碼是否匹配,寫內存時,也會同時更新校驗碼。當發現校驗碼不正確時,咱們就知道,此時內存正在被黑客篡改!變量
##小結## 全部的這些策略,都不能保證客戶端代碼的絕對安全,咱們只是增長了破解的成本。