cocos creator 图片资源加密

cocos creator 没有对资源进行加密,打包的资源很容易被扒,需要自己实现一套加密方式。这里简单记录下我使用的加密解密方法。只适用手游 native!!!

加密

  • 加密算法: XOR
  • 时机:在资源压缩打包完成之后
  • 加密工具: python脚本
def encrypt(content):
    """
    加密内容
    :param content: 加密密的字符串
    :return: 加密之后的字符串
    """
    
    ... #此处省略非关键代码

    for i in range(len(content)):
        c = content[i]
        k = KEYS[i % cnt]
        res += chr(ord(c) ^ k)
    return res

伪代码,不能直接使用,这里的加密算法可以随意写,只要在C++层,创建图片之前能还原就行,比如,仅仅是把头几个字节放到最后去,只要能还原数据就行

加密完整之后按正常流程打包即可。

解密

在资源使用之前,需要进行解决,修改对应资源处理的方法,比如图片 CCImage.cpp:

static bool isEncrypted(const unsigned char * data, ssize_t dataLen)
{
    if (dataLen <= ENCRYPT_SIGNATURE_LEN)
    {
        return false;
    }
    return memcmp(ENCRYPT_SIGNATURE, data, sizeof(ENCRYPT_SIGNATURE)) == 0;
}

static unsigned char * decrypt(const unsigned char * data, ssize_t dataLen)
{
    unsigned char * out = const_cast<unsigned char*>(&data[ENCRYPT_SIGNATURE_LEN]);
    for (ssize_t i = ENCRYPT_SIGNATURE_LEN; i < dataLen; i++) {
        out[i - ENCRYPT_SIGNATURE_LEN] = data[i] ^ ENCRYPT_SIGNATURE[i % ENCRYPT_SIGNATURE_LEN];
    }
    return out;
}

...

bool Image::initWithImageData(const unsigned char * data, ssize_t dataLen)
{
	 bool ret = false;

    do
    {
        CC_BREAK_IF(! data || dataLen <= 0);

        unsigned char* unpackedData = nullptr;
        ssize_t unpackedLen = 0;

        // decrypt
        if (isEncrypted(data, dataLen)) {
            data = decrypt(data, dataLen);
            dataLen -= ENCRYPT_SIGNATURE_LEN;
        }
        ...
	} while (0);
	return ret;
}

2020/120/20 更新

加密工具

持续有人找我,希望我帮忙做一个拿来即用的加密工具,他们愿意付费。秉承着 “我可以教你怎么做,但我不会帮你干活儿” 的原则,一直都没做。最近发现,很多找到我的老板并不是技术,这个活儿只能我帮忙干了。工具目前已经写好,有 mac/win 两个版本,需要的可以找我。 不提供源码,需要源码的自己写,免费提供指导。

1 工具目录如下:

mac 版
win
win 版
win

2 使用方法

构建时,建议选择 default 方式,然后修复 config.json 文件:

{
    "assets": "root/jsb-default/res/raw-assets/",
    "cocos2dx": "root/jsb-default/frameworks/cocos2d-x",
    "password": "password123"
}
  • assets:构建之后的图片资源文件路径
  • cocos2dx: 构建之后的 cocos2dx 目录的路径
  • password: 加密密钥,由字母和数字组成,最短6位

3 加密结果

开发过程还是跟之前一样,没有任何影响:

构建完成之后,运行加密工具,然后再打包 apk 或 ipa,加密之后的资源:
res
游戏运行:
res


有任何问题可以联系我:

  • Q群:830756115
  • QQ:823336709
  • 微信:xulidong_china
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值