跳至主要內容

Auto.js Pro加密说明

约 1022 字大约 3 分钟老猫

Auto.js Pro 加密说明

Auto.js Pro 支持在打包时对 js 文件进行加密,加密是通过多种方式将源码编译、加密为非明文文件。

注意: Auto.js Pro 的加密并不包括对代码的混淆,建议在使用自带加密前再用其他混淆工具对代码进行一次混淆。可配置编译脚本在打包时自动执行混淆,具体可参考 Pro 9.2.9 以上版本中的示例 -> 项目与打包 -> 代码混淆。

加密方式

由于 Auto.js Pro 目前有两个引擎 ———— 旧引擎 Rhino 和新引擎 Node.js。Pro 8 以前的代码均是使用 Rhino 引擎,在 Pro 9 则可在文件最前面增加”nodejs”来使用 Node.js 引擎,同时启用全新的异步 API(具体参见Pro 9 文档)。

每个引擎的加密实现方式有所不同,破解难度也会有所区别。在打包时可选择不同的加密等级,这里将说明不同加密方式的区别。

encryption-levels
encryption-levels

encryption-levels

Node.js 加密

还原难度:⭐️⭐️⭐️⭐️⭐️

Node.js 引擎目前只有一种加密方式,因此无论选择哪种加密等级结果没有不同。Node.js 加密的还原难度较高,推荐使用新的 Node.js 引擎来编写你的代码,文档参见第二代 API 文档

目前 Node.js 加密方式暂不支持 mjs 文件/ES Module,这些文件不会被加密,预计在 9.5 版本支持。

使用 Node.js 加密后运行错误,请先使用不加密方式打包,若加密后报错不加密正常,则可能是以下原因:

模块文件未被识别为 nodejs 文件,被使用 Rhino 引擎方式加密,导致无法运行。

比如主模块文件是 main.node.js,require 了另一个模块文件 mod.js,但是 mod.js 文件既没有以.node.js 结尾,也没有用"nodejs";文件头,因此在加密时被当成非 nodejs 文件使用快照、dex 等加密方式加密。运行时自然会报错。

有两种方式解决:

  • 所有 nodejs 文件,都以.node.js 结尾,或使用”nodejs”;`文件头
  • 在 project.json 中,配置"type": "node",则项目下的所有文件默认是 nodejs 引擎(此时 rhino 引擎的文件需要加上"rhino;"的文件头)

node_modules 下的文件未被识别为 nodejs 文件,被使用 Rhino 引擎方式加密,导致无法运行。

原理同上,推荐在 project.json 中,配置"type": "node"来解决这个问题。配置后项目下的所有文件默认是 nodejs 引擎,此时 rhino 引擎的文件需要加上"rhino;"的文件头。

在 64 位手机上加密,在 32 位手机上运行

Node.js 加密暂不支持跨 CPU 架构加密,因此只能在 64 位手机上加密只能在 64 位手机上运行;在 32 位手机上加密,CPU 架构选择 armeabi-v7a,则可以在 64 位、32 位手机上运行。

Rhino 普通加密

还原难度:⭐️

这种加密仅仅是将文件用某种方式加密,运行时需要解密,比较容易被还原。

Rhino Dex 加密

还原难度:⭐️⭐️

这种加密方式将 js 文件编译为 dex 文件,一方面提升运行效率,另一方面提高了破解门槛。但 dex 本身仍然能看出代码逻辑,推荐再使用加固或 dex2c 等方式进一步保护代码。

Rhino Snapshot 加密

还原难度:⭐️⭐️⭐️

这种加密方式将 js 文件编译为字节码文件,提升了运行效率和破解门槛。但字节码文件中的字符串等仍然为明文,因此不管使用什么加密,都推荐先使用混淆工具混淆。

加密时或加密后遇到错误

若加密过程遇到编译错误,可能是因为项目中包含 web 但 js 文件,这些文件也被参与加密导致。可以通过ignore文件将其排除加密范围,具体参见项目与配置

上次编辑于:
贡献者: bowyn