Unity Mono脚本 加密
加密环境引擎版本:Unity3D 5.3.4 及更高版本 (使用Mono而并非IL2CPP) 操作系统:CentOS 6.2(Final) 加密环境:Android、IOS(暂定) 加密对象:C#源代码(dll文件) 解密方法:libmono.so (重点:加入解密算法并重编译此文件) 加密的目地.NET Reflector等反编译工具 无法通过对dll反编译得到源码 注意事项dll的加密算法和libmono.so解密算法一致 思路分析重点:我们需要对libmono.so重编译,加入我们的解密算法。 准备环境编译系统:linux或mac os我的编译环境:centos 6.2 Final,建议在linux或mac os中编译 libmono.so linux安装运行库git在编译过程中,可能需要通过git获取某些运行库。 查看是否安装git:git –version CentOS7 yum 安装git https://git-scm.com/book/en/v2/Getting-Started-Installing-Git 其它packageautoconf glib >= 2.0? 这个一直安装失败 centos安装软件在root权限下,通过以下命令来安装软件: yum install [Nginx][PHP][PHP-fpm][mariadb][mariadb-server][MysqL][MysqL-server]... Unity安装Android模块确保已安装Unity引擎,并且Android模块已安装,Android SDK已安装并更新,保证可以打包APK 正式/测试工程使用Unity创建一个加密测试项目或正式项目,用来用加密 Unity monounity的mono和原生mono有些不一样,所以需要去github拉取unity的mono库 https://github.com/Unity-Technologies/mono monobuildtoolsunity mono打包工具 https://github.com/Unity-Technologies/monobuildtools Android SDK Tool/Android6.0我使用Unity5.3.4在windows上打包apk,需要android sdk tool版本为23,Android6.0,所以同样请先准备好环境 Android打包工具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 android对应的NDK版本查看路径:external/buildscripts/build_runtime_android.sh https://github.com/Unity-Technologies/mono/blob/unity-5.3/external/buildscripts/build_runtime_android.sh 在文件的上半部分就可以看到需要的NDK版本,我在2016-06-25 clone的,需要的NDK版本为r10e android-ndk 下载根据android和unity的版本不同,需要的ndk版本也不同,我这儿以2016-06-25 clone的仓库为例,需要ndk-r10e x64android-ndk-r10e-linux-x86_64.bin:http://pan.baidu.com/s/1dDAqnK1? x86android-ndk-r10e-linux-x86.bin:http://pan.baidu.com/s/1sjoneRr 设置android ndk环境变量 反编译工具测试加密结果.Net反编译工具主要加密对象是Assembly-CSharp.dll,所以可以准备几款.Net反编译工具来测试加密结果 下面举例.net的反编译工具 .NET Reflector:http://www.red-gate.com/products/dotnet-development/dotnet-developer-bundle/ C语言反编译工具如果对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/ libmono.so(解密方法)加密C#的dll根据自己的实际情况,对导出的 assets/bin/Data/Managed/Assembly-CSharp.dll? 进行加密 在so中解密dllMono加载dll的代码的文件位于/mono/Metadata/image.c mono_image_open_from_data_with_name打开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; datac; if (!data || !data_len) { if (status) *status = MONO_IMAGE_IMAGE_INVALID; return NULL; } //在这儿对加密过的dll进行解密 if (strstr(name,“Assembly-CSharp.dll”) != NULL) { 这里是解密过程,我们采用的是xxtea加解密算法。 } ..... register_image (image); } 遇到的问题AndroidManifest.xml ErrorUnity导出Android Project之后,AndroidMainifest.xml中有一行会报Error: android:debuggable="false" ,无法识别。 解决办法:http://stackoverflow.com/questions/24204140/android-error-when-i-set-androiddebuggable-false-or-true CentOS安装软件 Error在CentOS上安装一些软件时遇到:Errno 256] No more mirrors to try 确保系统已连接网络,输入以下命令(作用:重建缓存) yum clean all Linux安装ndk.bin?资料:Linux下安装JDK-(bin版)? http://blog.csdn.net/sonnet123/article/details/9290561 安装步骤 以下命令都是ROOT身份运行 1. 安装ndk-文件拷贝#mkdir /usr/ndk #cd /usr/ndk #cp /xxxx/android-ndk-r10e-linux-x86.bin /usr/ndk 2. 安装ndk-安装和配置环境变量1. ./android-ndk-r10e-linux-x86.bin?? 成功后终端输出 Everything is OK 3. 安装ndk-安装成功Everything is Ok [root@workstation ndk]# source /etc/bashrc [root@workstation ndk]# echo $ANDROID_NDK_ROOT /usr/ndk/android-ndk-r10r [root@workstation ndk]#提示要ndk9?查看参考资料caption的修改 ./configure没有那个文件或目录查看README文件 tar.xz安装Linux下解压tar.xz格式压缩文件 资料:http://blog.csdn.net/longerzone/article/details/8707118 安装glib我安装的是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 安装glib-提示缺少libffi不知道大家注意到没有,在configure时,出现缺少相关库时解决方法都可以使用 库-devel 解决,那么这个 glib的安装:http://blog.chinaunix.net/uid-26126915-id-3368644.html 安装glib依赖库libffi 下载,解压,执行 ./configure make make install 进行安装 libpcre >=8.13 ./configure --with-prce=/usr/local/prec/ tar.bz2安装命令:tar -xjvf xxx.tar.bz2 来解压,得到解压后的目录再进一步安装 其它错误1. 文件格式错误/bin/bash^M: bad interpreter: 没有那个文件或目录 方法二:在windows下用Notepad++修改格式为unix PKG_CONFIG_PATH environment如果配置 PKG_CONFIG_PATH Linux操作知识查看系统版本: 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目录: 你希望直接放在mnt下: ??? #sudo mount -t vBoxsf 共享文件夹名/mnt,比如我的: mount -t vBoxsf mono/mnt4. 在 文件系统 – mnt 下就可以看到共享内容了 cd 目录操作以root用户登录之后,默认是在当前用户文件夹内,往上跳到文件主目录中:cd ../../ virtualBox 虚拟和主机粘贴板共享1. 从virtualBox官网下载对应版本的增加工具包,进行安装 2. 在linux中加载工具包 ios镜像,进行安装 3. 虚拟机和主机可以共享粘贴板内容了 Centos安装软件CentOS6.X安装QQ2012 终于可以在centos下使用QQ啦! Centos YUM更新软件:http://jingyan.baidu.com/article/19020a0ac84c3d529d2842ee.html centos安装软件:https://www.centos.org/forums/viewtopic.php?t=871?????? 查找某一类软件:yum list *Firefox* 文献资料Unity 自动导出 AndroidStudio 项目 ? Perl语言(*.pl文件)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 http://www.luzexi.com/unity3d/%E6%B8%B8%E6%88%8F%E6%9E%B6%E6%9E%84/%E5%89%8D%E7%AB%AF%E6%8A%80%E6%9C%AF/2015/04/11/Unity3D-%E9%87%8D%E6%96%B0%E7%BC%96%E8%AF%91Mono%E5%8A%A0%E5%AF%86DLL.html 雨松 Unity3D研究院之Android加密DLL与破解DLL .SO(八十一):http://www.xuanyusong.com/archives/3553 其它 Unity 3d脚本加密方案:http://www.cppcourse.com/u3d-encryption.html 进度已完成
遇到问题
我的环境? IL2CPP之后的项目极可能会使用IL2CPP。如果是IL2CPP的话,就无需这一套加密了,因为通过IL2CPP生成的包中并不存在dll,而是二进制文件。 更多关于IL2CPP的资料,可以查看Unity官方的资料,或者我之前的文章:http://www.cnblogs.com/zhaoqingqing/p/3842690.html (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |