[Unity3D]淺談游戲代碼保護
記得14年底第一次使用Unity3D寫了一篇總結(jié),現(xiàn)在看到里面的觀點發(fā)現(xiàn)又不是值得探討的地方,看來這兩年還是有進步,今天就針
對里面提到的代碼保護做個簡單的思考記錄。
首先項目達到一定規(guī)模、項目比較創(chuàng)新方競爭對手、項目嚴重依賴客戶端代碼那么代碼保護還是盡量做,如果不是也沒必須瞎折騰。
Unity常見代碼保護機制:
1.重新編譯mono,修改mono_image_open_from_data_with_name 函數(shù)。
優(yōu)點:原理簡單、順帶還可以做DLL更新(android)。
缺點:易破解、編譯麻煩、可能存在版本問題以及兼容性問題。
2.同上,但是隱藏加密函數(shù),這個可以在網(wǎng)上搜索下,是第一種方案的加強版。
優(yōu)點:比第一種略微安全、防小白靜態(tài)分析。
缺陷:同上。
3.同上,編譯同時優(yōu)化處理so。(參見常用so加固方案)
優(yōu)點:應(yīng)該可以防住大部分人。
缺點:同上外加難度大。
4.引入自己的輔助so庫,hook mono_image_open_from_data_with_name 函數(shù),自己的so庫做好保護機制。
優(yōu)點:不編譯libmono.so、防靜態(tài)分析。
缺點:安全性轉(zhuǎn)移到自己的so庫了。
5.il2cpp,(沒錢的產(chǎn)品推薦的方法),其實多數(shù)產(chǎn)品使用il2cpp已經(jīng)可以達到很好的保護了,只是不能熱更dll所以很多android產(chǎn)品還是放棄了。
優(yōu)點:很難還原較完整的代碼、加較好的性能。
缺點:android熱更以及android穩(wěn)定性。
6.dll混淆,這個其實在使用mono情況下都應(yīng)該做。
7.采用第三方加固,(有錢的產(chǎn)品大力推薦的方法),都賺錢了自己還是別瞎折騰了,當然有自己的研發(fā)部例外。
缺點展示:
1.mono編譯的形式就不做太多介紹了,ida直接看Mono代碼靜態(tài)分析。
2.hook mono_image_open_from_data_with_name 這種方式看到王者榮耀等騰訊sdk是這么做的。
(這個實驗僅供學習展示了這種方式的一個小小的缺點)
原理清楚了,破解也從原理入手,只要搶先hook mono_image_open_from_data_with_name ,那么代碼還是乖乖的到你這來了。

3.il2cpp 直接上工具:https://github.com/Jumboperson/Il2CppDumper 可以導出頭文件和代碼偏移。
寫在最后:當你意識到需要保護代碼的時候恭喜你估計你的項目已經(jīng)成了^-^。
對里面提到的代碼保護做個簡單的思考記錄。
首先項目達到一定規(guī)模、項目比較創(chuàng)新方競爭對手、項目嚴重依賴客戶端代碼那么代碼保護還是盡量做,如果不是也沒必須瞎折騰。
Unity常見代碼保護機制:
1.重新編譯mono,修改mono_image_open_from_data_with_name 函數(shù)。
優(yōu)點:原理簡單、順帶還可以做DLL更新(android)。
缺點:易破解、編譯麻煩、可能存在版本問題以及兼容性問題。
2.同上,但是隱藏加密函數(shù),這個可以在網(wǎng)上搜索下,是第一種方案的加強版。
優(yōu)點:比第一種略微安全、防小白靜態(tài)分析。
缺陷:同上。
3.同上,編譯同時優(yōu)化處理so。(參見常用so加固方案)
優(yōu)點:應(yīng)該可以防住大部分人。
缺點:同上外加難度大。
4.引入自己的輔助so庫,hook mono_image_open_from_data_with_name 函數(shù),自己的so庫做好保護機制。
優(yōu)點:不編譯libmono.so、防靜態(tài)分析。
缺點:安全性轉(zhuǎn)移到自己的so庫了。
5.il2cpp,(沒錢的產(chǎn)品推薦的方法),其實多數(shù)產(chǎn)品使用il2cpp已經(jīng)可以達到很好的保護了,只是不能熱更dll所以很多android產(chǎn)品還是放棄了。
優(yōu)點:很難還原較完整的代碼、加較好的性能。
缺點:android熱更以及android穩(wěn)定性。
6.dll混淆,這個其實在使用mono情況下都應(yīng)該做。
7.采用第三方加固,(有錢的產(chǎn)品大力推薦的方法),都賺錢了自己還是別瞎折騰了,當然有自己的研發(fā)部例外。
缺點展示:
1.mono編譯的形式就不做太多介紹了,ida直接看Mono代碼靜態(tài)分析。
2.hook mono_image_open_from_data_with_name 這種方式看到王者榮耀等騰訊sdk是這么做的。
(這個實驗僅供學習展示了這種方式的一個小小的缺點)
原理清楚了,破解也從原理入手,只要搶先hook mono_image_open_from_data_with_name ,那么代碼還是乖乖的到你這來了。

3.il2cpp 直接上工具:https://github.com/Jumboperson/Il2CppDumper 可以導出頭文件和代碼偏移。
寫在最后:當你意識到需要保護代碼的時候恭喜你估計你的項目已經(jīng)成了^-^。
posted on 2017-05-04 22:55 l1989 閱讀(2628) 評論(0) 編輯 收藏 引用 所屬分類: 游戲