COC 来啦!!!困扰许多人的代码安全,终于找到解决办法了!

2023-10-31 02:50

本文主要是介绍COC 来啦!!!困扰许多人的代码安全,终于找到解决办法了!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不论是保护自己的代码安全,还是从晓衡微店购买开发者出售的游戏代码上线,有一个长期困扰大家的问题:“代码混淆”

今天给大家推荐一款社区开发者「陈皮皮」的最新作品:COC 混淆插件

COC全称是:ccc-obfuscated-code,为什么要取这个名字呢?因为我猜想大多数人都玩过或听过 COC 这个词吧!

写文章、做游戏、卖东西都有一个共通的地方响亮的名字,可以提高打开机率!一点点小心得,在这里分享一下!言归正传,还是讲下 COC 插件的功能和使用方法:

安装步骤

step by setp

  1. 首先解压插件放到 CocosCreator 项目 packages 目录

  2. 打开项目,点击 [ 扩展 -> 代码混淆工具 -> 构建后自动混淆 ] (建议两步进入)

  3. 在弹出的COC 混淆工具面板上,勾选构建后自动混淆选项即可

 新手引导

start

一般情况下,在我们仅需要在项目开发内部测试之后才会开启混淆功能,只需要将构建后自动混淆勾选上!

COC插件是基于 obfuscated 的,它提供了大量的可选择参数,COC 插件已经将这些参数可视化,一起来看看:

参数非常丰富,而且皮皮为了方便大家使用,还做了中文提示,只需要将鼠标移动到参数名字上就能显示了,看下图所示。

晓衡在使用时发现,构建到微信小游戏时需要将 selfDefending 选择关闭才行,不然游戏不能正常启动。还需要注意,一定要点击窗口最底部的保存按钮才能生效哦!更多参数的说明!

24小时秒杀进行中,仅要6.66元

感谢大家支持一下骨瘦如柴的陈皮皮

参数详解

 arguments

以下为陈皮皮人通俗易懂的翻译,如果有不懂,欢迎留言!!!

compact

类型:boolean | 默认值:true

将代码压缩至一行。

controlFlowFlattening

类型:boolean | 默认值:false

注意:该选项将严重影响性能,影响高达 1.5 倍。使用 controlFlowFlatteningThreshold选项来控制转换概率。

开启代码控制流扁平化。控制流扁平化会转换源代码的结构,阻碍程序的阅读理解。

controlFlowFlatteningThreshold

类型:number | 默认值:0.75 | 最小值:0 | 最大值:1

应用控制流扁平化的概率。

这个设置对于代码体积大的情况非常有用,因为大量的控制流转换会降低代码的运行速度并且增加代码的体积。

controlFlowFlatteningThreshold:0等同于 controlFlowFlattening:false

deadCodeInjection

类型:boolean | 默认值:false

注意:该选项会急剧增加代码的体积(甚至高达 200%),如果不在乎代码体积可以使用该选项。可以使用 deadCodeInjectionThreshold来设置添加无用代码的比例。

注意:开启这个选项会强制开启 stringArray选项。

开启这个选项时会向源代码随机添加无用的代码。

deadCodeInjectionThreshold

类型:number | 默认值:0.4 | 最小值:0 | 最大值:1

设置 deadCodeInjection的比例。

debugProtection

类型:boolean | 默认值:false

注意:打开 DevTools 可能会让浏览器卡住。

开启这个选项之后 DevTools 的 console 栏基本上就不能用了(基于 WebKit 的浏览器和火狐都通杀)。

debugProtectionInterval

类型:boolean| 默认值:false

注意:会让浏览器卡住!后果自负。

开启之后,会让调试模式定期聚焦到 Console 栏,让 DevTools 的其他功能也没法用。这个选项需要开启了 debugProtection才有效。

disableConsoleOutput

类型:boolean| 默认值:false

禁用 console.logconsole.infoconsole.errorconsole.warnconsole.debugconsole.exceptionconsole.trace,具体实现是用空的函数替换掉这些函数。让人更难调试程序。

domainLock

类型:string[] | 默认值:[]

注意:当 target:node时这个选项无效

让程序只能运行在特定的域名或子域名下。这让那些只是复制粘贴代码的人(CV工程师~)更难受了。

可以同时锁定多个域名。举个栗子,要让程序只能运行在 www.example.com 就添加 www.example.com。要运行在 example.com 的所有子域名下的话就用 .example.com

exclude

类型:string[] | 默认值:[]

需要在混淆过程中排除的文件名。

identifierNamesGenerator

类型:string | 默认值:'hexadecimal'

设置标识符生成器。

可用值:

  • dictionary:从 identifiersDictionary列表中获取标识符

  • hexadecimal:和 _0xabc123类似的标识符

  • mangled:和 a、 b、 c类似的短标识符

