安卓iOS脚本变现网络验证

网络验证与卡密系统:安卓、苹果 iOS 自动化脚本通用(设备指纹+心跳容错)

安卓和苹果 iOS 脚本通用的网络验证与卡密系统全流程:用户中心创建软件获取 appid、卡密生成与绑定、设备指纹验证、心跳容错、云端变量远程控制、热更新管理,以及 ecNetCard 在安卓/iOS 中控/iOS 脱机版三端的接入实战。

约 11 分钟

脚本做出来怎么收钱、怎么防白嫖,是每个脚本作者都要面对的现实问题。本地注册码那套“算个码给用户”的方案早就不够用了——逆向者改一行判断就能绕过,卡密能无限复制,作者一分钱收不到还干瞪眼。

网络验证 + 卡密系统是目前手机自动化脚本行业主流的授权方案:卡密绑定设备、心跳持续校验、云端变量远程可控。而且它不只支持安卓——iOS 苹果脚本(中控版、脱机版)同样支持,三端共用一套平台。这篇文章把整套流程讲清楚:平台侧怎么配置、脚本侧怎么接入、安卓与 iOS 有什么差别、容错和防破解怎么设计。

一、整体架构:云端授权,脚本校验

网络验证的核心思路是:授权状态不在脚本里,在服务器上。

用户输入卡密 → 脚本请求服务器绑定 → 服务器校验并记录设备

脚本正常运行,期间持续心跳(卡密自带,无需额外调用)

卡过期 / 被禁用 / 换设备 → 服务器拒绝 → 脚本提示错误
  • 授权校验:卡密是否有效、是否绑定当前设备,由服务器说了算;
  • 持续心跳:不是“验证一次就完”,脚本运行期间持续通信,卡密被禁用立刻生效;
  • 脚本安全校验:可开启包名、APK/脚本指纹验证,防换壳、防篡改——这是区别于市面上多数网络验证平台的差异化能力。

支持平台一览

平台 最低版本(直接函数调用) 说明
安卓 EC 安卓 9.13.0+ 无需集成 SDK,直接调用 ecNetCard 函数
iOS 中控 iOS 中控 6.12.0+ 低于此版本需下载网络验证 SDK 包手动集成
iOS 脱机版 iOS 脱机版 3.1.0+ 同上,SDK 集成方式

三端共用同一个用户中心(uc.ieasyclick.com)、同一套 ecNetCard 函数、同一套卡密体系——一套授权方案,覆盖安卓和苹果脚本

二、平台侧配置:用户中心三步走

登录用户中心(uc.ieasyclick.com),核心操作集中在三个模块。

2.1 软件列表:先建“软件”,拿 appid

新增一个软件,就会获得 appid 和密钥——这是脚本里 ecNetCard.netCardInit 初始化卡密所需的参数。

创建软件时注意这些选项:

选项 说明
软件类型 选择安卓还是 iOS,选错可能无法正确匹配参数
验证包指纹 是否验证 APK 文件(需先在脚本列表上传 APK)
验证脚本指纹 是否验证 iec 脚本文件(需上传 iec)
心跳错误次数 心跳请求容错次数,网络抖动容错,达到阈值才报错
卡密验证错误次数 卡密验证容错次数,防止误判
脚本验证错误次数 脚本文件验证容错次数
开启验证 整个软件验证的总开关,开发期间可以设为否
状态 禁用后所有卡密不可用,脚本收到错误信息

建议:开发期间不要开启包指纹和脚本指纹验证(还没上传文件),把打包的 APK 和 iec 保留好,后期发现被破解或想禁用时再上传开启。

2.2 脚本列表:登记你的 iec 文件

脚本列表相当于给每个编译好的 iec 文件登记一条记录:

字段 说明
软件版本 脚本版本信息,如 1.0
软件包名 安卓专用,填打包的 APK 包名,填写即开启验证,匹配失败脚本无法运行
包指纹 APK 的文件指纹(MD5),填写即验证 APK 文件
脚本指纹 iec 文件指纹(MD5),填写即验证 iec 文件

包名、包指纹、脚本指纹三选一填写即可。上传不会记录文件本身,只计算 MD5 值。不新建脚本列表,网络验证也能正常使用。

2.3 卡密管理:生成与批量运维

卡密管理用来生成网络验证卡,支持一个设备一张卡,也支持多个设备一张卡

字段 说明
生成数量 一次生成多少张卡
卡有效天数 卡密有效天数,第一次绑定设备开始计时,不使用不计时
解绑密码 卡绑定设备后解绑需使用该密码,不设置则无需密码即可解绑
顶号功能 多设备卡开启后,后请求设备自动把最先绑定设备踢下线

还有两个批量运维功能很实用:

  • 批量加时间:给选中卡自动加时长,避免卡过期,客户无需重新绑定卡号
  • 批量加在线量:给选中卡增加可承载的设备量,客户无需重新绑卡。

三、脚本侧接入:ecNetCard 实战(安卓 / iOS 通用)

核心流程四步:初始化 → 绑定 → 校验 → 执行。下面以安卓为例:

function main() {
    // 自定义设备id(可选,EC 安卓 11.21.0+,不超过32字符)
    ecNetCard.setDeviceId("123")

    let appId = "sjfjvkpw"        // 用户中心后台获取
    let appSecret = "ykjscxcs"    // 用户中心后台获取
    let cardNo = "cbwolrftnw"     // 用户购买的卡密

    // 1. 初始化卡密
    let inited = ecNetCard.netCardInit(appId, appSecret)
    logd("inited card => " + JSON.stringify(inited));

    // 2. 绑定卡密
    let bind = ecNetCard.netCardBind(cardNo)
    let bindResult = false;
    if (bind != null && bind != undefined && bind["code"] == 0) {
        logd("卡密绑定成功")
        logd("剩余时间:" + bind['data']['leftDays'] + "天")
        logd("激活时间:" + bind['data']['startTime'])
        logd("过期时间:" + bind['data']['expireTime'])
        bindResult = true;
    } else {
        logd("卡密绑定失败: " + (bind == null ? "无返回值" : bind["msg"]))
    }

    if (!bindResult) {
        return // 绑定失败,终止脚本
    }

    // 3. 获取云端变量(可以是字符串,也可以是JS代码)
    let user_ageJson = ecNetCard.netCardGetCloudVar("user_age")
    logd("云端变量值 => " + user_ageJson['data'])

    // 4. 执行业务逻辑...
    while (true) {
        sleep(1000)
    }
}

main();

iOS 苹果脚本的差别:调用方法完全一致,唯一不同是 netCardInit 多了第三个参数 deviceIdType

// iOS 中控 / iOS 脱机版
// deviceIdType: 1 = 使用设备id,2 = 使用 ecid(iOS 中控 6.29.0+、脱机版 3.9.0+ 支持)
let inited = ecNetCard.netCardInit(appId, appSecret, "2")

注意(iOS 脱机版):如果你是网络在线方式初始化的,deviceIdType 一定要写 1,否则可能无法初始化。

3.1 常用函数一览

函数 作用
netCardInit(appId, appSecret, deviceIdType?) 初始化卡密;安卓无第三参数,iOS 可传 deviceIdType(1=设备id,2=ecid)
netCardBind(cardNo) 绑定卡密,返回 code=0 表示成功,data 里含剩余天数/激活时间/过期时间
netCardGetCloudVar(name) 获取云端变量
netCardUpdateCloudVar(name, value) 更新云端变量(需后台开启“支持远程修改”)
netCardUnbind(cardNo, password) 解绑卡密(也可后台操作)
setDeviceId(deviceId) 自定义设备 ID(安卓 11.21.0+,不超过 32 字符)

卡密自带心跳验证,无需另外调用——绑定成功后,脚本运行期间自动与服务器保持心跳,卡被禁用、过期、设备不匹配都会实时响应。无论是集成版本还是 SDK 版本,调用方法都一样,都是 ecNetCard 开头的模块。

四、云端变量:被破解后的“远程止损开关”

云端变量是这套系统里非常关键的一环:在云端设置一个变量,脚本运行时动态获取。它可以是普通字符串,也可以是一段 JS 代码——脚本获取后在 eval 中执行。

// 获取云端变量
let configJson = ecNetCard.netCardGetCloudVar("auth_config")
// 如果内容是 JS 代码,可以 eval 执行
eval(configJson['data'])

用法价值:

  • 动态开关:在后台改一个变量值,所有已部署脚本立刻改变行为;
  • 远程热修:关键业务逻辑放云端,发现被破解,替换这段代码让脚本停止运行或进入“提示购买”状态;
  • 灰度下发:按需给不同用户下发不同配置。

发现被破解时,及时替换远程代码并停止脚本——这是官方防破解建议里最直接的一招“一键止损”。

五、热更新管理:授权和更新放一起管

网络验证平台自带热更新管理,对接阿里云 OSS 存储:

  1. 配置 OSS:在阿里云 RAM 创建用户拿到 AccessKeyId / AccessKeySecret,授权 AliyunOSSFullAccess,在平台的 OSS 配置管理里填写;bucket 如有权限问题可手动创建并开启公共读;
  2. 上传脚本:新增脚本,上传 iec 文件(版本配置为整数),自动传到 OSS 并生成下载地址和 md5;
  3. 配置热更新地址:在软件列表复制热更新地址,填到脚本的 update.json 里。

更新地址分新旧两版:新地址支持 EC 安卓 9.31.0+、iOS 脱机版 3.17.0+,通信安全加密;老地址为兼容旧版本,通信不加密。需要屏蔽老地址可在软件列表设置“热更新兼容选项为仅新版本”。

六、总结

网络验证卡密系统,本质上是把脚本商业化基础设施化,而且一套方案通吃安卓和苹果

  • 跨平台:安卓 / iOS 中控 / iOS 脱机版三端共用同一平台、同一套 ecNetCard 函数,一套卡密体系;
  • 授权:卡密绑定设备、心跳持续校验,卡的状态服务器实时可控;
  • 容错:心跳/卡密/脚本三重容错阈值,网络抖动不误杀正常用户;
  • 防破解:包名 + APK 指纹 + iec 指纹三重验证,配合代码混淆和云端变量远程止损;
  • 运维:批量加时间、批量加在线量,续期扩量不用重新绑卡;
  • 更新:热更新管理内置,授权和代码分发一个平台搞定。

对于靠脚本吃饭的作者来说,网络验证不是“可选项”——它是把脚本从“作品”变成“商品”的那道门槛。不管你的脚本跑在安卓还是苹果上,装上它,你才真正掌握了自己代码的命运。

想要真实跑起来?

本文介绍的方案均可在 EasyClick 手机自动化平台落地。官网提供完整文档、开发工具与群控云控产品,免费体验。

访问 EasyClick 官网 →