關於cocos2dx手遊lua檔案加密的解決方式

2021-09-08 11:45:15 字數 2135 閱讀 4855

非常多使用cocos2dx+lua做遊戲的同學。都會想到乙個問題,我的遊戲一旦公布,如何才幹保證的我指令碼**不被破解。不洩露**。儘管這和開源、共享的原則不合。可是**也是coder的勞動成果,理應得到保護。

特別是商業遊戲更是如此,不希望被別人破解掉源**而且進行改動。

今天的話題就是怎樣實現lua指令碼檔案的加密和解密。

我在網路上查過,都沒有成熟的解決方式。然後我經過考慮之後,總結出兩種解決方式,供大家參考。

1、輕量級的解決方式。apk打包之前,用工具把全部的lua檔案加密,詳細是將lua檔案讀到記憶體,然後使用zip等壓縮加密庫進行壓縮加密,然後將壓縮加密之後的資料儲存為和原始檔同名的檔案。

打包之後執行lua檔案的時候。則先讀出lua資料。然後進行解密。將解密後的流資料傳給lua虛擬機器。

2、重量級的解決方式,此方案是上一種方案的擴充套件。也是商用遊戲的方案,實現乙個遊戲檔案包,打包前將資源和指令碼都使用工具打包到乙個檔案。能夠在打包的時候加密壓縮,也能夠不加密壓縮。

然後在執行的時候直接從包內讀出對應檔案的資料。然後解密解壓縮。然後提供給遊戲引擎使用。這也是端遊普遍使用的技術,手遊眼下大部分也開始使用此技術。

本文主要簡要解說第一種方案,另外一種方案則有時間再寫一篇部落格。好了。我們開始進入正題吧。

首先是壓縮lua檔案。**例如以下:

int write_file_content(const char* folder)

//得到檔案大小

fseek(fpin, 0, seek_end);

unsigned int size = ftell(fpin);

//讀出檔案內容

fseek(fpin, 0, seek_set);

void* con = malloc(size);

int r = fread(con, size, 1, fpin);

//進行加密操作

unsigned long zip_con_size = size * 2;

void* zip_con = malloc(zip_con_size);

if (z_ok != compress((bytef*)zip_con, &zip_con_size, (bytef*)con, size))

printf("%s 壓縮前大小:%ld 壓縮後大小:%ld\n", folder, size, zip_con_size);

//寫檔案內容

fseek(fpin, 0, seek_set);

int len = fwrite(zip_con, zip_con_size, 1, fpin);

//釋放資源

fclose(fpin);

free(zip_con);

free(con);

return 0;

}

然後是解密操作。**例如以下:

void* read_file_content(const char* folder, int& bufflen)

//獲取檔案大小

fseek(file, 0, seek_end);

unsigned int size = ftell(file);

//讀出檔案內容

void* con = malloc(size);

fseek(file, 0, seek_set);

int len = fread(con, size, 1, file);

//解壓縮操作

unsigned long zip_size = size * 4;

void* zip_con = malloc(zip_size);

int code = uncompress((bytef*)zip_con, &zip_size, (bytef*)con, size);

if (z_ok != code)

//釋放資源

fclose(file);

free(con);

//zip_con由外部釋放

bufflen = zip_size;

return zip_con。

}

最後就把此流檔案塞給lua的虛擬機器就可以,即以流方式執行lua**。

改動lua的檔案載入器。自己定義lua檔案載入

cocos2d x 手遊研發 目錄

感謝 這套框架只用了cocos2d x,c 語言,vs2012開發環境 我會繼續堅持寫下去,並不為什麼,就為喜愛遊戲,編寫自己的乙個世界。本套原始碼是cocos2d x 2.1rc0 x 2.1.4版本引擎 使用將hellocpp裡面內容複製到你對應的專案結構裡面即可 目錄 cocos2d x 大型...

cocos2dx戰爭迷霧實現 lua

tilemap的美術資源 戰爭迷霧 戰爭迷霧的原理在網上已經有相關資料,就不補充了。戰爭迷霧用 t1中索引與tilemap的gid對應,右邊值 表 與tilemap的資源對應。p.t1 2 3 5 6 8 13 15 7 12 4 14 9 11 10 1 t2索引與t1的右邊的表的數字的和對應,值...

COCOS2DX 遊戲開發之二六 手遊短連線

手遊中的短連線 手遊採用短連線,好處自然不言而喻,所謂的短連線就是只有需要和伺服器通訊的時候才連線伺服器,通訊完畢就斷開連線,我叫mt也採用了短連線的方式弊端 1.每次傳送訊息的連線伺服器和斷開伺服器也是一筆不小的開銷 2.不適合那些大量即時資訊的手遊優點 1.只在需要同步的時候才和伺服器連線傳送資...