identifiersDictionary

类型:string[] | 默认值:[]

设置 identifierNamesGenerator的标识符字典。

identifiersPrefix

类型:string | 默认值:''

设置全局标识符的前缀。

当你需要混淆多个文件的时候使用这个。开启后可以避免多个文件之间的全局标识符冲突。每个文件的前缀都应该不一样。

inputFileName

类型:string | 默认值:''

设置源代码的输入文件名字。这个名字将用于内部生成 source map 。

log

类型:boolean| 默认值:false

打印日志到控制台。

renameGlobals

类型:boolean| 默认值:false

注意:可能会让你的代码爆炸。如果你是大佬,当我没说。

混淆自定义的全局变量和函数。

reservedNames

类型:string[] | 默认值:[]

保留标识符,支持正则表达式。

reservedStrings

类型:string[] | 默认值:[]

保留字符串,支持正则表达式。

rotateStringArray

类型:boolean| 默认值:true

注意:要开启 stringArray才有用

根据一个固定和随机(混淆时生成)的位置变换 stringArray。这会让人难以匹配字符串到他们原来的位置。

如果你的代码体积不小那建议你使用这个。

seed

类型:string|number | 默认值:0

设置随机种子。

当种子为 0时,随机生成器就不会使用随机种子。

selfDefending

类型:boolean| 默认值:false

注意:开启这个选项之后不要对混淆后的代码进行任何更改,因为任何更改(例如丑化代码)都会触发自我保护导致代码无法运行。

注意:开启这个选项会强制将 compact设为 true

开启这个选项之后就不能对代码进行格式化或者重命名变量。任何人尝试美化混淆后的代码,都会让代码无法运行,使得代码难以理解和更改。

shuffleStringArray

类型:boolean| 默认值:true

注意:要开启 stringArray才有用

stringArray的内容随机洗牌。

sourceMap

类型:boolean| 默认值:false

生成混淆后的代码的 source map 。

Source maps 对于调试混淆后的代码很有帮助。如果你想要或者需要对产品进行调试,可以上传单独的 source map 文件到一个安全的地方,然后引用到浏览器中。

sourceMapBaseUrl

类型:string | 默认值:''

设置当 sourceMapMode:'separate'时的 source map 导入 url 的 BaseUrl。

sourceMapFileName

类型:string | 默认值:''

设置当 sourceMapMode:'separate'时的 source map 输出名称。

sourceMapMode

类型:string | 默认值:'separate'

指定 source map 的生成模式。

  • inline - 发送包含 source map 的单个文件而不是生成单独的文件。

  • separate - 生成与 source map 对应的 '.map' 文件。

splitStrings

类型:boolean| 默认值:false

根据 splitStringsChunkLength将字符串分成指定长度的块。

splitStringsChunkLength

类型:number | 默认值:10

设置 splitStrings的块长度。

stringArray

类型:boolean| 默认值:true

移除并用指定的列表替换字符串。举个栗子, varm="Hello World";中的字符串 HelloWorld将会被替换,语句会变成类似 varm=_0x12c456[0x1];的形式。

stringArrayEncoding

类型:boolean|string| 默认值:false

注意:要开启 stringArray才有用

这个选项会降低脚本的速度。

base64或者 rc4来加密 stringArray中的字符串,并且插入特定的代码用来运行时解密。

可用值:

  • true( boolean):用 base64加密 stringArray字符串

  • false( boolean):不加密 stringArray字符串

  • base64( string):用 base64加密 stringArray字符串

  • rc4( string):用 rc4加密 stringArray字符串。比 base64慢大概 30 - 50% ,但是让人更难获取初始值。

stringArrayThreshold

类型:number | 默认值:0.75 | 最小值:0 | 最大值:1

注意:要开启 stringArray才有用

你可以设置这个来调整字符串插入 stringArray的概率。

这个设置对于代码体积大的情况特别有用。

stringArrayThreshold:0 等同于 stringArray:false

target

类型:string | 默认值:'browser'

允许你设置混淆后的代码的运行环境。

可用值:

  • browser

  • browser-no-eval

  • node

目前 browsernode的输出代码是完全一样的,但是某些特定的浏览器不能用 nodebrowser-no-eval的输出代码没有使用 eval

transformObjectKeys

类型:boolean| 默认值:false

开启 Object 的 key 转换。

unicodeEscapeSequence

类型:boolean| 默认值:false

开启或禁用字符串的 Unicode 转义序列。

开启该选项会大大增加代码的体积,同时字符串也不难被恢复。只建议代码体积小的情况下使用这个选项。

这篇关于COC 来啦!!!困扰许多人的代码安全,终于找到解决办法了!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/312300

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum