WPS 阿里V3 全流程分析

阿里V3 全流程分析与求解

⚠️ 免责声明 (Disclaimer)

  1. 仅供学习与学术研究:本项目所整理的逆向分析思路、协议还原方案及受控测试代码,仅用于网络安全技术研究、Web 安全防护机制验证及学术交流,严禁将本项目用于任何非法渗透、商业黑灰产或侵犯第三方合法权益的行为。
  2. 合规使用与作者免责:使用者应自觉遵守《中华人民共和国网络安全法》《中华人民共和国数据安全法》等法律法规。若因滥用本项目代码或技术产生任何民事侵权、行政处罚或刑事责任,概与本项目作者无关,作者不承担任何直接或间接法律责任。
  3. 及时整改与权利保护:若相关单位认为文档内容涉及不当披露,请通过 Issue/邮件联系作者,确认后将第一时间评估并采取脱敏或下线处理。

摘要:本文完整记录了针对 WPS 尊享会员活动页面所部署的阿里云验证码 V3(SLIDING 滑块)的全流程逆向分析与求解过程。通过两阶段受控轻量环境执行(Capture 阶段初始化 + Drag 阶段自然滑块拖拽),结合三阶段 Log 流水线遥测并发上报(UploadLog 遥测、Log2 设备指纹、Log3 拟人化行为轨迹),最终实现业务接口 component_action 校验通过率 100%,耗时约 2.1 秒。文章详细梳理了核心请求链路、关键接口字段、字段动静性判别、基准重放测试结论,并深入分析了真实生成入口与底层加密点(HMAC-SHA1 签名、FeiLin 设备指纹、滑块轨迹加密),最终落盘样本 Manifest 至 scratch/vectors.json,为自动化生成一次性合规的 captcha_verify_param 凭证提供了完整可复现的解决方案。

  • 目标平台:aHR0cHM6Ly9wZXJzb25hbC1hY3Qud3BzLmNuL3J1YmlrMg==
  • 防御机制: 阿里云验证码 V3 (SceneId: 1wpbfo15, Prefix: coooqf)
  • 核心成果:
    1. 两阶段受控轻量环境执行(Capture 阶段初始化 + Drag 阶段自然滑块拖拽);
    2. 三阶段 Log 流水线遥测并发上报(UploadLog 遥测 + Log2 132项设备指纹 + Log3 拟人化行为轨迹);
    3. 最终业务接口 (component_action) 校验通过率 100%,耗时仅 ~2.1 秒。

请添加图片描述

请添加图片描述

项目元数据

  • 网站:WPS-V3
  • 产品:阿里云
  • URL:https://personal-act.wps.cn/rubik2/portal/HD2026010517124915/YM2026010517125537
  • 项目类型:captcha
  • 当前 Phase:4;路线:cdp
  • 审批:approved;来源:user_confirm
  • 范围:pendinghttps://personal-act.wps.cn/rubik2/portal/HD2026010517124915/YM2026010517125537
  • 记录生成时间:2026-09-12T08:36:15+08:00
  • 状态上下文指纹:b4e1dffd22a32f52d42be7bd010d3c01b8139f8a775288991d6c81c64d9d98ca

结论摘要

  • 下一步:deliver
  • 报告状态:final
  • 算法结论、请求层结论和限制条件见下方各阶段原文;不得把未验证假设写成事实。

状态摘要

已确认事实

  • "目标页面触发阿里云验证码 V3 (SLIDING 滑块)"

待验证假设

Phase 0:侦察与范围

Phase 0 情报与已知特征 (WPS-V3)

目标与范围

  • 业务场景: WPS 尊享会员活动 - 限时内邀专属礼遇领取/分享 (relatives_friend_card.sharer_share)
  • 活动页面 URL: https://personal-act.wps.cn/rubik2/portal/HD2026010517124915/YM2026010517125537?cs_from=pc_loyalty_center&position=loyalty_card2
  • 业务触发接口: POST https://personal-act.wps.cn/activity-rubik/activity/component_action
  • 风控触发响应: 当请求缺少有效凭证时,接口返回 {"result":"error","msg":"captcha verify","data":null},页面自动唤起阿里云验证码 V3。

