Unity3D加密教程
引言 :
为了防止别人通过反编译来破解修改自己的游戏项目。可以通过两种比较成熟的方案来预防。一种是混淆,另一种就是加密(加壳)。由于加壳后的文件反编译比混淆后的难度更大,所以我们这里采取加密的方法对PC平台和安卓平台的应用进行加密。
那么我们去加密什么呢? Unity通过Mono来达到跨平台的效果。在Build编译时会将你编写的code转为符合CLI的CIL(Common Intermediate Language,中文:中间语言),并且主要的Code会编译在Assembly-CSharp.dll里面,然后再有mono来加载,解析,执行。Mono加载Assembly-CSharp.dll的时候就是读取文件到内存中,和读取一个游戏资源文件没多大区别。所以我们要做的就是把这个Assembly-CSharp.dll文件加密,简单点的可以修改文件的一个字节或者位移一下,破坏其原有的结构。就无法使之通过例如Reflector9VSPro去反编译,因为此时的Assembly-CSharp.dll已经不是一个正确的dll文件了。可尴尬的是,别人没法反编译出文件内容了,Mono自己也不认识了。这将导致,游戏无法运行。所以,我们在对其加密的同时也要加入相应的解密算法。
image.c脚本在游戏运行时会去主动加载Assembly-CSharp.dll文件。那么我们在image.c相应的方法里面加入解密算法,然后从新编译Mono,生成相应的程序集,来替换待解密项目中的相应文件。就可以达到游戏运行正常又安全的效果。
So ,Follow me to see.
此技术是都是五六年前采用的了,加上之前经验少,完成此功能花费了一周,不清楚你看的时候技术是否还有效,但是处理逻辑都是差不多的。
Window篇
加密Assembly-CSharp.dll :
需要工具:
1. Reflector9VSPro:反编译工具:用于成果测试。
2. xxtea:此教程所用的第三方加密解密算法:用于加密解密。
3. MinGw:使用gcc编译:用于制作加密工具。
- 首先下载需要工具的工具3。进行安装配置。可在cmd窗口中用“gcc -v”指令来查看安装结果。
- 下载工具2。文件夹中有xxtea.h、xxtea.c两个文件。这两个就是加密解密的代码。
- 创建新文件夹“encrypt”,把这两个文件放在“encrypt”文件夹中。
- 新建C语言脚本“EncryptManage.c”,同样放在“encrypt”中。脚本内容:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "xxtea.h"
#define SIZE 1024*1024*10
void main()
{
FILEFILE *infp = 0;
if((infp=fopen("Assembly-CSharp.dll","rb"))==NULL)
{
printf("Assembly-CSharp.dll Read Error\n");//打开操作不成功
return;//结束程序的执行
}
//char buffer[SIZE];
char* buffer = (char*)malloc(sizeof(char)*SIZE);
memset(buffer,0,sizeof(char)*SIZE);
int rc = 0;
int total_len = 0;
total_len = fread(buffer , sizeof(unsigned


1万+

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



