cocos2d-x文件加密

2015年01月31日 10:57 0 点赞 0 评论 更新于 2025-11-21 15:50

今天将为大家详细分享关于 Cocos2d-x 文件加密的相关内容,大家在阅读过程中可以随时提问,下面我们正式进入正题。

TexturePacker 新增图片加密功能

在 TexturePacker 的最新版本中,新增了一项名为 Content Protection 的功能,此功能旨在防止产品资源被反编译。不过目前,官方仅支持 Cocos2d-iphone 的解密。据 TexturePacker 作者透露,不久之后 Cocos2d-x 也会集成该解密功能,相关代码已提交至 Cocos2d-x 的 GitHub 官方库。(本文部分内容参考自泰然论坛的 TexturePacker 图片加密文章,并做了相应修改)

虽然使用此加密功能后,你的应用或游戏仍可正常解密数据,但其他人若想破解则需耗费大量时间。从理论上讲,他人有可能从源码中提取出密钥并编写解码器,因为解码器和密钥存储在应用中,否则游戏资源将无法正常使用。然而,这一过程需要破解者具备相关知识,且投入大量的时间和精力。所以,他们更有可能选择其他更容易破解的目标,而非你的资源文件。

TexturePacker 加密策略设置

前提条件

假设你已经使用 TexturePacker 创建过精灵表,那么只需打开一个已有的 .tps 文件即可。

具体设置步骤

  1. 下载最新版 TexturePacker:打开后,在左侧会看到一个新的选项属性: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”,完成在该工具中的相关设置。
  6. 命令行设置:在命令行中输入命令 --content-protection <key>,其中 key 必须是 32 位十六进制值。

在 Cocos2d-x 工程中准备 Content protection

文件替换与编译

下载并将以下两个文件拷贝到你的 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

设置密钥

在应用中设置密钥时,需在第一个精灵表导入前,也就是程序启动前调用相关方法。为增加破解难度,建议分开调用这些方法。

假设你的密钥是 aaaaaaaabbbbbbbbccccccccdddddddd,需将其分成 4 部分,每部分 8 位:

  • aaaaaaaa
  • bbbbbbbb
  • cccccccc
  • dddddddd

128 位加密密钥由 4 个 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 文件,替代之前使用的文件。当然,你也可以向工程中添加新文件。

总结

保护游戏资源不被盗用其实并不复杂。借助 TexturePacker 的新 Content Protection 功能,你只需不到五分钟的时间进行设置,就能有效保护游戏资源。