cocos2d加密
⑴ 使用cocos2d开发的手游安装包比较大,如何改善
解决方法有三种:
一:优化图片、资源,压缩安装包体积,牺牲一部分手游品质减小安装包体积,这也是比较常见的一种方法;
二:分包技术,资源切割,分段下载,进入游戏前进行二次下载。
三:爱加密的手游压缩技术,通过拆分资源,在保障了游戏品质和游戏体验流畅的情况下,实现资源后台自动加载,最高可以压缩80%。
以上三种解决方法中,爱加密的手游压缩技术是比较完美的一种,既没有影响游戏品质,又可以完美分包,不用二次下载,保障了良好的用户体验。
⑵ Cocos2d-JS服务端和客户端的通信怎么加密和解密
4.客户端用服务器端的公钥加密DES密钥Key,得到Key_enc并发送给服务器端;5.服务器端用私钥SK对客户端发送的Key_enc进行解密,得到Key;6.服务器端用Key对收到
⑶ app加密,app可以加密吗app加密是什么技术
可以加密。先来说一下一些常用的加密方法:
伪加密
伪加密是Android4.2.x系统发布前的加密方式之一,通过java代码对APK(压缩文件)进行伪加密,其修改原理是修改连续4位字节标记为”P K 01 02”的后第5位字节,奇数表示不加密偶数表示加密。
虽然伪加密可以起到一定防破解作用,但也会出现问题,首先使用伪加密对其APK加密后市场无法对其进行安全检测,导致部分市场会拒绝这类APK上传;其次,伪加密的加密方式和解密方式也早已公布导致它的安全程度也大大降低;再次,Android4.2.x系统无法安装伪加密的APK;最后伪加密只是对APK做简单保护,在java层源码加壳保护、核心so库、资源文件、主配文件、第三方架包方面却没有任何保护处理。注意:高版本不支持这样的方法,所以还是不要尝试使用这样的加密方式了。
混淆保护
把原来有具体含义的类名,变量名,方法名,修改成让人看不懂的名字,例如方法名getUserName编程了方法名
破解:耐心
运行时验证
运行时验证,主要是指在代码启动的时候本地获取签名信息然后对签名信息进行检验来判断自己的应用是否是正版,如果签名信息不是正版则提示盗版或者直接崩溃。当然你可以把必要的数据放在服务器端。
破解:找到smali文件中,判断是否相等的部分。改为常量true,即失效。
总之,反编译一些apk之后,只要是java代码写的总会有smil文件。对于smil文件,如果耐心读的话,还是可以查看到一些关键代码的。
相较于应用来说,游戏apk因为采用cocos2d-x 或者 unity3D,采用的是c++ 和c# 编写的跨平台程序,在apk采用JNI的方式。所以没有smali,可以防止静态被破解apk包。
当然游戏包apk 在运行的时候,会把.*so加载到内存中。动态也是可以在内存中抓取相应的数据。只不NDK 相对于smali破解来说,根部不是一个层级的关系。
⑷ 如何使用友盟 Cocos2d-x 分享组件实现 Android/iOS 分享功能
首先我简单介绍一下组件压缩包的组成
Cocos2dx
实现Cocos2d-x中跨平台分享功能,需拷贝到您项目的Classes文件夹中;
Platforms
原生的Android和iOS社会化组件SDK,需要您将库和资源拷贝到对应平台的项目中;
doc
组件的集成文档;
Umeng_Cocos2dx_Demo_V1.0
Android部分的demo文件,可以安装在手机上看一下简单的分享效果和样式
Cocos2d-x虽然是一个跨平台的引擎,但是对于Android和IOS平台来说,具体的集成方式还是有一定的区别,这里分别介绍Android和IOS平台集成中不同的地方,然后再集中介绍跨平台通用的部分。
Android平台集成步骤:
步骤一:
下载Cocos2d-x组件(下载地址) 并且将jar包添加到build path 路径下,将res资源文件夹加入到你工程对应资源文件下。将Platforms/Android/controller目录下的com文件夹拷贝到您的Cocos2d-x项目Android平台的src目录下,并且在jni/Android.mk中的LOCAL_SRC_FILES下添加如下配置 (注意格式,否则会编译出错) :
../../Classes/Cocos2dx/Android/CCUMSocialController.cpp \
../../Classes/Cocos2dx/ShareButton/UMShareButton.cpp \
../../Classes/Cocos2dx/Common/CCUMSocialSDK.cpp
步骤二:
在Cocos2dxActivity子类的onCreate方法下添加如下代码,用来完成初始化步骤
// this为Cocos2dxActivity类型, 参数2为描述符,可随意修改.
CCUMSocialController.initSocialSDK(this, "com.umeng.social.share");
步骤三:
在代码中覆写Cocos2dxActivity子类的onActivityResult方法,用来实现回调方法。在onActivityResult添加如下代码 :
// 授权回调
CCUMSocialController.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
iOS平台集成步骤:
步骤一:
解压SDK压缩包,将Platforms/iOS文件夹和Cocos2dx文件夹拖入工程目录,并删除Cocos2dx/Android文件夹,添加后应该是这个效果:
步骤二:
添加系统需要的framework
Security.framework //用于系统加密处理
libiconv.dylib //QQ互联的库文件
SystemConfiguration.framework //QQ互联需要的framework
CoreGraphics.framework //QQ互联需要的framework
Social.framework //分享组件需要的framework,如果不使用twitter则不需要
libsqlite3.dylib //QQ互联需要的framework
libstdc++.dylib //C++的库文件
CoreTelephony.framework //QQ互联需要的framework
libz.dylib //QQ互联需要的framework
Accounts.framework //系统需要的framework,如果不使用twitter则不需要
步骤三:
实现系统的回调方法,在Xcode工程中的ios文件夹下的AppController.mm文件中加入下面的代码:
#import "UMSocial.h"
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [UMSocialSnsService handleOpenURL:url];
}
完成了上述准备工作之后,就可以开始正式的分享步骤了,友盟提供了多种分享样式,有精力的开发者可以使用底层接口,可以完全自由定制分享界面和样式,不过相信大部分开发者们使用第三方插件的初衷都是为了节省精力,所以这里就只介绍使用默认分享界面的方法,有更多需求的开发者们可以自己探索自定义界面接口部分。
步骤一:加入系统需要的头文件
// 授权回调
#include "Cocos2dx/Common/CCUMSocialSDK.h"
#include "Cocos2dx/ShareButton/UMShareButton.h"
// 使用友盟命令空间
USING_NS_UM_SOCIAL;
// ...... 代码省略
// HelloWorld为cocos2d::CCLayer的子类
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !CCLayer::init() )
{
return false;
}
}
步骤二:分享按钮的创建
// 创建分享按钮, 参数1为按钮正常情况下的图片, 参数2为按钮选中时的图片,参数3为友盟appkey, 参数4为分享回调
UMShareButton *shareButton = UMShareButton::create("shareNormal.png","shareSelected.png", "你的友盟appkey", share_selector(shareCallback)) ;
步骤三:设置分享平台及内容
// 显示在友盟分享面板上的平台
vector
* platforms = new vector
();
platforms->push_back(SINA);
platforms->push_back(RENREN) ;
platforms->push_back(DOUBAN) ;
platforms->push_back(QZONE) ;
platforms->push_back(QQ) ;
// 设置友盟分享面板上显示的平台
shareButton->setPlatforms(platforms);
// 设置文本分享内容
shareButton->setShareContent("umeng social Cocos2d-x sdk.") ;
// 设置要分享的图片, 图片支持本地图片和url图片, 但是url图片必须以http://或者https://开头
shareButton->setShareImage("/sdcard/header.jpeg") ;
// 设置按钮的位置
shareButton->setPosition(ccp(150, 180));
// 然后开发者需要将该按钮添加到游戏场景中
CCMenu* pMenu = CCMenu::create(shareButton, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);
// ********************** 设置平台信息 ***************************
// CCUMSocialSDK *sdk = shareButton->getSocialSDK();
// sdk->setQQAppIdAndAppKey("设置QQ的app id", "appkey");
// sdk->setWeiXinAppId("设置微信和朋友圈的app id");
// sdk->setYiXinAppKey("设置易信和易信朋友圈的app id");
// sdk->setLaiwangAppInfo("设置来往和来往动态的app id",
// "设置来往和来往动态的app key", "我的应用名");
// sdk->setFacebookAppId("你的facebook appid");
// 设置用户点击一条图文分享时用户跳转到的目标页面, 一般为app主页或者下载页面
// sdk->setTargetUrl(" ");
// 打开或者关闭log
// sdk->setLogEnable(true) ;
// ********************** END ***************************
集成到这一步就完成了,如果没有异常,应该会出现下面的界面,这说明你已经成功实现了集成工作。
⑸ 我为什么应该选择 quick-cocos2d-x
最近有不少开发者都向我提出了一个问题:我为什么应该选择 quick-cocos2d-x?
这个问题在我看来,实际上包含几重意思:
1. 为什么会出现 quick 这个项目?
2. quick 和 cocos2d-x 到底有多大的区别?
3. 选择 quick 还是 cocos2d-x?
4. 选择 quick 的风险有多大?
5. quick 未来的路线图是什么?
----
1. 为什么会出现 quick 这个项目?
关于这个问题,我在 cn quick-x com 上有一个详细的说明,简单概括那就是:开发商需要一个更完善的 cocos2d-x + Lua 的解决方案。
2. quick 和 cocos2d-x 到底有多大的区别?
区别分为几个层面:
2.1. 底层 C++ 代码:quick 是建立在 cocos2d-x 基础上的开源项目,对 cocos2d-x 的功能几乎没有做裁剪(除了用一些更好的 Lua 扩展组件代替 cocos2d-x 内置的),主要修改都是新增功能。cocos2d-x 的 C++/Lua 项目拿到 quick 里是完全可以跑的。
2.2. 扩展的功能:针对开发商的实际需求,quick 里提供了加密解密、网络请求、IAP、第三方 SDK 集成、物理引擎封装等一系列扩展。这些扩展都是独立的代码,并不侵入 cocos2d-x 的底层代码。
2.3. 对 cocos2d-x 的改进:主要包括 Lua 支持的改善,以及触摸事件机制的改进。前者是为了游戏运行更稳定,后者则简化了 UI 的开发。
2.4. 一个 Lua 框架:quick 包含的 Lua 框架,绝大部分功能都可以直接跑在 cocos2d-x 上(实际上有开发商这样做)。这个框架的价值在于将 C++ 风格的 API 转为了 Lua 风格,让开发者可以用更精简的代码实现更多的功能。并且框架定义的规范、接口,让开发者可以创建更容易维护的程序代码。
所以 quick 和 cocos2d-x 就像美女穿衣服和不穿衣服的区别。
3. 选择 quick 还是 cocos2d-x?
如果你认为 Lua 是更靠谱的选择,那么请使用 quick。
4. 选择 quick 的风险有多大?
我能想到的有几点:
4.1. quick 的作者发疯了,对 cocos2d-x 乱改一气,造成了 quick 和 cocos2d-x 的兼容性被破坏。我不敢保证不会有这一天,但是我时刻警醒自己抵制住这种诱惑。大家需要的是一个可靠的产品,而不是一个按照个人意愿随心所欲改变的玩具。
4.2. 主要维护者跑路了,不维护 quick 了。我想出现这种情况,要么是转发过了 500,要么是 cocos2d-x 这个体系已经玩不转了。
4.3. quick 不再跟随 cocos2d-x 升级。这个请放心,当 cocos2d-x 3.x 成熟的时候,quick 会第一时间发布匹配的版本。追求新技术,是有节操程序员的基本素质。
5. quick 未来的路线图是什么?
quick 的架构会继续保持:cocos2d-x 最小修改 + 扩展 + Lua 框架 的形式。这样对 cocos2d-x 的修改最小化。同时,我们会努力将 quick 中对 cocos2d-x 的改进推送到 cocos2d-x 官方仓库。希望有朝一日能够实现官方版 cocos2d-x + quick 扩展 的架构。
而具体到功能上,quick 在 2013 年将实现下列目标:
5.1. 一个功能全面的 UI 库:亮点是自动布局管理和可扩展的 UI 控件。因为整个体系都是 Lua 实现,所以可以充分利用动态语言的优势。
5.3. 一个 MVC 库:包含基本功能的 MVC 架构,提供清晰的 API 和代码组织结构,并且可以很容易的扩展。
5.4. 全面的网络解决方案:异步 HTTP、HTTP 队列、Socket 接口和 WebSocket 接口。
5.5. 在线更新:在线更新游戏的脚本和资源,绕开蛋疼的 App Store 审核。
5.6. 第三方 SDK 接口标准化:目前已经支持 App Store IAP, Umeng, Flurry, 91, DianJin, Domob, YouMi 等 SDK 的接口。而今年我们将把这些 SDK 的接口标准化,实现类似 cocos2d-x plugin-x 的架构。但因为是动态语言,所以在灵活性上会有显着优势。同时我们也会陆续添加其他 SDK 的接口。
5.7. 专职团队:随着使用者的增加,我们也会尝试提供一些商业服务,这样 quick 将会拥有一个专职团队。未来的发展更快更好。
未来,quick 将按照平均每月一个版本的速度发布。而即将到来的国庆版,将实现 UI 库的基本架构和布局管理,以及在线更新功能。
⑹ cocos2dx-lua 能不能用AMF3来加密lua源文件
你用的是cocos2dx 3.2版本吗?如果是的话,加密就会比较简单了。
官方文档详见:http://cocos2d-x.org/wiki/Cocos_luacompile
.lua文件编译为.luac文件[.lua to .luac]
在项目文件目录下尝试
cocos luacompile -h查看帮助信息
cocos luacompile -s ./projects/MyLuaGame/src -d ./projects/MyLuaGame/src -e -k MyLuaKey -b MyLuaSign
./projects/MyLuaGame/src--》lua源文件目录
./projects/MyLuaGame/src--》生成luac存放目录
关于MyLuaKey及MyLuaSign的设置,见AppDelegate.cpp
stack->setXXTEAKeyAndSign("2dxLua", strlen("2dxLua"), "XXTEA", strlen("XXTEA"));
修改对应的key及sign即可。
⑺ 如何对cocos2d-x游戏源文件加密
本教程将会教大家如何使用Cocos2d-x来做一个基于tile地图的游戏,当然还有Tiled地图编辑器。(我们小时候玩的小霸王小学机里面的游戏,大部分都是基于tile地图的游戏,如坦克大战、冒险岛、吞食天地等)我们将会创建一个忍者在沙漠中找西瓜吃的小游戏。
在第一部分教程中,我将教大家如何使用Tile来创建地图,怎样把地图加到游戏中,怎么让地图跟随玩家滚动,以及怎样使用对象层。
在第二部分教程中,我将介绍如何在地图中创建可碰撞的区域,如何使用tile属性,如何制作可拾取的物体和动态修改地图,还有确保忍者不要吃撑了!
如果你还没有准备好的话,你可能需要先从《如何用Cocos2d-x3.0制作一款简单的游戏》系列教程开始学起,因为我们这个教程使用了大量的基本概念,而这些概念都可以从上面的教程中获取。
好了,让我们玩一玩tile地图吧!
创建工程骨架
让我们首先创建整个工程的骨架,这样可以确保今后我们需要的文件都包含进来了,并且能够跑起来。
首先工程命名为TileGame。
接下来,下载游戏资源文件。这个资源文件包里包含了以下内容:
玩家sprite。这个图片和《如何用Cocos2d-x3.0制作一款简单的游戏》差不多。
我使用cxfr这个工具制作的一些音效。
我使用GarageBand制作的一些背景音乐。(查看这篇博文获得更多的信息)
我们将会使用的tile集合--它实际上会和tile地图编辑器一块儿使用,但是,我想把它放在这里,余下的事情会变得更容易。
一些额外的“特殊”的tile,我将会在后面加以说明。
一旦你获得了这些资源,解压并把它拖到你的工程的“Resources”分组下面。(编者的话:上面的音频资源都被编者转成了mp3格式)
如果一切顺利,所有的文件应该都在你的工程里了。是时候制作我们的地图了!
使用Tile来制作地图
Cocos2d-x支持使用Tile地图编辑器创建的TMX格式的地图。(建议大家在安装的时候选择英文,本教程的Tile采用英文的)
下载完之后,直接双击运行。点击File\New,然后会出现以下对话框:
在 orientation部分,你可以选择Orthogonal。Layer format我们也选默认的 Base64(zlib compressed)。
接下来,设置地图的大小。记住,这个大小是以tile为单位的,而不是以像素为单位。我们将创建一个尽量小的地图,因此选择50*50。
最后,你指定每个tile的宽度和高度。你这里选择的宽度和高度要根据你的实际的tile图片的尺寸来做。这个教程使用的样例tile的尺寸是32*32,所以在上面的选项中选择32*32.
接下来,我们把制作地图所需要的tile集合导入进来。点击菜单栏上面的“map”菜单,“NewTileset...”,然后会出现下面的窗口:
为了获得图片,点击“Browse...”按钮,然后定位到工程的的Resources文件夹,选择 tmw_desert_spacing.png文件(我们刚才解压进去的),然后加到工程中去。它会基于文件名自动填充名称。然后把新图快 名称命名为“tmw_desert_spacing.png”.同时,设置下面的Tile spacing和Margin都为1。
你可以保留宽度和高度为32*32,因为tile的实际大小也是这么多。至于margin和spacing,我还没找到任何好的文档解释如何设置这两个值,下面是我的个人看法:
Margin就是当前的tile计算自身的像素的时候,它需要减去多少个像素(宽度和高度都包含在内)。(类比word、css的margin)
Spacing 就是相邻两个tile之间的间隔(同时考虑宽度和高度)(类比word、css的spacing)
如果你看看 tmw_desert_spacing.png,你将会看见每一个tile都有一个像素的空白边界围绕着,这意味着我们需要把margin和spacing设置为1。
一旦你选择ok,你将会看到Tilesets窗口中显示了一些tiles。现在,你可以制作地图了!在Tilesets小窗口,选择一个tile,然后再在地图上的任意位置单击,你就会看到你选中的tile出现在点中的地方了。
因此,继续制作地图吧---充分发挥你的聪明才智!确保增加至少一对建筑物在地图上,因为后面我们需要一些东西来做碰撞。
记住一些方便的快捷方式:
你可以在Tileset拾取器中拖出一个方框,一次选取多个tile。
你可以使用工具栏上的“Bucket Fill Tools”
⑻ Android APP加密方法都有哪些
安卓APP加密的方法主要分成三类:源码加密、数据安全和应用保护,而每一类又分成好几个小项。
源码加密包括:Dex文件保护、防二次打包、so文件保护、资源文件保护。以Dex文件保护为例,Dex文件保护又包括:高级混淆、DEX文件加壳、DEX文件加花、动态类加载、内存防mp。
高级混淆:代码混淆,可以降低代码可读性、缩小包大小。
DEX文件加壳:相当于把源码打包至其他文件夹下,逆向工具对加密后的dex文件解析,只能看到壳文件,可以防止解包后看到真正的源码。爱加密利用挖空技术实现函数级加密,安全强度高,启动效率快。
dex加花:由于大部分逆向工具都是线性读取字节码并解析,当遇到无效字节码时就会引起反编译工具字节码解析失败。爱加密插入无效字节码到dex文件之中,同时保证该字节码永远不会被执行,否则程序运行也会崩溃。这样,就能起到反编译的作用了。
dex动态类加载:爱加密加固后的dex文件源码可以动态分离,在运行时,将源码分段加载到内存当中。
内存防mp:程序运行时会释放代码,内存防mp可以防止程序运行时被劫持。
应用安全包括:log日志输入屏蔽、应用清场。清场技术依赖于云端黑名单、白名单DB,应用每次启动后便自动进行本地的黑名单、白名单DB数据更新,若检测到有异常情况,则可对用户进行提示。
数据安全包括:页面防劫持、本地数据保护、截屏保护、内存数据防查询、协议加密、虚拟键盘。
⑼ cocos2d-x-3.3rc0 lua 怎么编译成apk
仍然使用上次生成的test工程,我是放在bin目录下的。
在bin目录下创建文件test.bat文件,内容如下:
[cpp] view plain
@echo off
set DIR=%~dp0
%DIR%win32\php.exe %DIR%\lib\compile_scripts.php -zip -x main test/scripts/ test/res/test
说下complie_scripts.php的用法:
[cpp] view plain
usage: compile_scripts [options] dirname output_filename
options:
-zip package to zip
-suffix package file extension name
-p prefix package name
-x exclude packages, eg: -x framework.server, framework.tests
-q quiet
examples:
* packageing scripts/*.lua to res/game.zip
compile_scripts -zip scripts/ res/game
注意:需要将quick-cocos2d-x\bin\win32目录加入到系统PATH环境变量,另外过程中可能会提示缺少msvcr110.dll文件,自己解决一下就可以了。
运行test.bat后就会在test/res目录加生成test.zip文件。
要调用里面的脚本需要在mail.lua文件中CCLuaLoadChunksFromZip("res/framework_precompiled.zip")语句下添加一句代码:
CCLuaLoadChunksFromZip("res/test.zip")
删除掉原来的脚本,注意要保留main.lua,测试一下,证明程序可以运行。
这样脚本就不需要加密解密了。
⑽ 手机游戏用Cocos2d游戏引擎的开发代码如何保障不会被逆向破解
目前针对Cocos2d游戏引擎的开发代码防逆向主要是通过隐藏lua脚本文件,根据爱加密介绍,通过隐藏lua脚本文件,可以保护代码不被黑客给逆向,从而保护游戏逻辑的安全性。希望可以采纳,谢谢!