通过TexturePacker加密图片资源(Cocos2d-x方式)

TexturePacker最新版本中增加了一个新功能以防止你的产品资源被反编译出来。它被称为ContentProtection,即图片加密。但目前官方只支持Cocos2d-iphone的解密.TexturePacker作者说,不久Cocos2d-x也将集成解密功能.代码已经提交Cocos2d-x github官方库.(文章内容复制泰然论坛TexturePacker 图片加密,只是修改了相应部分)

Read as other languages:英语

你的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-x工程准备 Content protection

下载并拷贝下面2个文件到你的cocos2d-x文件夹里并且替换掉原有的文件重新编译libcocos2d.lib: cocos2d-2.1rc0-x-2.1.*\cocos2dx\support\zip_support

  1. ZipUtils.h
  2. ZipUtils.cpp

现在在你的app里设置密钥key。在第一个精灵表导入前你可以在你的程序启动前调用4个方法来完成它。
为了让他们更难被破解请尝试分开调用。
如果你的密钥是aaaaaaaabbbbbbbbccccccccdddddddd,你必须将它们分成4部分每部分8位:

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

然后使用:

  1. ZipUtils::ccSetPvrEncryptionKey(0xaaaaaaaa,0xbbbbbbbb,0xcccccccc,0xdddddddd); 
[cpp] view plain copy
  1. ZipUtils::ccSetPvrEncryptionKey(0xaaaaaaaa,0xbbbbbbbb,0xcccccccc,0xdddddddd);  
或者

  1. ZipUtils::ccSetPvrEncryptionKeyPart(0 , 0xaaaaaaaa) 
  2. ZipUtils::ccSetPvrEncryptionKeyPart(1 , 0xbbbbbbbb) 
  3. ZipUtils::ccSetPvrEncryptionKeyPart(2 , 0xcccccccc) 
  4. ZipUtils::ccSetPvrEncryptionKeyPart(3 , 0xdddddddd) 
[cpp] view plain copy
  1. ZipUtils::ccSetPvrEncryptionKeyPart(0 , 0xaaaaaaaa)  
  2. ZipUtils::ccSetPvrEncryptionKeyPart(1 , 0xbbbbbbbb)  
  3. ZipUtils::ccSetPvrEncryptionKeyPart(2 , 0xcccccccc)  
  4. ZipUtils::ccSetPvrEncryptionKeyPart(3 , 0xdddddddd)  

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

  1. #import "ZipUtils.h" 
[cpp] view plain copy
  1. #import "ZipUtils.h"  
如果你已经改了文件的格式,那么现在你需要导入的是.pvr.ccz文件代替你之前使用的。

当然你也可以添加新文件到你的工程里。对,就是这样!
总结
保护你游戏资源被盗是容易的。使用新的Content Protection功能你只需要不到五分钟的时间来设置就可以做到。

更多Cocos2d-x开发博文尽在 Koyoter's Blog
原文标题:【Cococs2d-x】通过TexturePacker加密图片资源(Cocos2d-x方式)


文章链接2:

游戏开发过程中要涉及到大量的图片,使用TexturePacker可以把小图合成大图。这是我们使用最多的功能,但是TexturePacker还带有对图片加密的功能。之前还是对加密不慎了解,所以写下来分享下。

把图片导入到TexturePacker中:

 

接下来就是加密了

 

>----- Create new key 是系统随机密钥

>----- Clear/DIsable  启用、关闭图片加密功能

>----- Save as global key 将密钥作为全局的密钥,以后对其他的图片加密直接点击use global key就行

>----- Use global key 使用保存的全局密钥

 

点击Save

点击Publish。把生成的plist和ccz文件复制到资源文件夹下面就行了。

 

由于使用的cocos2dx 3.0的版本不需要更新ZipUtils文件。同样TestCpp中也有示例:\cocos2d-x-3.0\tests\cpp-tests\Classes\TexturePackerEncryptionTest

在这里使用的密钥为:

 1 76bcbb68 3a89c4f1 a9dfbac2 65a46419 //(加密的 必须是32位十六进制值)   

中间的空格我手动添加的,因为在程序中使用需要把32位密钥分成4个十六进制的值。我们可以在cocos2dx的AppDelegate中添加设定密钥,或者在我们使用的位置添加。

本示例在AppDelegate中添加的

用到的头文件:

 1 #include "cocos/2d/ZipUtils.h"  

复制代码
 1 bool AppDelegate::applicationDidFinishLaunching() {  
 2     // initialize director  
 3   
 4     ..............  
 5   
 6     // 2528bd78 112d53ef fa5e5fb2 b7a5b25a (加密的 必须是32位十六进制值)  
 7     ZipUtils::setPvrEncryptionKeyPart(0, 0x76bcbb68);  
 8     ZipUtils::setPvrEncryptionKeyPart(1, 0x3a89c4f1);  
 9     ZipUtils::setPvrEncryptionKeyPart(2, 0xa9dfbac2);  
10     ZipUtils::setPvrEncryptionKeyPart(3, 0x65a46419);  
11   
12     // 或者按照这种方式添加  
13     //ZipUtils::setPvrEncryptionKey(0x2528bd78, 0x112d53ef, 0xfa5e5fb2, 0xb7a5b25a);  
14   
15     auto scene = TexturePackageEnvryption::scene();  
16     // run  
17     director->runWithScene(scene);  
18   
19     return true;  
20 }  
复制代码

 

对密钥设置完成。

在我们程序中具体使用如下:

复制代码
1  SpriteFrameCache::getInstance()->addSpriteFramesWithFile("TexturePackageEncryption/poker.plist", "TexturePackageEncryption/poker.pvr.ccz");  
2    
3  auto spriteRole = Sprite::createWithSpriteFrameName("1.png");  
4  spriteRole->setPosition(Point(240, 320));  
5  this->addChild(spriteRole);  
复制代码

转载地址:https://www.cnblogs.com/luorende/p/6092808.html 


个人使用后说明:
AppDelegate中解密可行,在实际场景应用中,如果ccz中存储单图,可直接使用文件名调用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章