Unity干貨分享:兩種項(xiàng)目開發(fā)資源加密方法
Unity的游戲很容易被人反編譯出來,然后再重新打包發(fā)布,把自己辛辛苦苦開發(fā)的游戲,抄寫的一絲不掛。很多項(xiàng)目要求要做好資源加密,Unity中如何做好資源加密呢?本文給大家分享加密算法+資源打包整合思路:

游戲資源包如何選擇加密算法
游戲資源包加密的第一件事情就是選一個(gè)什么樣的加密/解密算法,比較不容易被人破解。我們?nèi)绾蝸磉x擇呢?很遺憾的告訴大家,沒有任何一個(gè)保險(xiǎn)的加密解密算法是安全的。杠精第一時(shí)間就會來反駁,這怎么可能,我加密了他怎么破解?游戲資源加密注定了加密算法不能用太耗時(shí)的加密算法。接下來我們來看下不同加密算法是如何被破解的。
(1) 使用標(biāo)準(zhǔn)庫實(shí)現(xiàn)的加密解密算法,比如使用encrypt加密/解密算法。這里有個(gè)問題,我們會有一個(gè)密鑰用來解密,密鑰一般游戲都寫死到代碼里。這種破解太簡單了,密鑰寫死在代碼里,基本都是字符串等,靜態(tài)分析代碼找到密鑰對應(yīng)的字符串,有了密鑰,你用的是標(biāo)準(zhǔn)庫,一下加密資源就破解了,分分鐘你的資源就被破解了。

加密/解密算法示意如下:

所有從上面分析來看想要不被破解,幾乎是很難,就看破解的代價(jià)。你這個(gè)游戲是否值得。一般我們的目標(biāo)就是不要讓人通過Unity反編譯工具就能直接讓我們的游戲直接反編譯出Unity項(xiàng)目工程,然后重新編譯打包發(fā)布就可以了。解密算法要快,注定他不會太復(fù)雜,密鑰單一的放客戶端或是網(wǎng)絡(luò),注定能獲取到。
Assetsbundle資源包的加密與解密
分析完加密解密算法以后,接下來我們就來看下如何加密我們的資源,先來介紹第一種方案,打資源包的時(shí)候,加密單個(gè)的資源, 把加密后的數(shù)據(jù)打入到資源包。解密的時(shí)候,從ab包中讀取資源,然后再把資源包里的內(nèi)容解密開來。具體做法如下:
(1) 新建一個(gè)類,繼承自FileStream, 重寫Read/Write函數(shù)。代碼如下:

(2) 修改ab包打包工具腳本,再對生成的ab包資源加密一次,打包加密腳本如下:

(3) 解密的時(shí)候,讀取ab包,使用函數(shù)AssetsBundle.LoadFromStream來加載,而這個(gè)會觸發(fā)Stream在Read讀數(shù)據(jù)接口調(diào)用,就可以進(jìn)入我們重載的Read接口,來做解密。代碼如下:
