您的位置:首页 > 移动开发 > Cocos引擎

【转载】TexturePacker 如何使用自带的加密功能及在cocos2dx中的使用

2015-07-07 21:48 756 查看

【转载】TexturePacker 如何使用自带的加密功能及在cocos2dx中的使用

时间:2014-11-13 10:41:56 阅读:1656 评论:0
收藏:0 [点我收藏+]

标签:class 代码 src 使用 html 文件 问题 com log

在cocos2dx中使用纹理图集是非常节省资源的,在这里推荐 TexturePacker,而且 TexturePacker工具的加密接口也非常的好用,下面就来介绍一下。。。
TexturePacker 工具的加密,只是相对于一般使用的基础上增加了几步对密码操作的步骤(目前的加密功能仅适用于.pvr.ccz格式):
一、生成密码(图形化界面和命令行两种方式)
方式一:图形化界面生成密码



密码可以自己手动过输入,或者使用下面的这几个按钮,完后点击外面的空白区域就自动保存了。。。
(2)shell脚本命令行生成密码
1>、首先安装 commandline Tool,
菜单栏 -> Install commanndLine Tool
2>、参照 不忘初“辛”的帖子 /article/6990613.html,写
生成图集的脚本,并在此基础上增加 加密操作:

1 # next line is encrypt command option
2 # --content-protection "11111112122222223333333344444444" \




