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