引擎版本:Unity3D 5.3.4 及更高版本 (使用Mono而并不是IL2CPP)php
操做系统:CentOS 6.2(Final)html
加密环境:Android、IOS(暂定)mysql
加密对象:C#源代码(dll文件)linux
解密方法:libmono.so (重点:加入解密算法并重编译此文件)android
.NET Reflector等反编译工具 没法经过对dll反编译获得源码ios
dll的加密算法和libmono.so解密算法一致nginx
重点:咱们须要对libmono.so重编译,加入咱们的解密算法。git
个人编译环境:centos 6.2 Final,建议在linux或mac os中编译 libmono.sogithub
在编译过程当中,可能须要经过git获取某些运行库。算法
查看是否安装git:git –version
https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
autoconf
automake
bison
gcc
gettext
glib >= 2.0
libtool
make
perl
glib >= 2.0 这个一直安装失败
在root权限下,经过如下命令来安装软件:
yum install [nginx][php][php-fpm][mariadb][mariadb-server][mysql][mysql-server]...
确保已安装Unity引擎,而且Android模块已安装,Android SDK已安装并更新,保证能够打包APK
使用Unity建立一个加密测试项目或正式项目,用来用加密
unity的mono和原生mono有些不同,因此须要去github拉取unity的mono库
https://github.com/Unity-Technologies/mono
unity mono打包工具
https://github.com/Unity-Technologies/monobuildtools
我使用Unity5.3.4在windows上打包apk,须要android sdk tool版本为23,Android6.0,因此一样请先准备好环境
Android Studio:http://www.androiddevtools.cn/ 或者:http://tools.android-studio.org/
Eclipse:https://marketplace.eclipse.org/content/android-development-tools-eclipse
Andmore - Eclipse Android Tooling:https://projects.eclipse.org/projects/tools.andmore
查看路径:external/buildscripts/build_runtime_android.sh
在文件的上半部分就能够看到须要的NDK版本,我在2016-06-25 clone的,须要的NDK版本为r10e
根据android和unity的版本不一样,须要的ndk版本也不一样,我这儿以2016-06-25 clone的仓库为例,须要ndk-r10e
android-ndk-r10e-linux-x86_64.bin:http://pan.baidu.com/s/1dDAqnK1
android-ndk-r10e-linux-x86.bin:http://pan.baidu.com/s/1sjoneRr
设置android ndk环境变量
主要加密对象是Assembly-CSharp.dll,因此能够准备几款.Net反编译工具来测试加密结果
下面举例.net的反编译工具
.NET Reflector:http://www.red-gate.com/products/dotnet-development/dotnet-developer-bundle/
若是对libmono.so也加密的话,那还须要准备几款C语言反编译工具
下面举例C语言反编译工具
ida pro
官网:https://www.hex-rays.com/products/ida/
代销商:http://xlsoft.com.cn/category/%E5%8F%8D%E7%BC%96%E8%AF%91%E5%B7%A5%E5%85%B7/
根据本身的实际状况,对导出的 assets/bin/Data/Managed/Assembly-CSharp.dll 进行加密
Mono加载dll的代码的文件位于/mono/metadata/image.c
打开image.c,找到 mono_image_open_from_data_with_name 方法,把解密方法写在这儿。此方法大概在1807行
MonoImage * mono_image_open_from_data_with_name (char *data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus *status, gboolean refonly, const char *name) { MonoCLIImageInfo *iinfo; MonoImage *image; char *datac; if (!data || !data_len) { if (status) *status = MONO_IMAGE_IMAGE_INVALID; return NULL; } //在这儿对加密过的dll进行解密 if (strstr(name, “Assembly-CSharp.dll”) != NULL) { //这里是解密过程,咱们采用的是xxtea加解密算法。 } //..... return register_image (image); }
Unity导出Android Project以后,AndroidMainifest.xml中有一行会报Error: android:debuggable="false" ,没法识别。
解决办法:http://stackoverflow.com/questions/24204140/android-error-when-i-set-androiddebuggable-false-or-true
在CentOS上安装一些软件时遇到:Errno 256] No more mirrors to try
确保系统已链接网络,输入如下命令(做用:重建缓存)
yum clean all
yum makecache
资料:Linux下安装JDK-(bin版) http://blog.csdn.net/sonnet123/article/details/9290561
安装步骤
如下命令都是ROOT身份运行
#mkdir /usr/ndk #cd /usr/ndk #cp /xxxx/android-ndk-r10e-linux-x86.bin /usr/ndk
1. ./android-ndk-r10e-linux-x86.bin 成功后终端输出 Everything is OK
Everything is Ok [root@workstation ndk]# source /etc/bashrc [root@workstation ndk]# echo $ANDROID_NDK_ROOT /usr/ndk/android-ndk-r10r [root@workstation ndk]#
查看参考资料caption的修改
查看README文件
Linux下解压tar.xz格式压缩文件
资料:http://blog.csdn.net/longerzone/article/details/8707118
我安装的是glib-2.48.1
1 ./configure 2 make 3 make install
这里configure主要是配置并生成Makefile文件,make主要是对程序进行编译,make install主要是对编译好的程序进行安装
资料:http://www.linuxfromscratch.org/blfs/view/svn/general/glib2.html
不知道你们注意到没有,在configure时,出现缺乏相关库时解决方法均可以使用 库-devel 解决,那么这个
devel是什么呢?devel是个开发包,只有在开发程序时才会安装。里面包含了头文件、以及开发用到的相关库和
帮助文件等等。通常安装某些工具的时候就会出现
glib的安装:http://blog.chinaunix.net/uid-26126915-id-3368644.html
libffi
下载,解压,执行 ./configure make make install 进行安装
libpcre >=8.13
./configure --with-prce=/usr/local/prec/
命令:tar -xjvf xxx.tar.bz2 来解压,获得解压后的目录再进一步安装
/bin/bash^M: bad interpreter: 没有那个文件或目录
方法二:在windows下用Notepad++修改格式为unix
若是配置 PKG_CONFIG_PATH
查看系统版本:
lsb_release –a
查看linux系统位数:
getconf LONG_BIT 输出32则是x86,输出64则是x64
给shell赋于root权限:
1. 输入 su 2.输入root密码 回车
执行脚本:chmod 700 hello.sh
文件拷贝
cp [选项] 源文件或目录 目标文件或目录
1.virtual box设置共享文件夹
2. 这一步是在mnt下建立share目录,可不建立
mkdir /mnt/share
步骤3,有两种方法
若是你但愿把共享目录放在share下,而且mnt也建立 了share目录:
#sudo mount -t vboxsf 共享文件夹名/mnt/share ,好比个人:
mount -t vboxsf mono/mnt/share
你但愿直接放在mnt下:
#sudo mount -t vboxsf 共享文件夹名/mnt,好比个人:
mount -t vboxsf mono/mnt
4. 在 文件系统 – mnt 下就能够看到共享内容了
以root用户登陆以后,默认是在当前用户文件夹内,往上跳到文件主目录中:cd ../../
1. 从virtualbox官网下载对应版本的增长工具包,进行安装
2. 在linux中加载工具包 ios镜像,进行安装
3. 虚拟机和主机能够共享粘贴板内容了
Centos YUM更新软件:http://jingyan.baidu.com/article/19020a0ac84c3d529d2842ee.html
centos安装软件:https://www.centos.org/forums/viewtopic.php?t=871 查找某一类软件:yum list *Firefox*
perl是解释性语言, 可用于linux/unix系统。能够理解为和windows下的bat同样。
运行: ./路径/文件名 (前面的“./”表示运行命令)
结束: ctrl + c
注释
单行:#开头,有个例外perl程序第一行也是#开头
多行:=pod 注释多行代码块 =cut
Captain
Unity3d 加密 Assembly-CSharp.dll (Android平台) 全记录:http://blog.csdn.net/huutu/article/details/50829828
技术人生
Unity3D-从新编译Mono加密DLL
雨松
Unity3D研究院之Android加密DLL与破解DLL .SO(八十一):http://www.xuanyusong.com/archives/3553
其它
Unity 3d脚本加密方案:http://www.cppcourse.com/u3d-encryption.html
已完成
遇到问题
以后的项目很可能会使用IL2CPP。若是是IL2CPP的话,就无需这一套加密了,由于经过IL2CPP生成的包中并不存在dll,而是二进制文件。
更多关于IL2CPP的资料,能够查看Unity官方的资料,或者我以前的文章:http://www.cnblogs.com/zhaoqingqing/p/3842690.html