1 #! /bin/bash
2
3 CURRENT_DIR=`dirname $0`
4
5 # input paths
6 IMAGE_DIR=$CURRENT_DIR/imgs/
7
8 # path that game proj use
9 GAME_IMAGE_PATH=$CURRENT_DIR/
10
11 # path of the texture packer command line tool
12 TP=/usr/local/bin/TexturePacker
13
14 # $1: Source Directory where the assets are located
15 # $2: Output File Name without extension
16 # $3: RGB Quality factor
17 # $4: Scale factor
18 # $5: Max-Size factor
19 # $6: Texture Type (PNG, PVR.CCZ)
20 # $7: Texture format
21 # $8: encrypt key, Key: 128 bit, 32 hex digits [A-F0-9]
22 pack_textures() {
23
24     ${TP} --smart-update 25         --texture-format $7 26         --format cocos2d 27         --data "$2".plist 28         --sheet "$2".$6 29         --maxrects-heuristics best 30         --enable-rotation 31         --scale $4 32         --shape-padding 1 33         --max-size $5 34         --opt "$3" 35         --trim 36         --premultiply-alpha 37
38         --content-protection $8 39         $1/*.png
40
41 }
42
43 # do the job
44 for i in $IMAGE_DIR/*
45 do
46     if [ -d $i ]
47     then
48         spriteSheetName=`basename $i`
49         pack_textures $i $GAME_IMAGE_PATH/$spriteSheetName ‘RGBA8888‘ 1 2048 ‘pvr.ccz‘ "pvr2ccz" "12345678123456781234567812345678"
50     fi
51 done
52
53 # next line is encrypt command option
54 # --content-protection "12345678123456781234567812345678" \




至此,加密操作便是完了,密码是 12345678123456781234567812345678。
二、在cocos2dx中读取图集:
1、由于在cocos2dx引擎中集成了图集解密所需要的 ZipUtils类,所以不用引入直接使用就好。。。
2、在游戏还没有使用图集之前进行解密

1 // 图集解密   12345678123456781234567812345678
2     ZipUtils::setPvrEncryptionKey(0x12345678, 0x12345678, 0x12345678, 0x12345678);


3、然后,然后就正常使用就好啦,我贴出我在Lua中的使用:

1 local spriteFrameCache = cc.SpriteFrameCache:getInstance()
2     spriteFrameCache:addSpriteFramesWithFile("tmp/texture_tmp.plist", "tmp/texture_tmp.pvr.ccz")


以上使用的cocos2dx的版本为 v3.2,TexturePacker版本为。。。额,装完命令行工具就找不到版本号了。。。

内容更新:
在上面的博客中介绍到了使用命令行来加密图集,在使用的过程中我又发现了使用命令行新的有用的命令。。。
上面的命令行可以实现对一个所有处在同一目录下的资源进行打包,但是不能进行递归打包,那么就有了接下来的命令选项。。。
在上面的命令中 更改

$1/*.png


为:

$1


即将索引到图片改为索引到上级目录文件夹,这样的话就可以实现递归文件目录打包,但是有个问题,当要打包的所有图片过多或者过大而使一个图集装不下的情况时,需要进行动态递增打包,使用下面的命令
更改原来的

1 --data "$2".plist2 --sheet "$2".$6 \


为:

1 --data "$2"_{n}.plist2 --sheet "$2"_{n}.$6 3 --multipack \


上面脚本中的 _{n}是占位符,用来增加文件名用的, --multipack 是动态打包的选项。
打包出来的效果是:



TexturePacker
图片加密

TexturePacker最新版本中增加了一个新功能以防止你的产品资源被反编译出来。它被称为ContentProtection,即图片加密。

你的app或者游戏仍可以解密数据,但是其他人则需要耗上很长的时间才能够完成破解。

理论上别人仍可能从源码提取出密钥,并写出一些解码器,这是因为解码器和密钥已经被存储在你的app中-

否则不可能使用你的游戏资源。但是这需要花费知识,时间和精力来解密你的资源。所以他们很有可能找一些

其他更简单的猎物来破解而不是你的资源文件。

TexturePacker加密策略设置

假设你已经运行过TexturePacker 创建精灵表,所以只需要打开一个已经存在的.tps文件。

下载最新版的TexturePacker-在左侧你会看到一个新的option属性:Content Protection。按下“Lock”图标,并会弹出一个新的窗口:



在编辑框中你可以输入你想要设置的key-或者按Create new key 按钮创建新的key

使用Clear/Disable来关闭加密功能。

在 TexturePacker 中 按下Save as global key 会存储密钥key为全局变量,在.pvr查看器中用它来解密,

通过按下Use global key按钮你可以复制密钥key到其他精灵表中。

改变文件的格式为pvr.ccz是非常重要的,它是当前唯一支持解密的格式。

在TexturePacker中按下Publish完成在TexturePacker中的工作。

在命令行中输入的命令是:–content-protection <key> ,其中 key必须是32位十六进制值。

在Cocos2d工程准备 Content protection

下载并拷贝下面2个文件到你的cocos2d文件夹里: libs/cocos2d/Support

-替换已经存在的2个文件:

ZipUtils.h
ZipUtils.m

现在在你的app里设置密钥key。在第一个精灵表导入前你可以在你的程序启动前调用4个方法来完成它。

为了让他们更难被破解请尝试分开调用。

如果你的密钥是aaaaaaaabbbbbbbbccccccccdddddddd,你必须将它们分成4部分每部分8位:

aaaaaaaa

bbbbbbbb

cccccccc

dddddddd

128位加密密钥每个值是32位。在它是作为一个另一个值传递给函数,因此在app中它很难定位。

caw_setkey_part(0, 0xaaaaaaaa);

caw_setkey_part(1, 0xbbbbbbbb);

caw_setkey_part(2, 0xcccccccc);

caw_setkey_part(3, 0xdddddddd);

在每一个文件里使用caw_setkey_part,你都得确保添加下面一行:

#import “ZipUtils.h”

如果你已经改了文件的格式,那么现在你需要导入的是.pvr.ccz文件代替你之前使用的。

当然你也可以添加新文件到你的工程里。对,就是这样!

总结

保护你游戏资源被盗是容易的。使用新的Content Protection功能你只需要不到五分钟的时间来设置就可以做到。

苹果需要加密和内容保护

我不是律师&我不知道这是否合法!根据我对苹果的iTunes Connect指导和工业安全局的理解:如果你使用TexturePacker的Content Protection,你不需要在你的app/游戏里获得ERN认可。

加密仅是用于保护你的知识产权的,并且用户是访问不了的-在规定中不被包含。

查看工业安全局加密 FAQ(the Bureau of Industry and Securitys Encryption FAQ) -

问题 15 (What is Note 4?)里面说到:

…不在第五类第二部分的项,包含在Note 4中,但是没有限制,这些项有:

可消费的应用,一些例子:

软件或者音乐盗版和防盗版。
音乐,电影,曲子/音乐,数码照片-播放器,录音机和管理器。
游戏-设备,实时软件,HDMI和其他组件接口,开发工具。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: