手机游戏加密那点事儿_2d资源加密_1

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

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

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

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

关于图片资源的打包当然是采用TexturePacker了。官方网址:http://www.codeandweb.com/texturepacker

个人觉得是2d里面最好的资源打包工具,没有之一。

TexturePacker它是一款把若干资源图片拼接为一张大图的工具。TexturePacker可以直接选定一个文件夹,将里面的小图片生成一个大图片,并输出plist文件的工具。使用该工具,合图就非常简单了。TexturePacker自带有资源加密的功能。

关于如何使用。在此不再赘述。可自行搜索教程。

在此只想说明两点网上很少提及的:

1.命令行。

2.加密。

一、命令行

TexturePacker

界面的设置完全可以用命令行来执行。这样的好处就是完成可以批处理图片资源。前期资源是没有压缩和加密的。后期只需要替换压缩图片。使用命令行批处理一下。非常非常的方便。

1.命令行的安装。

默认安装TexturePacker 之后,命令行是没有配置到系统环境的。配置方法如下:

单击单击标题栏TexturePacker,选择安装命令行。即可。

2.TexturePacker 的一些常用参数信息

下面是TexturePacker 的一些常用参数信息。详细参数可直接在终端输入TexturePacker

You can specify one or more .png or .tps files or directories for processing.
   <folder>                   Recursively adds all known files in the sprite sheet
   <*.tps>                    *.tps file created with TexturePackerPro (requires pro license)
                              Additional set options override settings in the *.tps file
   <*.swf>                    Flash requires pro license
   <images>                   Image formats, supported:
 Output:
  --sheet <filename>          Name of the sheet to write, see texture-format for formats available
  --texture-format <id>       Sets the format for the textures.
                              The format type is automatically derived from the sheet‘s file name
                              if possible.
  --data <filename>           Name of the data file to write
  --format <format>           Format to write, default is cocos2d
 --force-publish             Ignore smart update hash and force re-publishing of the files
 --texturepath <path>        Adds the path to the texture file name stored in the data file.
                              Use this if your sprite sheets are not stored in another folder than your data files.
  --reduce-border-artifacts   Removes dark shadows around sprites
  --extrude <int>             Extrudes the sprites by given value of pixels to fix flickering problems in tile maps
  --scale <float>             Scales all images before creating the sheet. E.g. use 0.5 for half size
  --scale-mode <mode>         Use mode for scaling:

二,图片加密

接下来讲述资源加密的一些技巧, 关于图片加密其实TexturePacker官方有详细的指导说明,官方有一篇文档有完整的介绍。

http://www.codeandweb.com/texturepacker/contentprotection

不过,cocosBuilder作者已经不再维护Builder了。所以教程对应的cocos2d 2.x 有些过时。所以在此重新啰嗦一下.

1.效果预览:

首先看一下,资源包加密VS未加密预览的效果:

 VS 

采用TexturePacker加密之后,资源是无法被查看到的。

Ps:在开发的过程中,可以采用未加密的资源开发,之后再打包发布的时候,采用命令行批处理一遍即可。

2.资源加密步骤:

1.单击ContentProtection旁边的Lock图标。弹出lock窗口:

你需要填写32位的密钥(0-9 a-f)

  • Create new key 是系统随机密钥
  • Clear/Disable 启用/关闭图片加密功能
  • Save as global key 将该密钥作为全局的密钥,以后对其他的图片加密直接使用global key 即可。
  • Use global key 使用保存的全局密钥。

2.Save

3.Publish

接下来的步骤和官方的介绍不同:主要是3.0已经集成了图片加密的功能。

首先需要了解:

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

0xaaaaaaaa
0xbbbbbbbb
0xcccccccc
0xdddddddd

在TexturePacker官网介绍的方法是下载其提供的ZipUtils 文件替换cocos2dx 。在最新版的cocos2dx zipUtils 里面已经集成了对TexturePacker 解密的处理,所以无需按照其步骤处理。

Ps:下载其ZipUtils 复制替换后,cocos2dx lib 会出错。

我们直接使用coco2d-x-3.0自带的可以了。下面是对其解密的源代码:

cocos2dx/support/zip_support/ZipUtils.h
 /** Sets the pvr.ccz encryption key.
        *
        * Example: If the key used to encrypt the pvr.ccz file is
        * 0xaaaaaaaabbbbbbbbccccccccdddddddd you will call this function with
        * the key split into 4 parts as follows
        *
        * ZipUtils::ccSetPvrEncryptionKey(0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc, 0xdddddddd);
        *
        * Note that using this function makes it easier to reverse engineer and
        * discover the complete key because the key parts are present in one
        * function call.
        *
        * IMPORTANT: Be sure to call ccSetPvrEncryptionKey or
        * ccSetPvrEncryptionKeyPart with all of the key parts *before* loading
        * the spritesheet or decryption will fail and the spritesheet
        * will fail to load.
        *
        * @param keyPart1 the key value part 1.
        * @param keyPart2 the key value part 2.
        * @param keyPart3 the key value part 3.
        * @param keyPart4 the key value part 4.
        */
        static void ccSetPvrEncryptionKey(unsigned int keyPart1, unsigned int keyPart2, unsigned int keyPart3, unsigned int keyPart4);

Ps: 在ZipUtils 中还有其他类似的函数。使用其中一个即可。

调用:

我们在AppDelegate.cpp applicationDidFinishLaunching函数中增加如下代码:

ZipUtils::ccSetPvrEncryptionKey(0x12345678,0x87654321,0x12345678,0x87654321);

就可以正常使用资源了。

下面是Lua 使用资源的测试代码:

require "Cocos2d"

cclog = function(...)
    print(string.format(...))
end

-- for CCLuaEngine traceback

function __G__TRACKBACK__(msg)
    cclog("----------------------------------------")
    cclog("LUA ERROR: " .. tostring(msg) .. "\n")
    cclog(debug.traceback())
    cclog("----------------------------------------")
end

local function createShowSpriteScene()
    cc.SpriteFrameCache:getInstance():addSpriteFrames("files/sprite.plist")
    local showSprite = cc.Sprite:createWithSpriteFrameName("success_1.png")
       showSprite:setPosition(cc.p(200,200))
    return showSprite
end

local function main()

    -- avoid memory leak
    collectgarbage("setpause", 100)
    collectgarbage("setstepmul", 5000)

    local scene = cc.Scene:create()
    local layer = createShowSpriteScene()
    scene:addChild(layer)
    cc.Director:getInstance():runWithScene(scene)
end

xpcall(main, __G__TRACKBACK__)

当我们注释在AppDelegate.cpp中,添加的代码后:会报如下错误:

手机游戏加密那点事儿_2d资源加密_1,布布扣,bubuko.com

时间: 2024-10-23 10:16:31

手机游戏加密那点事儿_2d资源加密_1的相关文章

手机游戏加密那点事儿_2d脚本加密

最近有一位朋友求助我,他问我关于单片机你知道多少?我说啥也不知道.他就说不行,你帮我写一写关于单片机的一篇文章,题目就是你身边的单片机.这可真是累死我呀,我根本不知道啥是单片机呀!无奈之下,只得网上搜集资料了.经过一点时间的搜索,我发现我又增加了些知识,因为我对单片机了解了一点,虽然仅仅是一点而已. 于是写下来,供读者参考参考,写的不好还请原谅哈.以下是正文: 随着科技的进步与社会的发展,我们的生活越来越丰富多彩.其中有很多非常先进的一些东西改变了我们的生活,有手机,电脑,电视,电话,单片机等等

手机加密那点事儿_数值内存加密

本文章讲述利用cocos2d-x 开发手机游戏的一些加密心得.如有问题,请多指正. 更多信息详见:http://blog.csdn.net/chengyingzhilian/article/details/25540441 本文地址:http://blog.csdn.net/chengyingzhilian/article/details/25957895 好了,进入本文的主题--数据加密: 要将数据加密,不得不提的一款神器:八门神器.手机游戏中的金手指. 八门神器是安卓.iOS.塞班平台上通用

cocos2dx游戏资源加密之XXTEA

在手机游戏当中,游戏的资源加密保护是一件很重要的事情. 我花了两天的时间整理了自己在游戏当中的资源加密问题,实现了跨平台的资源流加密,这个都是巨人的肩膀之上的. 大概的思路是这样的,游戏资源通过XXTEA加密方法对流的加密方式,有自己的密钥和标识,通过标识可知是否有加密,密钥是自己程序当中的.除非有密钥,否则很难通过解出正确的文件.经过加密后,加密文件也就是游戏资源放在resource的自己文件夹中,否则在xcode编译到趁机是会识别不了文件.在程序中cocos2dx底层加入解密过程,就可以把文

Unity3d/2d手机游戏开发第二版 (金玺曾) 随书资源

http://pan.baidu.com/s/1c0xpn4s Unity3d2d手机游戏开发配书资源文件.rar 1.36G 书上的链接坏掉了,我在论坛上面买了一份,放这分享给买了书找不到资源的同学.

CocoStudio游戏发布后资源加密大致实现思路

截 止到目前,CocoStudio版本已经发展到1.5,各个子工具间也已经发生了巨大变化.但是,无论是动画编辑器,UI编辑器,场景编辑器还是 数据编辑器,它们生成(导出)的文件在商业开发中往往需要进行加密处理(当然,对于其中的一些部分加密也实在没有必要). 那么,版本发布时,如何对资源进行加密? 对此,以前官方没有给出任何回答.最近,我从cocoachina论坛上了解了几句,但是已经足够我们参考之用了.大致思路如下: NOTE: hanrea是cocoachina论坛中的一位高人,我有事经常与他

[转]手机游戏六大渠道评测标准大合集

From : http://www.199it.com/archives/182725.html 商务和渠道经常出现这样的桥段:“亲~求抱大腿”,“兄弟先别激动,你的是明星产品?”“不是……”,“有IP么?”,“没有……”,“数据怎样?”“还行……”,后来就没有后来了. 很多游戏,数据是通向渠道的硬指标,只是,S级和A级标准各家不一,都有自己的评级体系(每一家渠道特性不同,KPI也不同),自不必说. CP方表示: *基本上给不给资源都是看数据,也就是那个付费率和次日留存.特别是次日留存,每一家都

优化手机游戏性能,美术相关

何时选择3D(何时保留2D) 作为一个3d游戏美术,我得到的第一个关键教训就是,让所有的东西尽可能的保持低模--不要使用额外的不必要的顶点,如果你确实要让你的模型拥有精度,把它放置在贴图中.比如说,我们的建筑物都是用简单的方块创建而成,然后贴上带有质感的细节纹理. 当我们要为Vogel教授(它只在我们游戏的GUI和HUD中出现)建模时,首先尝试的是3D模型,但是最终,我们还是把它分解为像Flash中那样的多层2D平面.它运行非常流畅,看上去也更棒,事实最终的结果比用3D模型赞非常多!使用带有动画

Cocos2d-x手机游戏开发与项目实践具体解释_随书代码

Cocos2d-x手机游戏开发与项目实战具体解释_随书代码 作者:沈大海  因为原作者共享的资源为UTF-8字符编码.下载后解压在win下显示乱码或还出现文件不全问题,现完整整理,解决全部乱码问题,供大家下载. 下载地址:http://download.csdn.net/detail/oyangyufu/7665049

手机游戏渠道SDK接入工具项目分享(三)拨开云雾是个坑

一直在纠结是先写框架设计还是先写掉过的坑,最后本这娱乐大众的态度先写掉过的坑让大家乐呵下. 项目开发过程中遇问题无数,回顾下8个大坑照成了项目一定程度上延期甚至返工. 1.  项目一开始几个人把现有3家主流的产品(1接,棱镜,AnySDK)研究了一遍.没想先在这里就进坑了.在研究了几天后发现这3家虽推出有一定时间,但都是以第三方服务角度设计和开发的产品,与需求不符. 2.  版本管理.和流程管理等内容因为运营人员更替一直在调整,直到我提出需要加价才做吧.需求上快把打包工具做成OA系统了,删除了于