C语言Unity Mono脚本 加密

加密条件

内燃机版本:Unity3D 5.3.4 及更高版本 (使用Mono而并非IL2CPP)

操作系统:CentOS 6.2(Final)

加密条件:Android、IOS(暂定)

加密目的:C#源代码(dll文件)

解密方法:libmono.so (重点:参加解密算法同等对待编写翻译此文件)

加密的目地

.NET Reflector等反编写翻译工具 不可能透过对dll反编写翻译获得源码

注意事项

dll的加密算法和libmono.so解密算法一致

思路分析

C语言 1

驷不及舌:大家须求对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

其它package

autoconf
automake
bison
gcc
gettext
glib >= 2.0
libtool
make
perl

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 mono

unity的mono和原生mono有个别不一致,所以必要去github拉取unity的mono库

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

monobuildtools

unity mono打包工具

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

Android SDK Tool/Android6.0

自家动用Unity5.3.4在windows上打包apk,须求android sdk
tool版本为23,Android6.0,所以一律请先准备好环境

C语言 2

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版本,作者在二零一五-06-25
clone的,须要的NDK版本为r10e

android-ndk 下载

听他们讲android和unity的版本差异,要求的ndk版本也不比,小编此时以二零一六-06-25
clone的仓库为例,供给ndk-r10e

x64

android-ndk-r10e-linux-x86_64.bin:http://pan.baidu.com/s/1dDAqnK1 

x86

android-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中解密dll

Mono加载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;
    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);
}

遇见的难题

AndroidManifest.xml Error

Unity导出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
yum makecache

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   成功后终端输出 伊芙rything 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 搞定,那么那些
devel是怎么着啊?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设置共享文件夹

  1. 这一步是在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
  1. 在 文件系统 – 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一样。

  • *.pl 是perl语言的库文件,平时用 require xx.pl; 来加载
  • *.pm 是perl语言的模块文件,平时用 use module; 来加载
  • *.plx 是perl语言的台本文件

运行: ./路径/文件名 (前面包车型地铁“./”表示运转命令)

结束: ctrl + c

注释

单行:#起先,有个分裂perl程序第1行也是#开头

多行:=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

进度

已完成

  1. ndk安装及布局完结
  2. unity mono库clone到本地

遇见难点

  1. 安装gtk卡在 libffi 版本太低

自家的条件

C语言 3

 

IL2CPP

后来的类型极或许会接纳IL2CPP。假若是IL2CPP的话,就无需这一套加密了,因为通过IL2CPP生成的包中并不设有dll,而是二进制文件。

越多关于IL2CPP的质地,能够查阅Unity官方的素材,可能本身事先的文章:http://www.cnblogs.com/zhaoqingqing/p/3842690.html