# 小程序代码加固功能介绍

为提高微信开放平台生态安全性,针对小程序开发过程中的安全问题,如代码易被反编译,核心业务逻辑被破译,算法易被二次打包等,导致小程序存在被破解、核心代码被盗取的风险。平台将提供代码加固功能,可实现对小程序前端代码进行加密,以防止代码暴露,提高攻击者阅读前端代码逻辑的难度,同时开发者也应注意自身开发规范的严谨性,保证小程序的代码质量,保护小程序安全。 小程序代码加固是提供给开发者对小程序前端代码进行加密的功能,以防止代码暴露。

# 一、 功能简介

代码加固功能为官方提供的一款插件,只需在微信开发者工具中直接进行安装即可,操作便捷,无需额外耗时,可将JavaScript文件传递给加密工具,从而实现字符串加密、属性加密、调用转换、代码混淆等多项保护措施。建议涉及小程序中的敏感数据信息、核心算法逻辑、版权内容等需要安全保护的内容,都可以进行代码加固。希望通过以下使用说明(运行环境、安装流程、使用流程、反查流程),能帮助开发者更好地运用该功能。

# 二、 运行环境

  • 下载并安装 1.06.2206271 或以上版本的开发者工具,下载地址

# 三、 安装流程

方式一:打开微信开发者工具,在菜单栏选择"工具-插件-编辑器扩展"或"设置-扩展设置-编辑器扩展",找到 "代码加固" 点击"获取"进行安装。安装成功后,即可使用该插件功能。

显示

显示

方式二:打开微信开发者工具,直接点击"扩展"图标,在搜索栏中搜索"devtool-code-obfuscation" 并进行安装。安装成功后,即可使用该功能。

显示

显示

# 四、 使用流程

  1. 首先将生成加固配置文件,微信开发者工具首次加载激活插件时,会在当前工作区自动创建一份加固配置。

显示

  1. 选择需要进行加固的代码,如app.js,点击右键选择"进行代码加固"。

显示

  1. 选择点击"预览"/"真机调试"/"上传"后,会有对应提示弹窗,点击"确定"后,开始执行代码加固,并可完成后续预览

显示

# 五、 反查流程

    1. 当在vConsole或者https://mp.weixin.qq.com/("开发管理-运维中心-错误日志-错误内容")处,查看到有相关DEBUG 信息的错误内容时( 如[DEBUG app.js:34] ),代表该报错是加固后的文件所导致的,请注意该特征不会出现在未加固的文件中,未加固的文件仍保留原报错格式( 如mock(app.js:5:37) )
  • vConsole 中展示的错误内容

显示

显示

  • mp小程序管理后台展示的错误内容

显示

  1. 在开发者工具中找到 projectmaps 目录下任意的 ***.js.map.json 文件,点击右上角面板的编辑器标题栏,打开"Sourcemap代码加固调试",使用该工具可方便开发者对于加固后的文件进行错误分析

显示

显示 3. 将对应的DEBUG信息输入,以[DEBUG app.js:34] 为例,则分别将“ app.js ”和“ 34 ”输入至左右空白框中,前者为报错的文件名,后者则为在 vm 中的 pc 值,点击【反查】,可显示报错位置及对应文件

显示

  1. 若点击"定位",则显示代码加固调试源文件,且对具体位置进行标红,以便查找

显示 5. 若点击报错路径,则直接跳转至对应位置的文件处

显示

# 其他常见问题

# Q1: 加固后显示编译结果失败?

A1: 表示所加固的小程序内容,在小程序编译结果中没有对应的代码,所以导致替换失败,可以根据失败的提示信息,进行具体排查

显示

# Q2:如果想一次性批量进行代码加固,应该如何操作呢?

A2:若需要批量进行代码加固,可直接修改code_obfuscation_config.json中的configs字段即可

显示

代码示例如下:

{
    "desc": "关于本文件的更多信息,请参考文档 代码加固开发者文档",
    "switch": true, // 加固总开关,关闭则不执行加固流程
    "configs": [
    {
    "path": "pages/index/index.js", // 加固文件的路径
    "sub_switch": true // 加固子开关,该文件是否需要加固
    }
  ]
}

# Q3: 使用Sourcemap代码加固调试时,为什么查找不到报错路径?

A3: srcMiniprogramRoot目录下不存在该报错文件所对应的源文件

显示

# Q4: 代码加固后会对产品性能有影响吗?

A4: 产品性能影响与代码加固的内容、大小和数量有关,可能会影响代码体积,产品初始化耗时和执行速度,可通过性能说明文档作进一步了解。

如有其他相关疑问,欢迎随时参与社区讨论