关于cocos2dx手游lua文件加密的解决方式

非常多使用cocos2dx+lua做游戏的同学。都会想到一个问题,我的游戏一旦公布,如何才干保证的我脚本代码不被破解。不泄露代码。尽管这和开源、共享的原则不合。可是代码也是coder的劳动成果,理应得到保护。

特别是商业游戏更是如此,不希望被别人破解掉源代码而且进行改动。

今天的话题就是怎样实现lua脚本文件的加密和解密。

我在网络上查过,都没有成熟的解决方式。然后我经过考虑之后,总结出两种解决方式,供大家參考。

1、轻量级的解决方式。APK打包之前,用工具把全部的lua文件加密,详细是将lua文件读到内存,然后使用zip等压缩加密库进行压缩加密,然后将压缩加密之后的数据保存为和源文件同名的文件。

打包之后执行lua文件的时候。则先读出lua数据。然后进行解密。将解密后的流数据传给lua虚拟机。

2、重量级的解决方式,此方案是上一种方案的扩展。也是商用游戏的方案,实现一个游戏文件包,打包前将资源和脚本都使用工具打包到一个文件。能够在打包的时候加密压缩,也能够不加密压缩。

然后在执行的时候直接从包内读出对应文件的数据。然后解密解压缩。然后提供给游戏引擎使用。这也是端游普遍使用的技术,手游眼下大部分也開始使用此技术。

本文主要简要解说第一种方案,另外一种方案则有时间再写一篇博客。好了。我们開始进入正题吧。

首先是压缩lua文件。代码例如以下:

int write_file_content(const char* folder)
{
	//获得文件数据,并压缩文件
	FILE* fpin = fopen(folder, "wb+");
	if (fpin == NULL)
	{
		printf("无法读取文件: %s\n", folder);
		return 0;
	}

	//得到文件大小
	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 时错误发生\n",folder);
	}
	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)
{
	FILE* file = fopen(folder, "wb+");
	if (file)
	{
	{
		printf("无法读取文件: %s\n", folder);
		return 0;
	}

	//获取文件大小
	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)
	{
		printf("解压 %s 时错误发生 :%d\n", folder, code);
		return 0;
	}

	//释放资源
	fclose(file);
	free(con);

	//zip_con由外部释放
	bufflen = zip_size;
	return zip_con。
}

最后就把此流文件塞给lua的虚拟机就可以,即以流方式执行lua代码。

当然更高级一点的方法是直接改写lua的文件载入策略。详情能够參考我的还有一篇博文,下一篇文章我会介绍把资源和脚本打包成PAK格式的技术。

改动lua的文件载入器。自己定义lua文件载入

时间: 2024-10-11 17:49:35

关于cocos2dx手游lua文件加密的解决方式的相关文章

关于cocos2dx手游lua文件加密的解决方案

很多使用cocos2dx+lua做游戏的同学,都会想到一个问题,我的游戏一旦发布,怎样才能保证的我脚本代码不被破解,不泄露代码.虽然这和开源.共享的原则不合,但是代码也是coder的劳动成果,理应得到保护.特别是商业游戏更是如此,不希望被别人破解掉源码并且进行修改. 今天的话题就是如何实现lua脚本文件的加密和解密. 我在网络上查过,解决方案http://www.ijiami.cn/appprotect_mobile_games然后我经过考虑之后,总结出两种解决方案,供大家参考. 1.轻量级的解

【cocos2d-x 手游研发小技巧(7)图片资源加密,Lua文件加密】

游戏开发中常遇到资源保护的问题. 目前游戏开发中常加密的文件类型有:图片,Lua文件,音频等文件,而其实加密也是一把双刃剑. 需要安全那就得耗费一定的资源去实现它.目前网上也有用TexturePacker工具来加密的,不过针对性还是不够强. 分析一下原理为: 1,转格式:将需要加密的文件转为流的方式: 2,加密:根据自己需要使用加密手段,MD5,AES,甚至可以直接改变位移,加一些自己的特殊字符也可以使文件简单加密,加密完后基本保证 图片类型基本用特殊软件预览不了也打不开,Lua文件加密后一片乱

血族手游Lua脚本及资源文件解密