产品与风控特征 (阿里云验证码 V3)

  • 产品分类: 阿里云验证码 V3 (Aliyun Captcha V3 - CaptchaType: SLIDING)

  • 专属域名与 Prefix: https://coooqf.captcha-open.aliyuncs.com/ (Prefix: coooqf)

  • SceneId: 1wpbfo15

  • 前端 Loader: https://o.alicdn.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js

  • 设备配置与 Runtime:

    • Action=InitCaptchaV3 返回 DeviceConfig
    • 动态拉取设备指纹脚本 FeiLin/1.5.1/feilin014...js
    • https://cloudauth-device-dualstack.cn-shanghai.aliyuncs.com/ 发送 Action=Log2Action=Log3
  • 业务阶段动态脚本 (dynamicJS):

    • InitCaptchaV3 响应中的 StaticPath 派生(例:3.29.0/sg.083.14c93603795a473a
    • 动态加载 https://g.alicdn.com/captcha-frontend/dynamicJS/3.29.0/sg.xxx.js
  • 最终凭证交付形态:

    • 客户端验证通过后生成 captcha_verify_param 字符串(JSON 格式):

      {
        "sceneId": "1wpbfo15",
        "certifyId": "<CertifyId>",
        "deviceToken": "<DeviceToken>",
        "data": "<EncryptedBehaviorData>"
      }
      
    • 注入 WPS 业务接口的请求体中完成二次校验。

排除项与授权边界

  • 本任务严格遵循安全研究授权框架,针对验证码参数与协议进行受控分析与逆向复现。
  • 不进行越权爬取与高频破坏性请求,专注验证码凭证生成机制还原。

Phase 1:流量与字段定性

Phase 1 流量捕获与字段定性 (WPS-V3)

核心请求链路 (Request Chain)

1. 用户点击活动卡片/权益领取
   -> POST https://personal-act.wps.cn/activity-rubik/activity/component_action
   -> 响应: {"result":"error","msg":"captcha verify","data":null}

2. 客户端唤起阿里云验证码 V3
   -> static bootstrap: AliyunCaptcha.js
   -> POST https://coooqf.captcha-open.aliyuncs.com/ (Action=InitCaptchaV3)
   -> 响应下发: CertifyId, StaticPath (sg.xxx.js), DeviceConfig

3. 设备环境采集与上报
   -> GET FeiLin 脚本 (基于 DeviceConfig 派生)
   -> POST https://cloudauth-device-dualstack.cn-shanghai.aliyuncs.com/ (Action=Log2)
   -> 获得 DeviceToken

4. 业务动态 JS 加载与交互初始化
   -> GET https://g.alicdn.com/captcha-frontend/dynamicJS/3.29.0/sg.xxx.js
   -> POST https://coooqf.captcha-open.aliyuncs.com/ (Action=UploadLog, DYNAMICJS_LOADED)
   -> POST https://coooqf.captcha-open.aliyuncs.com/ (Action=InitCaptchaV3 携带 DeviceToken 刷新题型)
   -> POST https://cloudauth-device-dualstack.cn-shanghai.aliyuncs.com/ (Action=Log3)

5. 滑块行为完成与凭证提交
   -> 滑动滑块生成轨迹加密数据 data
   -> SDK 组装凭证 captcha_verify_param: {"sceneId":"...","certifyId":"...","deviceToken":"...","data":"..."}
   -> POST https://personal-act.wps.cn/activity-rubik/activity/component_action (携带 captcha_verify_param)
   -> 响应: {"result":"ok","msg":"","data":{...}} (放行并返回业务 Token)

关键接口全要素

1. WPS 业务核验接口: POST /activity-rubik/activity/component_action

  • URL: https://personal-act.wps.cn/activity-rubik/activity/component_action

  • Headers:

    • Content-Type: application/json
    • Cookie: 包含 csrf, kso_sid, uid 等用户认证会话 Cookie
    • X-Act-Csrf-Token: 32 位防 CSRF Token
  • Payload:

    {
      "component_uniq_number": {
        "activity_number": "HD2026010517124915",
        "page_number": "YM2026010517125537",
        "component_number": "ZJ2025112512040441",
        "component_node_id": "FN1762741691qhEB",
        "filter_params": {
          "cs_from": "pc_loyalty_center",
          "position": "loyalty_card2"
        }
      },
      "component_type": 46,
      "component_action": "relatives_friend_card.sharer_share",
      "relatives_friend_card": { "share_type": "one" },
      "captcha_verify_param": "{\"sceneId\":\"1wpbfo15\",\"certifyId\":\"...\",\"deviceToken\":\"...\",\"data\":\"...\"}"
    }
    

2. 阿里验证码初始化接口: POST https://coooqf.captcha-open.aliyuncs.com/

  • Method: POST (Form URL-encoded)

  • 核心字段:

    • Action: InitCaptchaV3
    • SceneId: 1wpbfo15
    • Language: cn
    • Mode: popup
    • AccessKeyId: LTAI5tSEBwYMwVKAQGpxmvTd
    • DeviceData / DeviceToken: 由设备端采集模块生成的加密密文
    • Timestamp: ISO 8601 UTC 时间(如 2026-09-12T00:23:49Z
    • SignatureNonce: UUID 随机数
    • Signature: HMAC-SHA1 签名
  • 核心响应:

    {
      "CertifyId": "O2CXBN9hlE",
      "Code": "Success",
      "Success": true,
      "StaticPath": "3.29.0/sg.083.14c93603795a473a",
      "CaptchaType": "SLIDING"
    }
    

字段动静性判别表

字段名 归属 属性 逆向策略
activity_number / page_number WPS 业务 静态常量 页面固定配置
X-Act-Csrf-Token / Cookie WPS 业务 会话动态 用户登录态 Cookie 中直接提取
SceneId (1wpbfo15) 阿里 V3 静态常量 阿里控制台场景 ID
Timestamp / SignatureNonce 阿里 V3 动态时钟/随机 Python datetime / uuid4() 生成
Signature 阿里 V3 动态计算 HMAC-SHA1 签名计算
DeviceData / DeviceToken 阿里设备指纹 强动态加密 FeiLin 环境采集生成
StaticPath / sg.xxx.js 阿里 V3 动态下发 每次请求根据服务端下发路径下载并在受控环境执行
captcha_verify_param.data 验证码行为凭证 核心动态密文 核心逆向目标:滑块物理拖拽轨迹与环境加密密文

基准重放测试记录

  • 携带抓包捕获的合法 captcha_verify_param 与 Cookie 重放 component_action
    • 响应:{"result":"ok","msg":"","data":{..."token":"0e86810c741bf8f617374a9489c6e2f0"...}}
    • 结论:服务端二次核验完全依赖 captcha_verify_param 的一次性有效性,一旦消费成功即颁发业务权益 Token,重放二次使用会提示已消费或过期。因此核心任务是自动化生成一次性合规的 captcha_verify_param 凭证

Phase 2:入口定位与样本

Phase 2 调用栈与实证样本 (WPS-V3)

真实生成入口 (Call Stack & Entry Point)

1. 业务端验证码唤起与回调注入

  • 业务发包出口: POST https://personal-act.wps.cn/activity-rubik/activity/component_action

  • 触发逻辑:

    • 当业务返回 {"result":"error","msg":"captcha verify"} 时,WPS 前端组件调用:

      initAliyunCaptcha({
        SceneId: '1wpbfo15',
        prefix: 'coooqf',
        mode: 'popup',
        element: '#captcha-element',
        button: '#btn',
        captchaVerifyCallback: function(captchaVerifyParam) {
          // 将 captchaVerifyParam 注入 component_action 请求体中重新发包
          return submitComponentActionWithCaptcha(captchaVerifyParam);
        }
      });
      
  • 凭证生成出口:

    • captchaVerifyCallback 回调函数的入参 captchaVerifyParam
    • 格式为字符串化 JSON:{"sceneId":"1wpbfo15","certifyId":"...","deviceToken":"...","data":"..."}

2. 阿里云底层核心加密点

  1. API 请求签名 (HMAC-SHA1):
    • 计算规范化 Query/Form 参数的 HMAC-SHA1 签名
    • 签名字符串结构:POST&%2F&<SortedUrlEncodedParams>
  2. 设备指纹加密 (FeiLin):
    • 采集浏览器环境、Canvas/WebGL、插件、窗口尺寸,生成密文作为 DeviceData / DeviceToken
  3. 滑块行为轨迹加密 (dynamicJS/sg.xxx.js):
    • 监听 pointerdown/mousedownmousemovemouseup 等事件
    • 采集物理拖拽点数、时间戳序列、速度与加速度微扰动,打包并经动态混淆算法加密输出为 data 密文

样本 Manifest (已落盘至 scratch/vectors.json)

样本名称 接口 关键输入要素 预期输出/响应
sample_1_trigger_challenge /activity/component_action captcha_verify_param 的原始业务操作 {"result":"error","msg":"captcha verify"}
sample_2_init_captcha_v3 coooqf.captcha-open.aliyuncs.com Action=InitCaptchaV3, SceneId=1wpbfo15 下发 CertifyId, StaticPath(sg.xxx.js), DeviceConfig
sample_3_release_business_token /activity/component_action 携带有效 captcha_verify_param 的完整请求体 {"result":"ok","msg":"","data":{...}} (发放业务 Token)

编码与算法观察

  • 动态分发策略 (dynamic_delivery=per_request):
    • 阿里 V3 服务端按 attempt 动态下发不同的 sg.xxx.js(例如本次抓包中先后下发了 sg.093.544562c1d80f9426.jssg.096.e4bfbb8491cf992c.jssg.083.14c93603795a473a.js)。
    • 因此不可采用死扣静态 JS 的硬编码方案,必须采用受控两阶段 Node.js 运行时:实时拉取下发的动态 JS,在注入真实 DOM/BOM 语义与 56 步拟人轨迹的环境中执行,生成合规凭证。

运行结果

自测成功率100%,耗时一次大概2~3 秒
请添加图片描述

📬 商务合作与技术交流

说明:有需求、有预算的合作方欢迎随时沟通;加好友请备注来意(如:逆向定制 / 商务合作 / 技术交流)。

WeChat    QQ

  • 💬 微信 (WeChat)time20250923
  • 🐧 QQ1511225190
posted @ 2026-09-13 10:24  飞小飞  阅读(1)  评论(0)    收藏  举报