一次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下一鍵打包。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM