很多人認為ab包不需要加密,但是這樣的人我認為,他思考問題的方式是片面的且狹隘。
是否加密應該根據專案本身的資源價值來決定。是否提高資源的破解難度,比如對於乙個沒什麼價值的專案,也沒有人會想要去拿你的資源,自然不需要。但是比如像閃耀暖暖這樣,資源密集且開發代價較高的專案,資源應該在一定程度上保護起來,使得破解的代價也得到提高。當然,對於破解高手而言,破解只是時間問題。這裡主要的目標還是提高破解的代價。
在2023年,曾經寫過乙個文件(unity3d伺服器資源加密,其實是ab包加密),當時由於unity提供的api比較少,所以當時的方法是將ab包作為bytes資料進行加密,載入時讀取檔案資料,解密之後,通過loadfrommemory進行載入。雖然這種方式是有效的,但是很顯然,載入時間和記憶體的問題讓我們困擾好久。
所以,沒有加密的資源和裸奔沒有什麼差別。
那麼ab加密,上述的加密,有什麼優化的方法呢。方法很多,雨松在2023年的一篇文件(
unity3d研究院之加密assetbundle不佔記憶體(一百零五)
)提到利用unity2017.2提供的新api:assetbundle.loadfromstream可以實現沒有記憶體額外消耗的方法。
其實我們用的api有個引數offset就可以解決加密的問題
public static assetbundle loadfromfile(string path, uint crc, ulong offset);我們完全可以在打完資源的時候,隨機寫入一段bytes資料到ab包的前面,然後記錄寫入的長度,也就是offset。在載入時,將offset作為引數就可以實現載入。(這裡有乙個風險,如果ab包的有效資料是以固定格式開頭,那麼還是容易被破解,未測試)。下圖展示了乙個隨機寫入22個byte之後,assetbundbrower和assetstudio看到的情況
下圖展示,從帶有22個byte的ab包中載入的結果
這種帶offset的打包/載入方法的最大好處是沒有記憶體的消耗,也沒有載入上效能的損失,可以視作沒有更改引擎**或者hook引擎的情況下最好的方法。
簡單,高效,易用。
simlpe is good !!!!!
最簡單的最高效的過濾SQL指令碼防注入
errinfo 過濾url非法sql字元 var surl location.search.tolowercase var squery surl.substring surl.indexof 1 re select update delete truncate join union exec in...
最簡單的加密
最簡單的加密 package com.util 類 介面的目的 作用 功能 繼承於何種父類,實現的介面 實現的演算法 使用方法 示例程式.version v1.0 2012 3 22 author xiahui public class encrypt system.out.print 加密 s n...
史上最簡單的nuget包建立方法
github 咱們先去生成自己的庫 在這裡我就用我的uwp工具庫做例子來演示 生成前請務必確保 編譯模式為release和any cpu平台 生成完了之後開啟工具 開啟工具後點選 create a new package 然後你就會看到如下介面 右擊資源區的空白處,選擇add lib folder ...