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

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

## 一、 功能简介

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

## 二、 运行环境

- 下载并安装 `1.06.2206271` 或以上版本的开发者工具，[下载地址](log#nightly)。

## 三、 安装流程

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

![显示](https://res.wx.qq.com/op_res/8KVqrbGEXSKnZD53XAACTq7wrumZRn4GHD9UET7KJpQKIPeYGjcqTiCjIEh1IElg2kSmPvvavyYsVoiFoSQW_Q)

![显示](https://res.wx.qq.com/op_res/8KVqrbGEXSKnZD53XAACTg2GE9eSGZHwt-78G7_pQ1g6-c6RI4XX5ttSX2wqwoC6-M4JcjY9dTcikZamB92dqg)

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

![显示](https://res.wx.qq.com/op_res/1Ld0W-GkFFsftydbt-eHKtkqPIji7VVPOnjqrQeIUeCo9pwHUxFGbJ6eAUBxh89vTyx8bnbWoeOg85bMYznucg)

![显示](https://res.wx.qq.com/op_res/m5wGYfBmanCEat02PaKyX7DcBCquNOPeXyPkl62B2kpOHfvpc2xnW_LMPjgU8czPs-oKuBP0i89mGy3wlrJCVA)

## 四、 使用流程

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

![显示](https://res.wx.qq.com/op_res/m5wGYfBmanCEat02PaKyX6-VIiqO4vRB6W8Za1FDRZoy4nx6h9PnE6AQGDX7T6kTKaxyWYRRSY-jEJ69bhEKvQ)

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

![显示](https://res.wx.qq.com/op_res/m5wGYfBmanCEat02PaKyX6fLdvc-c0gc4PHIzaplvsi8EQ_jOmOErUOSAD7UGXzAWFUUNgCp5HLTPhsh8v0uYA)

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

![显示](https://res.wx.qq.com/op_res/m5wGYfBmanCEat02PaKyX6JeTqVUPFV-0jHyWFHcj0N5DnLZVI-L16RXew1UIGIZYLDVo6NW91llc9EGERYxfQ)

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

- vConsole 中展示的错误内容

![显示](https://res.wx.qq.com/op_res/m5wGYfBmanCEat02PaKyX1ci91_qqCqzr5eMPWasx-hHxvxDkDqWqHII36Fia3FmJK-crxhKYHSqUVdDMLlBEQ )

![显示](https://res.wx.qq.com/op_res/UA9NqONywI8DFeIMFMdNDwXN8zmqQBwyp1xzwen6TmzkQKXqpK5PJqIgz8ogyGWi5Xw8MwwyXdChxjFRUYbm1w)

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

![显示](https://res.wx.qq.com/op_res/UA9NqONywI8DFeIMFMdNDze9P-cbZ_ITLZYENEkf19kCdrf0MXLNbYhvCaLxznpXN2ka4rycsWlfl29ooyXyog)

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

![显示](https://res.wx.qq.com/op_res/L2nTUljcQebUZYQIa-6scBlgXIq9iWdT6rv5Z9ygRcvY1aIoNvzYXvkFGLDz9DwcMllppy4Nfkl8gz5Zger_Kw)

![显示](https://res.wx.qq.com/op_res/L2nTUljcQebUZYQIa-6scOmmnjrYMHs9oIxQYrHnmAETxnXQ2LrFH27Xn2fqLa0w2gfk-XcuMfvaLGovblohsw)
3. 将对应的DEBUG信息输入，以[DEBUG app.js:34] 为例，则分别将“ app.js ”和“ 34 ”输入至左右空白框中，前者为报错的文件名，后者则为在 vm 中的 pc 值，点击【反查】，可显示报错位置及对应文件

![显示](https://res.wx.qq.com/op_res/gPq-uhNnd-2LzBeNbVJs9mt69EPU0N4310l_GcXJBUXNeVTaa_yQzLpdkxRudNjkPxoGhO-zsTufjpCgqMkhkw)

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

![显示](https://res.wx.qq.com/op_res/UA9NqONywI8DFeIMFMdNDz9vcr8t8GxWGy0bcJwZD72JwzUvhzyl0tffjK8t-m5AHh0rSoXRnIrBZQI7xGxuPQ)
5. 若点击报错路径，则直接跳转至对应位置的文件处

![显示](https://res.wx.qq.com/op_res/gPq-uhNnd-2LzBeNbVJs9rL2xwYghPcVOtUj2bvTmMRlhTHbdknWCZaD1-iT9GuiHmiQOjrqHcqApzKe7s2eiA)

## 其他常见问题
### Q1: 加固后显示编译结果失败？
A1: 表示所加固的小程序内容，在小程序编译结果中没有对应的代码，所以导致替换失败，可以根据失败的提示信息，进行具体排查

![显示](https://res.wx.qq.com/op_res/uZuV76rszsuTYHjaSiQ_CWnl_BJlTma8ysG813NCa314rkcGJKXT6Jb-OoPenkkgADC0ALB33TEIWVb95oO5tw)
### Q2:如果想一次性批量进行代码加固，应该如何操作呢？
A2:若需要批量进行代码加固，可直接修改`code_obfuscation_config.json`中的`configs`字段即可

![显示](https://res.wx.qq.com/op_res/UJSwtZZ-b2WrhsR2BhHlREBkYr_TGwrJT-C58PeJw-CuRLyogcPHRV4W9yjySMWIajxDKQHQ7QTp4ZUE-p1XpA)

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

### Q3: 使用Sourcemap代码加固调试时，为什么查找不到报错路径？
A3: srcMiniprogramRoot目录下不存在该报错文件所对应的源文件

![显示](https://res.wx.qq.com/op_res/UA9NqONywI8DFeIMFMdND6i_7xg0pFe69yVgmza666knLbfMfk6mZKDcrwSTgq2kSdjn5_c9nCFiZ34PeIuUrQ)

### Q4: 代码加固后会对产品性能有影响吗？
A4: 产品性能影响与代码加固的内容、大小和数量有关，可能会影响代码体积，产品初始化耗时和执行速度，可通过[性能说明文档](Code_Hardening_Performance)作进一步了解。

如有其他相关疑问，欢迎随时参与[社区讨论](https://developers.weixin.qq.com/community/minihome/mixflow/1591986099080445956)。
