一次U3D DLL加密的记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一次U3D DLL加密的记录相关的知识,希望对你有一定的参考价值。

这篇文章主要针对windows下对u3d游戏的加密过程

主要步骤:

①:编译和替换加密后的libmono.so

②:导出安卓工程

③:加密和替换Assembly-CSharp.dll

④:用eclipse等工具导出apk

 

首先参考一下我的一次编译libmono.so的记录

接着把项目导出成安卓工程,在xxx/assets/bin/Data/Managed下找到Assembly-CSharp.dll,然后写个文件读写程序进行破坏c#程序集结构,从而达到该程序集解不开的目的

示例程序代码如下:

 

 1 #include <stdio.h>
 2   
 3 #define MAXLEN 1024
 4 
 5 void main()
 6 {
 7 
 8     FILE * outfile, *infile;
 9 
10     infile = fopen("Assembly-CSharp.dll", "rb");
11     
12     outfile = fopen("Assembly-CSharp-tmp.dll", "wb" );
13 
14     unsigned char buf[MAXLEN];
15 
16     if( outfile == NULL || infile == NULL )
17     {
18         return;
19     }   
20 
21     int rc;
22     int _index = 0;
23     while( (rc = fread(buf,sizeof(unsigned char), MAXLEN,infile)) != 0 )
24     {
25         if (_index == 0)
26             buf[0] += 1;
27         fwrite( buf, sizeof( unsigned char ), rc, outfile );
28         _index++;
29     }
30 
31     fclose(infile);
32 
33     fclose(outfile);
34 
35     return;
36 }

 

通过运行加密程序,会得到一个输出文件Assembly-CSharp-tmp.dll,这个就是加密过的文件了,已经不再是c#程序集了。把原先的Assembly-CSharp.dll替换掉,就能达到加密的效果了,配合解密的libmono.so打包出来的apk就能达到一般的代码加密效果了。

 

不过大家也可能想到了,这么繁琐的替换过程,能不能用一键功能代替,答案是肯定的,linux和mac下都有sh自动打包的教程了,那么参考我的下一篇文章

一次U3D DLL加密的记录(二)

,就能达到在windows下一键打包。

 

以上是关于一次U3D DLL加密的记录的主要内容,如果未能解决你的问题,请参考以下文章

第七章 u3d中的定制特性

一次编译libmono.so的记录

Unity3D DLL加密

C#编写的DLL如何加密?

提效小技巧——记录那些不常用的代码片段

自定义Mono,实现Unity Android平台代码更新