Autox.js 中文文档 下载 App

Autox.js 代码混淆与加密 webpack-autojs 保护脚本源码

脚本不想被别人看见源码?

打包成 APK 分发时,里面的 JS 源码默认是明文的——任何人解压 APK 就能看到你的脚本代码。如果你的脚本里有辛苦写出来的核心逻辑、或者不想被直接抄走,就得做混淆和加密。

三层保护

层级手段保护强度说明
第一层JavaScript 混淆中变量名改短、字符串编码,增加阅读难度
第二层代码加密中高核心代码用密钥加密,运行时解密
第三层APK 签名 + ProGuard高APK 层面的混淆和签名保护

第一层:JavaScript 混淆(最简单)

webpack 打包时加 terser-webpack-plugin:

// webpack.config.js
const TerserPlugin = require("terser-webpack-plugin");

module.exports = {
    optimization: {
        minimizer: [
            new TerserPlugin({
                terserOptions: {
                    compress: {
                        drop_console: true  // 去掉 console.log
                    },
                    mangle: {
                        toplevel: true  // 混淆顶层变量名
                    }
                }
            })
        ]
    }
};

这样打出来的 JS 会变成这样:

// 混淆前(你的源码)
function calculateSigninReward(userId, days) {
    let base = 10;
    if (days > 7) base *= 2;
    return base * userId.length;
}

// 混淆后(别人看到的)
function a(b,c){var d=10;c>7&&(d*=2);return d*b.length}

变量名全成了单字母、空格全部去掉、字符串还可以编码——可读性大幅降低。

第二层:核心代码加密

webpack-autojs 插件支持对指定模块做加密。加密后的代码必须用相同密钥运行时解密——如果密钥不放 APK 里,别人拿到 APK 也解不开。

// webpack.config.js
const { AutoxWebpackPlugin } = require("autojs-webpack");

module.exports = {
    plugins: [
        new AutoxWebpackPlugin({
            encrypt: {
                // 加密密钥(自己保管好)
                key: "your-secret-key-here",
                // 指定哪些文件要加密(可正则)
                files: ["src/core/**/*.js", "src/critical.js"]
            }
        })
    ]
};

加密后的代码在 APK 里是二进制密文,运行时 Autox.js 引擎用密钥解密后再执行。没有密钥 = 看不到源码。

密钥放哪

方案安全性说明
硬编码在脚本里低和代码一起打包,反编译就能看到
远程下载中运行时从服务器拉取密钥,但需要网络
用户输入高首次启动时让用户输入授权码,配合在线验证

实战建议:核心逻辑(比如付费验证、算法实现)用加密 + 远程密钥。非核心逻辑(UI、通用工具)用混淆就行。

第三层:APK 层面的 ProGuard

如果你有 Android Studio 环境,可以在 APK 构建流程里加 ProGuard/R8 规则:

# proguard-rules.pro
-keep class org.autojs.** { *; }
-dontwarn org.autojs.**
-keepclassmembers class ** {
    @android.webkit.JavascriptInterface <methods>;
}

ProGuard 会进一步混淆 APK 里的 Java/Kotlin 代码和资源,让反编译更困难。

限制与现实

没有 100% 防破解——Autox.js 脚本本质还是要在 JS 引擎里执行,只要有人愿意花时间逆向、或者 Hook 运行时环境,总有办法拿到逻辑。

保护的正确心态是:

对方需要的保护
普通用户混淆就够了,没人专门去解
同行开发者混淆 + 加密,增加逆向成本
专业逆向多层保护也没用,但能拖慢速度

开源还是闭源?

项目规则里有 MPL v2 + 非商业附加条款——Autox.js 本身开源,但你写的脚本可以不开源。如果脚本是你自己写的,混淆和加密是你的权利。

总结

场景推荐做法
给朋友分享App 内打包,混淆可选
公开分发、有竞争webpack + terser 混淆 + 核心代码加密
商业项目全套:混淆 + 加密 + ProGuard + 远程密钥