JS逆向之 Kasada 逆向实战 📅 2026/6/25 16:05:51 Page 1 · Kasada 逆向实战介绍本系列基于 RuyiTrace真实 Firefox domtrace 内核补环境以 Sephora 站点为样本复刻 Kasada(kpsdk) 防护的完整逆向流程。素材来自参考资料 我们ruyitrace/的实测。1. Kasada 是什么Kasada客户端 SDK 命名空间kpsdk是一套面向 Bot 的反自动化防护属于客户端挑战 服务端校验模型和本站同时挂的 Akamai BMP 是同类见 Page 3但有自己的特征客户端脚本通常叫p.js路径带两段随机 UUID 前缀每站固定、跨站随机https://www.sephora.com/uuid1/uuid2/p.js自定义栈式 VM 解释器承载核心逻辑不是 WASM。p.js 内打包一大段字符串常量用一个三参解码器解出整数操作码流由 84 个 opcode handler 解释执行。通过一组x-kpsdk-*请求/响应头与边缘交互并把 token 镜像进 cookie。2. 核心字段速览字段性质谁生成x-kpsdk-ctclient token服务器签发边缘 429 时下发镜像到ak_bmsc-kp*cookiex-kpsdk-cdchallenge data / proof浏览器运行时动态生成的 JSONid/answers/st/rst/d/duration/workTimex-kpsdk-h二进制 proof / hash浏览器生成x-kpsdk-vSDK 版本如j-1.2.470x-kpsdk-r / -c / -fc挑战中间态深层异步 iframe 逻辑产出记住一句话ct 是服务端发的cd/h 是浏览器算的。这决定了后面所有路线的可行性。3. 为什么 Kasada 难per-instance 随机化的 VM函数名、隐藏属性名每次运行都变实测同一 PC 位置属性名 v1bzqklqxveykfevtalwvnbtdtcocr、v3cwwtzspiqzeddfgsnjqcoowwlsdp静态还原无法预生成。挑战在 iframe 异步跑核心求解逻辑在uuid1/uuid2/fp?x-kpsdk-v...这个 iframe 里有 Promise 链 双超时轨5000ms / 20000ms iframe 重建re-interrogation。服务端校验绑定会话只重放 cookie/ct 而无新鲜完整 proof边缘必返回新的 429 新 ct。与 Akamai 叠加Sephora 同时挂了 Akamai_abck/bm_*/ak_*两套风控字段交织见 Page 3。4. 三条路线与结论路线做法结论纯算法静态还原 p.js VM离线算出所有字段不可行ct 服务端签发、cd 依赖运行时态见 Page 6手写补环境盲补Node jsdom 硬补几十个 API 假数据 stub 外发老路补不全、外发请求全失败见 Page 5 路线 A真实内核补环境RuyiTrace 真实 Firefox 跑完挑战 实时抓包可行生产首选本系列主线纯 JS 补环境诊断驱动Node vm 按需补有限 API curl_cffi 真实网络桥异步可行最终也打穿见 Page 8「手写补环境不可行」要说精确盲目硬补一切 API 的老路不可行但诊断驱动地按需补 真实网络桥 不阻塞事件循环纯 JS 也能跑通整条链、产出真实 cdPage 8 实测闭环。5. RuyiTrace 为什么是正解真实 Firefox 引擎天然具备 Node/jsdom 补不全的一切真实 DOM/iframe、真实 WebCrypto、真实定时器/Worker、真实指纹、真实网络栈能收Set-Cookie。domtrace 在C 网络层无痕抓x-kpsdk-*头和 cookie含 HttpOnly对页面 JS 完全不可见不触发反检测。实测一轮即捕获到完整挑战链p.js →/fp429 →/login429 → ct ak_bmsc-kp*且ct ak_bmsc-kp逐字节相等与 provenance 文档结论一致。6. 本系列地图Page 2自动抓包流程分析用 RuyiTrace 怎么把整条链抓下来Page 3Kasada 与 Akamai 联合风控两套字段如何交织Page 4某请求 cookie 字段分析83 个目标 cookie 的来源分类Page 5补环境本地拼接 cookie真实内核补环境 vs Node 手写补环境Page 6纯算法生成 cookie 的边界能算到哪、为什么算不全Page 7Kasada token 保活持续生成与全系列总结为什么必须持续刷新、保活工程姿态Page 8纯 JS 补环境打穿最后一环异步桥产出真实x-kpsdk-cd系列收尾与反转