IL2Cpp簡易加密方法


Mono作為backend的時代,破解總的來說還是容易的:

修改libmono.so :從內存動態搜素dll特征值動態dump
混淆Dll:dnspy作者的de4net可以反混淆大部分混淆器
修改Dll的PE結構(騰訊MTP):可以用XPose抓取Dll主體配合一些工具修復PE頭
動態解密Dll Method(網易易盾):這一招最狠,每次只能Dump一部分Method實現,除非分析解密的so,暴力遍歷所有函數回寫
IL2Cpp似乎為我們解決了以上問題,但是IL2Cpp Dumper的出現,使得小白也能輕松拿到所有的Assembly、class、成員組成。如果不對IL2Cpp進行加密,利用上述Dump信息配合IDA,依然可以使得關鍵函數被定位修改,例如源源不斷的崩壞3修改版。

IL2Cpp加密有兩種思路:

對libil2cpp加殼
對global-metadata.dat進行加密
考慮到libil2cpp.so是在Unity啟動流程中被加載的,加殼的話需要hook或者修改Unity源碼。因此加密global-metadata.dat性價比是最高的。

打開Unity安裝目錄Editor\Data\il2cpp\libil2cpp\vm,找到MetadataCache.cpp和MetadataLoader.cpp,MetadataCache::Initialize中通過MetadataLoader::LoadMetadataFile加載了global-metadata.dat,據此即可對dat進行加密,無論是加入加密算法還是修改路徑都是可以的。

對於自動化流程,安卓可以在出包以后,zip解壓apk進行處理;iOS則在打包為XCode工程時進行處理,ipa一旦生成,就不好進行修改了。這些可以做成Editor腳本或者Jenkins腳本。

麻煩的一點是需要修改Unity安裝目錄的代碼,因此需要注意出包使用同一台機器,同時對開發人員平時自行打包做一些兼容處理,例如加載加密失敗則Fallback到正常的讀取流程中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM