码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-03-05 11:50:59      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

这篇文章主要针对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加密的记录(一)

标签:

原文地址:http://www.cnblogs.com/xijianchui/p/5242248.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!