[已发布][插件] Cocos Creator 构建后 · 代码混淆 3.x+2.x 版 (优惠中)

本来想给字符串做个加密的, 后面发现有些代码不太兼容这个写法

在这里贴出代码, 方便大家手动加密吧 :smile:
也可以写个简单的浏览器 snip 小代码到浏览器使用, 逻辑差不多


/**
 * 异或加密代码里面的字符串内容(为了防止一些问题, 不加密 ``里面的字符串)
 * @param {*} postStr 
 * @param {*} encodeKey 9527
 * @return
 */
function replace_encode_string(postStr, encodeKey = 9527) {
  /**
   * 字符串加密
   * 加解密代码逻辑-加密
   * @param {*} postCoddingStr 字符串代码格式
   * @returns 加密的字符串版本
   */
  function encodeJSstring(postCoddingStr) {
    postCoddingStr = postCoddingStr.toString();
    var getASCIIarr = [];
    for (var cStr = 0; cStr < postCoddingStr.length; cStr++) {
      getASCIIarr.push(postCoddingStr.charCodeAt(cStr) ^ encodeKey);
    };
    return getASCIIarr.join(',');
  };
  // /**
  //  * 加解密代码逻辑-解密
  //  * @param {*} postCoddingStr 加密的 ASCII 组合的字符串
  //  * @returns 解密的字符串(代码的原来样式)
  //  */
  // function decodeJSstring(postCoddingStr) {
  //     var getEnCodeArr = postCoddingStr.split(",");
  //     var getASCIIarr = [];
  //     for (var decStr = 0; decStr < getEnCodeArr.length; decStr++) {
  //         getASCIIarr.push(String.fromCharCode(Number(getEnCodeArr[decStr]) ^ encodeKey));
  //     };
  //     return getASCIIarr.join('');
  // };


  // 用来解密的
  var decode_ascii_str = `;function xor_de_d(s) { var a = s.split(","), r = []; for (var e = 0; e < a.length; e++) { r.push(String.fromCharCode(Number(a[e]) ^ ${encodeKey})); }; return r.join(""); };`;

  if (postStr.match(/`(.*)`/)) {
    console.log("[CC][混淆] 目前不支持加密 `` 之间的字符串!");
  } else if (postStr) {
    // 转换一下, 防止有什么非字符串出现
    postStr = postStr.toString();

    // 正则匹配内容
    var matArr_1 = [], matArr_2 = [], matArr_End = [];
    // matArr_1 = postStr.match(/'(.*)'/g) || [];
    // matArr_2 = postStr.match(/"(.*)"/g) || [];
    matArr_End = postStr.match(/"(?:\\.|[^"])*"|'(?:\\.|[^'])*'/g) || [];
    // Fs.writeFileSync("已匹配到字符串.filePath" + ".txt", matArr_End.join(""));
    console.log("已匹配到字符串=>", [matArr_End.length]);

    // 开始加密
    // for (var ii = 0; ii < matArr_1.length; ii++) {
    //   postStr = postStr.replace(matArr_1[ii], "xor_de_d('" + encodeJSstring(matArr_1[ii]) + "')");
    // };
    // for (var jj = 0; jj < matArr_2.length; jj++) {
    //   postStr = postStr.replace(matArr_2[jj], "xor_de_d('" + encodeJSstring(matArr_2[jj]) + "')");
    // };
    for (var kk = 0; kk < matArr_End.length; kk++) {
      postStr = postStr.replace(matArr_End[kk], "xor_de_d('" + encodeJSstring(matArr_End[kk]) + "')");
    };

    // 载入解密函数
    if (matArr_1.length > 0 || matArr_2.length > 0 || matArr_End.length > 0) {
      postStr = decode_ascii_str + postStr;
    };
  };

  return postStr;
};


临时补充 :laughing:::

[混淆][关键的][小游戏]

过审策略(目前为止,Help,过审的几十款游戏的总结经验)(首包过审率90%)
// # 1. 必须处理类名,方法名,变量名  ## 2. 必须处理字符串,加密或者其它编码处理,处理字符串时需要谨慎处理对象的字面量字符串,这个里面和路径字符串匹配一样需要谨慎处理  ### 3. 必须处理好 AST 语法树结构, 可以将代码乱序啥的组合拼接, 增加废代码时, 最好将废代码做成和 UI 脚本关联有点点用处的代码 #### 4. 必须控制好包体结构大小, 图片啥的 UUID 可以改写下, 这样打包就会自动重命名图片了, 也可以压缩下图片, 减小内存上的重复率 ##### 5. 能放在远程的资源或者脚本就放在远程 ###### 6. 要尽量采取不那么大众化的混淆方式, 能改写混淆结构就改写混淆结构, 混淆的目的只有一个(保护资源),顺带过审机器(w.x.t.t) ###### 7. 代码包侵权基本上就是代码的混淆程度不够(其实作者授权的意义不大,也不一定能过审), 处理不到位, 其它啥的就是要记得换下图片 UI 啥的(有人工审核) ######## 8. 补充一个冷知识,最近研发了字符串随机加密逻辑和变量名方法名函数名定向混淆后,提审发现要想再提高过审率,必须要增加包体(2倍~7倍),按照js文件的大小来指定,实测了三个包发现的规律,很关键,否则过包率会低30%左右,加上后首包一次过包的概率能到90%以上, 附:对于谷歌之类的可以考虑长函数拆解为多个小代码块去执行,着重于控制流的代码逻辑的运行流程的混淆.随机打乱字符串数组和转成字符串注册的函数代码也是很关键的内容,最好能打乱逻辑代码的运行流程.混淆程度一定要足够高, 代码逻辑运行流足够乱

