做过Unity bundle资源的同学都知道AssetStudio可以轻易的的破解bundle获取到项目里的原始资源,为了防止自己的项目资源被人使用AssetStudio轻易的获取到,上网研究了下可行的Bundle加密方案,总结有以下两种方式:
1.使用位的异或运算bundle的字节码去加解密,普及下为什么位的异或运算可以实现加解密,因为1 ^ 0 = 1;0 ^ 0 = 0;所以x ^ 0 = x 可实现数据的保持, 位运算中的异或运算满足交换律,所以B ^ A ^ A = B ^ 0 = B,所以在bundle资源打完之后读取bundle的字节数据去异或你的密钥生成加密过后的文件,在加载bundle的时候先读取加密过后的文件的字节数据再去异或一次你的密钥得到原始的bundle字节数据,再使用 AssetBundle.LoadFromMemory(byte[] binary)加载出对应的bundle,此方案是可以实现bundle的加解密,但是上线的项目要考虑性能的问题,该方案在内存性能方面不能满足要求,所以实际线上项目一般不使用该方案。
2.还是读取打完bundle的字节数据,然后重新创建对应的文件在头部先写入一段加密的字节数据,再加入bundle的字节数据,在加载bundle的时候使用AssetBundle.LoadFromFile(string path, uint crc, ulong offset) 接口传入你加密的字节数据的长度为offset,也可以加载出对应的bundle,该方案在性能方面基本上没啥另外的消耗,也是本人最终使用的方案。下面贴出对应的加密代码,有兴趣的可以参考借鉴。
[MenuItem("Tools/Encode Bun

最低0.47元/天 解锁文章
1733

被折叠的 条评论
为什么被折叠?



