cocos2dx 图片资源加密解密

2015年01月25日 10:39 0 点赞 0 评论 更新于 2017-05-09 10:28

本文将和大家分享 Cocos2dx 图片资源加密解密的方法。如果大家对该方法有疑问或有完善建议,可到社区发帖交流学习,社区也会持续更新这方面的内容,共同探讨使用过程中遇到的问题。

TexturePacker 图片加密功能

TexturePacker 最新版本新增了 ContentProtection 功能,可防止产品资源被反编译,即图片加密。不过目前官方仅支持 Cocos2d - iphone 的解密。TexturePacker 作者表示,不久后 Cocos2d - x 也将集成解密功能,相关代码已提交至 Cocos2d - x 的 GitHub 官方库。(文章部分内容参考自泰然论坛 TexturePacker 图片加密)

你的应用或游戏能够正常解密数据,但他人破解则需耗费大量时间。理论上,他人有可能从源码中提取密钥并编写解码器,因为解码器和密钥存储在应用中,否则无法使用游戏资源。然而,这需要具备专业知识,且耗费大量时间和精力,所以他们很可能会选择更简单的目标进行破解,而非你的资源文件。

TexturePacker 加密策略设置

假设你已使用 TexturePacker 创建过精灵表,只需打开一个已有的 .tps 文件。具体操作步骤如下:

  1. 下载最新版的 TexturePacker,在左侧会看到一个新的 option 属性:Content Protection。按下“Lock”图标,会弹出一个新窗口。
  2. 设置密钥:在编辑框中可输入想要设置的密钥,也可按“Create new key”按钮创建新密钥。若要关闭加密功能,使用“Clear/Disable”选项。
  3. 密钥存储与使用:在 TexturePacker 中按下“Save as global key”,可将密钥存储为全局变量,用于在 .pvr 查看器中解密。按下“Use global key”按钮,可将密钥复制到其他精灵表中。
  4. 文件格式设置:将文件格式改为 pvr.ccz 非常重要,这是当前唯一支持解密的格式。
  5. 完成操作:在 TexturePacker 中按下“Publish”完成设置。在命令行中输入的命令是 --content - protection <key>,其中 key 必须是 32 位十六进制值。

Cocos2d - x 工程准备 Content protection

替换文件

下载并拷贝以下 2 个文件到你的 cocos2d - x 文件夹里,替换原有的文件后重新编译 libcocos2d.lib

  • cocos2d - 2.1rc0 - x - 2.1.*\\cocos2dx\\support\\zip_support\\ZipUtils.h
  • cocos2d - 2.1rc0 - x - 2.1.*\\cocos2dx\\support\\zip_support\\ZipUtils.cpp

设置密钥

在应用中设置密钥,可在第一个精灵表导入前,于程序启动前调用 4 个方法完成。为增加破解难度,建议分开调用这些方法。

若密钥为 aaaaaaaabbbbbbbbccccccccdddddddd,需将其分成 4 部分,每部分 8 位:

  • aaaaaaaa
  • bbbbbbbb
  • cccccccc
  • dddddddd

128 位加密密钥每个值是 32 位,作为不同值传递给函数,在应用中更难被定位。设置密钥有以下两种方式:

  • 方式一:
    ZipUtils::ccSetPvrEncryptionKey(0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc, 0xdddddddd);
    
  • 方式二:
    ZipUtils::ccSetPvrEncryptionKeyPart(0, 0xaaaaaaaa);
    ZipUtils::ccSetPvrEncryptionKeyPart(1, 0xbbbbbbbb);
    ZipUtils::ccSetPvrEncryptionKeyPart(2, 0xcccccccc);
    ZipUtils::ccSetPvrEncryptionKeyPart(3, 0xdddddddd);
    

导入头文件与资源文件

在每个需要使用解密的文件中,确保添加以下代码:

#import "ZipUtils.h"

若已更改文件格式,需导入 .pvr.ccz 文件替代之前使用的文件,当然也可添加新文件到工程中。

总结

保护游戏资源不被盗用并不复杂。使用新的 Content Protection 功能,只需不到五分钟即可完成设置。

作者信息

boke

boke

共发布了 1025 篇文章