多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > [置頂] 關(guān)于cocos2dx手游lua文件加密的解決方案

[置頂] 關(guān)于cocos2dx手游lua文件加密的解決方案

來源:程序員人生   發(fā)布時(shí)間:2014-12-01 08:00:06 閱讀次數(shù):3436次
       很多使用cocos2dx+lua做游戲的同學(xué),都會(huì)想到1個(gè)問題,我的游戲1旦發(fā)布,怎樣才能保證的我腳本代碼不被破解,不泄漏代碼。雖然這和開源、同享的原則不合,但是代碼也是coder的勞動(dòng)成果,理應(yīng)得到保護(hù)。特別是商業(yè)游戲更是如此,不希望被他人破解掉源碼并且進(jìn)行修改。
  今天的話題就是如何實(shí)現(xiàn)lua腳本文件的加密和解密。
  我在網(wǎng)絡(luò)上查過,解決方案http://www.ijiami.cn/appprotect_mobile_games然后我經(jīng)過斟酌以后,總結(jié)出兩種解決方案,供大家參考。
  1、輕量級(jí)的解決方案,APK打包之前,用工具把所有的lua文件加密,具體是將lua文件讀到內(nèi)存,然后使用zip等緊縮加密庫進(jìn)行緊縮加密,然后將緊縮加密以后的數(shù)據(jù)保存為和源文件同名的文件。打包以后運(yùn)行l(wèi)ua文件的時(shí)候,則先讀出lua數(shù)據(jù),然落后行解密,將解密后的流數(shù)據(jù)傳給lua虛擬機(jī)。
  2、重量級(jí)的解決方案,此方案是上1種方案的擴(kuò)大,也是商用游戲的方案,實(shí)現(xiàn)1個(gè)游戲文件包,打包前將資源和腳本都使用工具打包到1個(gè)文件,可以在打包的時(shí)候加密緊縮,也能夠不加密緊縮。然后在運(yùn)行的時(shí)候直接從包內(nèi)讀出相應(yīng)文件的數(shù)據(jù),然后解密解緊縮,然后提供給游戲引擎使用。這也是端游普遍使用的技術(shù),手游目前大部份也開始使用此技術(shù)。
  本文主要扼要講授第1種方案,第2種方案則有時(shí)間再寫1篇博客。好了,我們開始進(jìn)入正題吧。
  首先是緊縮lua文件,代碼以下:
  int write_file_content(const char* folder){
  //取得文件數(shù)據(jù),并緊縮文件
  FILE* fpin = fopen(folder, "wb+");
  if (fpin == NULL)
  {
  printf("沒法讀取文件: %s ", folder);
  return 0;
  }
  //得到文件大小
  fseek(fpin, 0, SEEK_END);
  unsigned int size = ftell(fpin);
  //讀出文件內(nèi)容
  fseek(fpin, 0, SEEK_SET);
  void* con = malloc(size);
  int r = fread(con, size, 1, fpin);
  //進(jìn)行加密操作
  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 時(shí)產(chǎn)生毛病 ",folder);
  }
  printf("%s 緊縮前大小:%ld 緊縮后大小:%ld ", folder, size, zip_con_size);//寫文件內(nèi)容
  fseek(fpin, 0, SEEK_SET);
  int len = fwrite(zip_con, zip_con_size, 1, fpin);//釋放資源
  fclose(fpin);
  free(zip_con);
  free(con);
  return 0;
  }
  復(fù)制代碼
  然后是解密操作,代碼以下:
  void* read_file_content(const char* folder, int& bufflen){
  FILE* file = fopen(folder, "wb+");
  if (file)
  {
  {
  printf("沒法讀取文件: %s ", folder);
  return 0;
  }
  //獲得文件大小
  fseek(file, 0, SEEK_END);
  unsigned int size = ftell(file);
  //讀出文件內(nèi)容
  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)
  {
  printf("解壓 %s 時(shí)產(chǎn)生毛病 :%d ", folder, code);return 0;
  }
  //釋放資源
  fclose(file);
  free(con);
  //zip_con由外部釋放
  bufflen = zip_size;
  return zip_con;
  }
  復(fù)制代碼
  最后就把此流文件塞給lua的虛擬機(jī)便可,即以流方式運(yùn)行l(wèi)ua代碼。
  對(duì)Android app,dex源碼文件安全性是最重要的,因此,這個(gè)dex源碼加密保護(hù)其實(shí)很有必要,在這個(gè)方面,可以做到的有愛加密這個(gè)平臺(tái),不同類型的利用也有不同的加密保護(hù)方案,詳細(xì)可以在這里了解: http://www.ijiami.cn/appprotect_mobile_games修改lua的文件加載器,自定義lua文件加載
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 精品欧美一区二区在线看片 | 自拍偷拍亚洲区 | 成人国产视频在线观看 | 国产裸舞凸点福利小视频 | 欧美一级毛片免费大片 | 日韩激情中文字幕一区二区 | 国产操操操| 国产亚洲一区二区三区不卡 | 欧美一区二区三区精品国产 | 国产伦精品一区二区三区在线观看 | 欧美18videosex护士 | 操操操操网| 国产精品视频久久 | 在线看国产视频 | 韩国理论片在线观看 | 欧美一区二区三区香蕉视 | 91日本在线观看亚洲精品 | 日本欧美一区二区三区视频 | 在线视频一区二区三区四区 | 久久国产精品久久国产片 | 成人小视频免费 | 日本亚洲精品久久 | www在线视频在线播放 | 国产精品一区高清在线观看 | 日韩精品一区二区三区视频 | 欧美特级一级毛片 | 久久国产影视 | 色拍自拍亚洲综合在线 | 国产成人精品视频一区二区不卡 | 日本理论午夜中文字幕第一页 | 一二三四视频免费观看在线看 | 国产精品成人免费 | 亚洲欧洲久久精品 | 亚洲欧美日韩综合在线一区二区三区 | 手机看片日韩日韩国产在线看 | 国产精品久久久久久久毛片 | 国产欧美日韩精品高清二区综合区 | 欧美日韩一区二区三区久久 | 欧美人与物videos新另类性 | 欧美日韩在线播一区二区三区 | 欧美性精品videofree |