一次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加密的记录的主要内容,如果未能解决你的问题,请参考以下文章