本文章讲述利用cocos2d-x 开发手机游戏的一些加密心得。如有问题,请多指正。

更多信息详见:http://blog.csdn.net/chengyingzhilian/article/details/25540441

本文地址:http://blog.csdn.net/chengyingzhilian/article/details/25658091

好了,进入本文的主题——脚本加密:

  作为商业游戏,版本维护,频繁的运营活动是必不可少的,因此游戏升级必须要做到不影响玩家的体验。如果三天两头的不断更新游戏,动辄100M app包中也许就为了更新了一个活动,很容易造成玩家的流失。因此,现在商业的游戏基本都是采用脚本来作为程序的首选语言,可以实现在线升级。动态语言嘛。cocos2dx本身支持也有支持的脚本语言——lua。
  Lua 是一个小巧的脚本语言。Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护。在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
  cocos2d-x是用lua脚本来写的,和javaScript一样lua是明文形式,如果不对脚本进行处理,那么我们所写的代码将可能暴露给别人。
  现在基本上常用的是使用luajit来实现加密的目的。

这种其实并不是真正意义上的加密,而是用luajit把lua脚本编译成字节码。

首先我们来用luajit来实现脚本的编译。其实就是一句话:

luajit -b source des

其含义即把源代码编译成二进制文件,达到加密的目的

当然我们不可以每一个文件都来运行一遍,这样太麻烦,不符合我们程序员‘懒’的内涵。

第一种加密办法:利用xcode

这种方法的好处是新生产的文件结构依然是按照源码目录。

既然我们使用xcode作为IDE,那我们完全可以创建一个scheme来实现时时编译的目的。

利用xcode创建scheme步骤:

1.新建一个target 选择 external build system,build tool 选择 usr/bin/sh 即可。名称:build-lua

2.然后配置如下调用。

我把luajit -b source des利用python 扩展了一下, 基本的含义就是把遍历lua目录,分别编译脚本到新的目录。

# -*- coding: utf8 -*-# this is single line comment
import os
import inspect
import ConfigParser
import re
import sys
import shutildef findAllLuaFiles(dir):targets = []for f in os.listdir(dir):p = os.path.join(dir, f)if os.path.isfile(p):targets.append(p)else:rs = findAllLuaFiles(p)for rf in rs:targets.append(rf)return targetsdef main():from optparse import OptionParserparser = OptionParser("usage: %prog [options]")parser.add_option("-s", action="store", type="string", dest="source", help="specifies the source folder")parser.add_option("-t", action="store", type="string", dest="target", help="specifies the target folder")(opts, args) = parser.parse_args()workingdir = os.path.dirname(inspect.getfile(inspect.currentframe()))sourceDir = opts.sourcetargetDir = opts.targetif os.path.exists(targetDir):shutil.rmtree(targetDir)shutil.copytree(sourceDir, targetDir)luaFiles = findAllLuaFiles(targetDir)from string import TemplatecmdTemplate = Template("/usr/local/bin/luajit -b $src $dist")for lf in luaFiles:command = cmdTemplate.substitute(src=lf, dist=lf)print "[Compile]", commandos.system(command)

3.在我们的主程序中设置如下,把新建的build-lua 添加进来,使其在每次build的时候都能运行一遍。

