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
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页