本文固定链接:http://blog.csdn.net/u013108312/article/details/54234439
0、加密的原理
Unity3D 是基于 Mono的,我们平时写的 C# 脚本都被编译到了 Assembly-CSharp.dll ,然后 再由 Mono 来加载、解析、然后执行。
Mono 加载 Assembly-CSharp.dll 的时候就是读取文件到内存中,和平时读取一个 游戏资源 文件没什么区别。
为了防止别人破解,我们会对游戏资源加密,简单点的 比如修改文件的一个字节 或者 位移一下 。只要简单的修改一下,破坏原来的文件数据结构,别人就不能用通用的读取工具来读取了。
Mono 读取 Assembly-CSharp.dll 也是如此,我们只要简单的 修改 Assembly-CSharp.dll 的一个字节,就能破坏掉 Assembly-CSharp.dll 的数据结构,然后 Assembly-CSharp.dll 就不再是一个 dll 了,就变成了一个普通的文件,一个系统都不认识的未知类型的文件。
Assets\bin\Data\Managed
本文介绍了如何在Android平台上通过修改Unity3D的Mono库来实现Assembly-CSharp.dll的加密,防止反编译。详细步骤包括安装Ubuntu系统,下载并配置ANDROID_NDK,编译Development和Release版本的libmono.so,修改libmono.so添加解密函数,并对Assembly-CSharp.dll进行加密。最终通过Unity3D的导出回调替换加密后的libmono.so,确保项目能正常运行且难以被反编译。
订阅专栏 解锁全文
3601

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