之前一直和朋友在玩手游血族.有一天朋友问我能不能把里面某个角色的立绘拿下来.当时没多想就答应了,以为只要解压找到图片就行了.但是万万没想到,图片竟然打不开(被加密了). 快速分析 下载最新的血族apk并解压之后看到assets\lua可以猜测这个游戏是由cocos2d-lua开发的.打开其中的一个lua脚本看到里面都是乱码而且开头也没有特征值,应该不是使用xxtea加密的. story Lua.png 打开png图片提示无法读取该文件. png报错.png 打开lib\armeabi文件夹,li

cocos2d-x 图片资源加密,Lua文件加密 (转)

游戏开发中常遇到资源保护的问题. 目前游戏开发中常加密的文件类型有:图片,Lua文件,音频等文件,而其实加密也是一把双刃剑. 需要安全那就得耗费一定的资源去实现它.目前网上也有用TexturePacker工具来加密的,不过针对性还是不够强. 分析一下原理为: 1,转格式:将需要加密的文件转为流的方式: 2,加密:根据自己需要使用加密手段,MD5,AES,甚至可以直接改变位移,加一些自己的特殊字符也可以使文件简单加密,加密完后基本保证 图片类型基本用特殊软件预览不了也打不开,Lua文件加密后一片乱

VS下真机调试android native app(以cocos2dx手游为例)

0.虽然使用手游为例,但适用于任何原生C++ NDK编译方式. 1. 先说说项目背景, cocos2dx的手游,开发一般在windows vs下开发调试,IOS下使用xcode也能很方便的调试,但android就没那么幸运了,一般调试就靠log来分析问题,总觉得效率低下.调试原生的android程序adb ,cygwin gdb-ndk,ecplise下android native app也搞过,但觉得不太方便,而且能否调试成功还得靠RP,真是调试不易,且行且珍惜.就想能不能在vs下调试andr

cocos2d-x 手游源码站

尊重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/37829061 1.魔幻方块 链接:魔幻方块源码 关键词:魔幻方块源码 源代码 Cocos2d-x2.0 游戏源码 益智 休闲 游戏 游戏类型:休闲益智 游戏使用引擎:Cocos2d-x V2.0 代码平台:Windows VS2012 版权说明:该游戏由本人开发,买家购买后可任意使用代码(但不能转卖.不能使用相关资源文件用于商业用途). 游戏版本:V

Cocos2d-X手游源码/iOS/Android/cocos2dx源码/AppStore/手游资源“集中营”

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 游戏开发程序猿加班熬夜伤脑筋伤身体,花钱买技术,不如买游戏源代码. 节省开发周期和大量资金投入(工资.测试.学习),可以腾出大量时间精力和女友约会聊天,放松心情! 现在放出多套精品游戏cocos2d-x源代码. 大小游戏可以换皮上线!可学习 二次开发! 完整可编译,游戏体验安装包在网盘里放着,需要的看看. 店铺

我的文档 属性设置里找不到位置选项,以及文件夹迁移解决方式

我的文档 属性设置里找不到位置选项,以及文件夹迁移解决方式 转载请注明出处.http://blog.csdn.net/aaa123524457/article/details/47056951 欢迎关注http://blog.csdn.net/aaa123524457 刚装好的系统.<我的文档>默认是在C盘里的. 非常多人都会把它移到非系统盘,以避免消耗过多的系统盘资源. 直接说我遇到的问题: 刚装的windows server2008 r2系统,事实上和win7是一样的设置.我把C盘以下的&

玩手游虽易保安全不易,打造手游App定制加密方案

据权威统计,2013年移动游戏市场规模达到109亿,其中智能机游戏市场占74%,约为80亿,保守估计到2014年智能机游戏市场规模将超过200亿.手机游戏成为了很多用户休闲娱乐的最佳选择. 但是,手机游戏快速发展的同时,滋生了很严重的安全问题.很多游戏被盗版.二次打包.非法汉化.恶意植入病毒,导致游戏收益和品牌受到很严重的影响.而游戏修改器.外挂的泛滥直接影响游戏团队的生存,因为很多知名游戏被破解后,收费模式被改为免费:例如道具和装备免费,积分和金币自动上调等.这对于一款投入大量人力财力的游戏公