4.最后我们还要删除掉源代码,(注意在程序使用过程中,需要require 的时obj/下的文件。

Ps:在lua脚本引用的时候需要requrie的是des 目录,不是source目录。

如果你嫌上面的方法繁琐的话,可以你可以试试quick-cocos2d-x gitHub地址为:https://github.com/dualface/quick-cocos2d-x

第二种加密办法:利用quick-cocos2d-x

Ps:quick-cocos2d-x 是最新版是基于cocos2dx2.2.3所以无法在cocos2dx3.0里面使用,除非仿写ccLuaStack.h/.cpp 对比发现工程量浩大。

这种方式可以单独设置加密密钥和加密签名,是将源目录直接打包成zip包。

quick 是 cocos2d-x 针对 Lua 的豪华套装威力加强版。 可喜的是,quick团队在年初被触控科技收购了,以后我们就可以时时看到稳定更新了。

quick 和 cocos2d-x 的主要区别有如下几点:

  1. 更完善的 Lua 支持,包括一个 Lua 框架对 C++ 接口进行了二次封装
  2. 补充了大量 cocos2d-x 没有提供,但游戏需要的功能
  3. 为提高开发效率,提供了 Objective-C 和 Java 的桥接模块,以及强化的 Windows/Mac 模拟器

本文接下来将要讲述的就是quick的新功能,脚本加密。

在quick-cocos2d-x-develop/bin/目录下存在多个sh脚本,今天我们需要用到的就是compile_scripts.sh

compile_scripts.sh中带有不少的参数,详情如下:

1、 -h 帮助。显示参数的解释及使用,英文的。
2、-i 源码目录。
3、-o 输出文件或目录。
4、-p 包前缀。
5、-x 不包含在内的包。如果你有些源文件不想被编译进去的话,将会用到这个参数,只能设置包(对应文件夹),不能指定到文件,多个包的话用,(逗号)隔开。示例:-x app.test,server,指的是app/test/.*,server/.* 这两个目录下的所有文件都不会被编译。
6、-m 编译模式。有两个值 :
-m zip 默认,生成的是zip格式文件;
-m files 生成的是一个个文件,不打包,这个时候-o参数指的就是输出的目录。
7、-e 加密模式。可以对编译后的文件再进行 XXTEA 加密,有两个值:
-e xxtea_zip 对应-m zip,对打包后的zip格式文件进行加密,之后再打包成zip格式。
-e xxtea_chunk 对编译后的文件加密,最后打不打包取决于-m。
8、-ek 加密密钥。对-e有效,且设置了-e之后一定要设置-ek。
9、-es 加密签名。对-e有效,默认值为"XXTEA",这个只是为了让引擎知道文件是否被加密过,意义不大,所以可不设置。10、-ex 编译后的文件的后缀名。对-m files有效,默认值为"lua"。
11、-c 从一个文件加载参数列表。
12、-q 生成过程不输出信息。 

使用步骤:

1.复制quick-cocos2d-x-develop/lib/cocos2d-x/scripting/lua/cocos2dx_support下的CCLuaStack.h 和CCLuaStack.cpp 替换程序cocos2dx相应的文件。

quick帮我们扩展了三个文件,也就是我编译加密需要的三个函数:

   virtual int loadChunksFromZip(const char *zipFilePath);virtual void setXXTEAKeyAndSign(const char *key, int keyLen);virtual void setXXTEAKeyAndSign(const char *key, int keyLen, const char *sign, int signLen);

2.可以直接在终端运行如下命令,也可以利用scheme执行下面的命令,

compile_scripts.sh -i scripts -o files/desc.zip -e xxtea_zip -ek 123456 -es 654321

123456 为加密密钥

654321 为加密签名

3.在代码调用的时候:

bool AppDelegate::applicationDidFinishLaunching()
{...CCLuaStack *pStack = pEngine->getLuaStack();// 第二,四参数分别为第一 三 字符串的长度pStack->setXXTEAKeyAndSign("123456", 6, "654321", 6);// load frameworkpStack->loadChunksFromZip("res/framework_precompiled.zip");pStack->loadChunksFromZip("res/game.zip");...}

4. 删掉源代码文件

好了,我们的脚本已经编译加密了,再也不用担心被抄袭了。

手机游戏加密那点事儿_2d脚本加密相关推荐

  1. shc加密(仅仅对shell脚本加密)

    shc加密(仅仅对shell脚本加密) shc是一个专业的加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件,这个办法很好的解决了脚本中含有IP. 密码等不希望公开的问题 ...

  2. 游戏服务器支付系统,一种手机游戏支付服务器、支付方法及支付系统专利_专利查询 - 天眼查...

    1.一种手机游戏支付服务器,其特征在于,包括: 一存储模块:用于存储手机游戏用户在平台的唯一身份信息以及绑定的手机号码,所述唯一身份信息至少包括平台用户唯一标识和能够验证用户归属地关系的基本信息:一获 ...

  3. 说我菜?那好,我用Python制作电脑与手机游戏脚本来赢你

    目录 前言 分析(x0) 分析(x1) 那么如何去确定这个像素范围呢? 那么如何去判断出哪个块是黑块呢? 视频教程 源代码 关于pyautogui的安装 1.下载后安装 2.检测安装是否成功 前言 大 ...

  4. python写梦幻西游手游脚本辅助_深入解析Lua脚本加密技术,给游戏代码加上“紧箍咒”...

    不少安全专家表示,在互联网上失去对代码的控制,就像把银行的设计图交给抢劫犯一样. Lua是一种被广泛用于游戏开发中的计算机语言,方便开发者定制自己所需的功能.其中,红遍全球的<愤怒的小鸟> ...

  5. 自己写的手机游戏脚本

    由于过年时间特殊情况,在家特别无聊,就写了一个手机游戏的脚本 脚本所属游戏-战舰少女 功能很简单 ● 自动刷活动材料 ● 自动收获远征奖励 ● 自动出征升级 ● 自动分解船只 但是毕竟只是自己用的,选 ...

  6. 做我们最爱做的事儿—手机游戏开发势不可挡

    今天拜读了Himi的新作<Android游戏编程之从零开始>的几个样张,颇有感触. 还记得小时候抱着个游戏机不放而被爸妈骂么?还记得高中逃课玩游戏吗?还记得大学时整晚整天的CS.魔兽和网络 ...

  7. 手机游戏盗版现状与保护方案研究分析

    本文为360无线安全研究院投稿. 随着用户移动支付习惯的形成,手机游戏付费收入也逐年增长,但在看似繁荣的大好形势下,手游盗版问题一直相伴而生,并且有愈演愈烈之势.所以各大游戏厂商也开始注重手游的安全性 ...

  8. 网易云加密--Android安卓移动应用程序加密加壳保护方案防破解防逆向分析防游戏外挂

    网易云加密--Android安卓移动应用程序加密加壳保护方案防破解防逆向分析防游戏外挂 一.服务简介 网易云加密为网易公司旗下产品,致力于为移动应用程序提供专业保护方案,让加固变得更简单,一键搞定.目 ...

  9. Unity优化手机游戏学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.69 GB |时长:6h 44m 创 ...

最新文章

  1. 宁波工程学院2020新生校赛(重现赛)部分题解
  2. onSaveInstanceState与onRestoreInstance
  3. mac安装QT及QT基本使用
  4. python官网下载文件-使用Python下载文件的简单示例
  5. python debug run 结果不同_Python:PyCharm中运行与调试模式下的不同行为
  6. BZOJ1827[USACO 2010 Mar Gold 1.Great Cow Gathering]——树形DP
  7. 2021年12月最新大数据白皮书(附下载)
  8. spyder下载python3.5_ubuntu14.04 anaconda tensorflow spyder(python3.5) + opencv3
  9. 全能模拟器retroarch+android,全能模拟器(RetroArch Android)
  10. 【Python机器学习】梯度下降法(一) | 优矿(uqer.io)
  11. vue报错Navigating to current location (/login) is not allowed
  12. VMWare虚拟机下载|最新版|破解版
  13. 链游面临重大变局,AZTEC能否异军突起?
  14. 联阳(ITE)IT66021FN:HDMI转RGB芯片 3D 资料
  15. mysql迁移后数据对比_Oracle/云MySQL/MsSQL“大迁移”真相及最优方案
  16. MSI(微星) GP62mvr Ubuntu16.04 + Opencv3.4.1配置教程
  17. Addressable如何删除旧资源
  18. 学GIS能干什么?GIS专题图不香吗?
  19. 中国双膜片联轴器市场趋势报告、技术动态创新及市场预测
  20. 你的职业习惯,是不是第一份工作养成的?

热门文章

  1. gifsicle@5.2.1 postinstall: `node lib/install.js`
  2. 主机与开发板直连nfs配置与挂载
  3. 计算火车运行时间(c语言)
  4. 暴力递归——打印一个字符串的全部子序列
  5. 跨年夜,想请你看一场烟花秀!
  6. Dva.js+umi入门案例(models层,services层,components层详细代码与解析)
  7. 归并排序 c语言详解
  8. C语言:求最大公约数-更相减损法(循环自定义函数的定义与调用)
  9. c语言结构体的对齐方式,C语言结构体内存的对齐知识详解
  10. php 获取checkbox是否选中,javascript操作html复选框checkbox:如何判断复选框是否被选中...