這篇文章主要針對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下一鍵打包。
