Unity3d 加密 Assembly-CSharp dll Android平台 全记录

本文详细记录了如何在Android平台上加密Unity3d的Assembly-CSharp.dll,通过修改libmono.so添加解密功能,包括Ubuntu系统安装、下载ANDROI_NDK、编译不同版本libmono.so,以及加密dll的步骤,最终实现加密后的项目在手机上成功运行。
摘要由CSDN通过智能技术生成
               



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 了,就变成了一个普通的文件,一个系统都不认识的未知类型的文件。

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn



在 Android 中,由 libmono.so 来加载 Assembly-CSharp.dll 。

libmono.so  这就是 Mono 了 。





既然 Assembly-CSharp.dll 被我们加密了,那 libmono.so 这个通用的读取工具就不能再 读取已经加密的 Assembly-CSharp.dll 了,所以我们也要修改 重新编译 libmono.so ,给它加上解密函数才行。


Unity3d 是基于 Mono2.0 的,而 Mono2.0是免费开源的。所以基于各种开源协议 ,Unity 官方也将自己修改过的 Mono 开源出来,我们下载过来然后修改 重新编译出自己的 libmono.so 。

项目托管在 Github 上,项目地址:

https://github.com/Unity-Technologies/mono


了解到一些原理背景后就可以开始进行操作了。

1、安装ubuntu系统


在 Windows 上面进行编译比较麻烦……在 Linux 或 Mac 上会比较简单,网上多数教程都是基于 Mac的,我这里选择了最新的 Ubuntu 系统。


Ubuntu 官方提供了 ISO 刻录工具:

http://www.pendrivelinux.com/downloads/Universal-USB-Installer/Universal-USB-Installer-1.9.6.3.exe 


Ubuntu 系统下载:

http://www.ubuntu.org.cn/download/desktop


http://old-releases.ubuntu.com/releases/14.04.1/ubuntu-14.04.1-desktop-i386.iso?_ga=1.187436840.1241524278.1457318071

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

使用上面那个工具安装到U 盘然后安装到 电脑中。


2、下载ANDROID_NDK

安装完 Ubuntu 后,在 Ubuntu 中   ,注意32 和64位区别

64 位下载 :

http://pan.baidu.com/s/1dDAqnK1
 

32位下载  :

http://pan.baidu.com/s/1sjoneRr 


sudo su 切换到root安装

./android-ndk-r10e-linux-x86.bin


安装后在安装目录里面找到 RELEASE.txt ,里面记录着NDK 完整版本号,修改为 r10e

(Mono的编译脚本是读取这个RELEASE.txt中记录的版本号,然后和编译脚本中填写的版本号做匹配的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值