皮皮大佬,不是早就免费了吗?

主要看需求, 混淆目前网上很多开源的, 根据自己的需求选择吧, 这里讨论的不仅仅是混淆而已, 还有部分过审的讨论, 这个方面就不再做过多赘述了, 另外我这款插件和皮皮大佬的版本在功能模块上还是有比较多的差异的

小·补充 (看不到的小彩蛋, 自行理解吧, 不再赘述了) :slightly_smiling_face:

【Google】【谷歌】【小游戏】【代码包侵权】【代码同质化】【恶意注册】【小游戏代码之所以过不了审,是因为单纯的混淆并没啥用处,即时使用的是所谓的最强混淆工具,因为是AI在审查】【小游戏内容涉嫌代码包内容侵权】【小游戏存在恶意注册嫌疑】【因游戏代码包内容与其他游戏高度相似审核不通过】【小游戏过审失败的原因】【AdSense】代码改动不到位,手动改动不到位,混淆不到位(单纯的混淆并不能过审)

目前手动处理来说, 最重要的事情是 ------                                                                                                    核心逻辑就是, 乱序混淆代码逻辑结构树, 在这个里面注入对应的逻辑代码, 所有手动加上的废代码, 都最好可以关联上业务代码(要有执行逻辑)

能拆分的代码就拆分执行(整体打乱JS的逻辑树的运行结构), 长函数拆成多个小函数放在外层或者其它地方执行, 可以直接编辑需要处理的代码(直接处理构建后的 .js 主游戏逻辑代码文件就行), 处理这个js比较省力, 不需要跨太多的不同的项目代码(构建前的ts太多), 切记切记, 混淆和拆分还有注入关联的废代码前一定要分析好代码结构, 考虑好要用什么样的处理方式最好(这是关键,前期准备好,后续才能直接通过类似重构一样的混淆去过审), 这样处理后再混淆保护下, 基本上就是一份崭新的代码结构, 恭喜了, 这就过包了.

mark.

ts的还不支持混淆么

1赞

所有的 ts 在构建后不是变成 js 文件了吗 ?没明白混淆 ts 是需要做什么呢?混淆 ts 以后,那打不开项目了吧 ?据我所知,Cocos2x, 3x 里面的 ts 代码在构建成为 安卓,小游戏,Web ,H5 这些平台的时候,代码都整合到 .js 文件里面了呀 ?

我十分赞同你的观点!确实只要js就够了!
经过这个混淆,重复上线的游戏是不是也没有什么问题了

1赞

是的,目前来说,手动改动20~35%就好了,然后开始混淆,过审的话基本上OK

大家好,我是 Cocos Store 的开发者<小有>,感谢大家的支持,
为了方便大家对插件的使用和理解, 特此制作了此视频的使用合集,另外为了针对 Jenkins 的那种使用方法做了个适配的新版 exe 的包,目前 Cocos 2x 新版已过审,3x 还在审核中,感谢大家 :smile::

Cocos Creator 代码混淆插件-安装插件

Cocos Creator 代码混淆插件-带参数使用-EXE

Cocos Creator 游戏代码混淆插件(安装完成后,可以自动混淆游戏逻辑和代码,也可以 exe 手动选择):

store.cocos.com/app/detail/3740

Cocos Creator 资源加密插件(可以一定程度上保护自己的游戏资源,防止被人直接反编译或者拿走):

store.cocos.com/app/detail/5202

Cocos Store 查看作者的作品集合(基本上都是兼容 Cocos 2x 和 3x 的插件),感谢大家的支持~O(∩_∩)O~

store.cocos.com/app/search?name=小有

另外为了给大家提供方便, 插件新版本更新了几个混淆的策略 .json 文件, 方便新手朋友之间复制替换使用

请问这个插件对 Google 机审有用吗?

您好,谷歌的话,我建议还是要手动改部分代码才行,谷歌如果是QP类的,那改造不少的,起码还需要把图片之类的个处理,不然马甲过不了,谷歌的话,代码和图片都查,重点是查你的代码结构运行流程逻辑

嗯嗯,感谢回复

1赞

Mask!这么细心的帖子居然这么少人

埃隆马斯克一下

啥时候还打折一下啊

双十一会有折扣的,今晚开始的

请问3.8的项目是否可以使用这套插件。

你好,其实目前全版本都可以用,也可以用这个exe文件:

另外年前这两周在更新新的逻辑和功能,具体的版本更新会放在年后同步更新 Cocos 2.x & 3.x 的插件版本

Cocos Creator 代码混淆插件-安装插件

Cocos Creator 代码混淆插件-带参数使用-EXE