这个世界里,我们常常看到有两种胜利:一举成功和绝地反击。作为围观的酱油众,到底还是喜欢后者,因为够刺激、倍儿爽!

       近日,莉莉丝以一个小彩蛋取得uCool起诉案的关键性证据(后者为山寨版《Heroes Charge》开发商),不费吹灰之力即杀得对手丢盔卸甲,这事情一时成为手游界的热议话题。

QQ截图20150325094401.png

(彩蛋之一:莉莉丝游戏英文名)


众所周知,《刀塔传奇》基于cocos引擎开发而成,一经推出即大获成功。各种山寨版本也在海外市场野蛮生长,uCool甚至为《Heroes Charge》狂砸千万疯抢“超级碗”广告时段。面对西风压倒东风的情形,此次莉莉丝凭借“木马计”虽然力挽狂澜,成功翻盘。但是俗话说得好,亡羊而补牢,不如防患于未然。


今天cocos君就传授各位“三步加密法”,把代码重重加固、像套娃般倍加呵护。


1、拒绝纯裸奔,莫忘字节码

坚守节操,拒绝裸奔!所有攻城师请跟着我念:

lua要编译成字节码,不要白白送人!

lua要编译成字节码,不要白白送人!

lua要编译成字节码,不要白白送人!

——除非你真的懒到家了……


方法很简单,在cocos里调用cocos luacompile 命令,即可轻松将源码编译成字节码哦!

only_jit_command.jpg

(命令行)

file_encrypted_only_jit.jpg

(duang~效果出来啦!)


2、xxtea加密是个宝,谁用谁知道

做好了字节码,我们继续为心爱的代码升级安全措施。


Cocos2d-x v3.2版本已经加入了xxtea加密功能。开发者只需使用命令行 cocos luacompile 加-e参数,即可通过xxtea加密方式来升级安全指数,谁用谁知道!

jit_xxeta_encrypt.jpg

输入-e True是为了支持xxtea加密,如果不再输入其它的参数,则xxtea加密的key和sign为默认值,分别为2dxLua和XXTEA。另外我们也可以通过输入-k和-b来改变key和sign。


下面就是见证奇迹的时刻啦!

jit_xxtea_encrypt_file.jpg

(duang~代码一秒变乱码!)


具体使用方式可查看这篇教程:http://www.cocos2d-x.org/wiki/Cocos_luacompile


这里cocos君也要给大家一个小贴士:自2015年2月起,苹果官方要求所有iOS新应用必须支持64-bit,而当前Luajit稳定版本还不支持ARM64。所以为了让一套lua脚本能同时跑在32位和64位的iOS设备上,我们还可以使用`cocos luacompile -s src_dir -d dst_dir -e True -k sdfds -b affd --disable-compile True`指令来对Lua源文件进行xxtea加密,如此一来文件就可以同时跑在32位和64位的iOS设备上。


如下所示:

only_xxtea_encrypt_command.jpg

(命令行)

only_xxtea_encrypt_files.jpg

(毫无源码痕迹,就是这么任性!)


3、加固软件也别落,专业工具就是好

除了上面两个,我们还可以使用专业工具给代码加层360度防护网。


目前Cocos Store与多家移动应用安全服务商建立了合作,提供了各种实用第三方工具。这些工具能够帮助开发者在不改变用户体验的同时,对游戏应用进行加固保护,防止逆向工程破解,杜绝恶意篡改、注入代码、窃取创意、内存修改等危胁,让游戏源码仿若身在瑞士银行地下保险箱般固若金汤。

QQ截图20150325095939.jpg

(AnySDK加固功能)

此外,AnySDK也具有基础的加密功能,能够通过框架、打包工具、服务端等多方面加固处理,防止渠道包被破解,进行二次打包。


最后,让我们用一首诗来总结下——代码安全打油诗

植入彩蛋虽然好,防范未然是最高;

代码就像女盆友,照顾好了没烦恼;

lua要编字节码,xxtea加密是个宝;

加固软件也别落,专业工具就是好;

一切都在cocos,保护安全任调教。


还!没!完!!最后的最后,cocos君也有个“小彩蛋”要送给大家:手把手教大家如何植入一颗自己的彩蛋


世界上没有不透风的墙,也没有永远不被反编译的软件,即使强悍如微软Windows也挡不住山寨商的磨刀霍霍。所以像《刀塔传奇》那样加入彩蛋,为法律诉讼提供证据,未来可能成为游戏的标配。


(注:获取下述案例代码及资源请访问:http://upyun.cocimg.com/cocos/Brave.rar ,该代码需要在Quick-Cocos2d-x 3.3上运行哦)


启动案例游戏后,我们在背景的上下左右4个角各点一次,会弹出一个彩蛋界面。注意每个角只能点一次,多点少点都不行。

data1.jpg

data2.jpg