記得14年底第一次使用Unity3D寫了一篇
總結,現在看到里面的觀點發現又不是值得探討的地方,看來這兩年還是有進步,今天就針
對里面提到的代碼保護做個簡單的思考記錄。
首先項目達到一定規模、項目比較創新方競爭對手、項目嚴重依賴客戶端代碼那么代碼保護還是盡量做,如果不是也沒必須瞎折騰。
Unity常見代碼保護機制:
1.重新編譯mono,修改
mono_image_open_from_data_with_name 函數。
優點:原理簡單、順帶還可以做DLL更新(android)。
缺點:易破解、編譯麻煩、可能存在版本問題以及兼容性問題。
2.同上,但是隱藏加密函數,這個可以在網上搜索下,是第一種方案的加強版。
優點:比第一種略微安全、防小白靜態分析。
缺陷:同上。
3.同上,編譯同時優化處理so。(參見常用so加固方案)
優點:應該可以防住大部分人。
缺點:同上外加難度大。
4.引入自己的輔助so庫,hook
mono_image_open_from_data_with_name 函數,自己的so庫做好保護機制。
優點:不編譯libmono.so、防靜態分析。
缺點:安全性轉移到自己的so庫了。
5.il2cpp,(沒錢的產品推薦的方法),其實多數產品使用il2cpp已經可以達到很好的保護了,只是不能熱更dll所以很多android產品還是放棄了。
優點:很難還原較完整的代碼、加較好的性能。
缺點:android熱更以及android穩定性。
6.dll混淆,這個其實在使用mono情況下都應該做。
7.采用第三方加固,(有錢的產品大力推薦的方法),都賺錢了自己還是別瞎折騰了,當然有自己的研發部例外。
缺點展示:
1.mono編譯的形式就不做太多介紹了,ida直接看Mono代碼靜態分析。
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 可以導出頭文件和代碼偏移。
寫在最后:當你意識到需要保護代碼的時候恭喜你估計你的項目已經成了^-^。