关于 spider-king
Spider King 是用于还原 Web 协议并构建有限范围采集器的技能,面向调查 HTTP 行为、客户端签名或解码的从业者。它强调以证据驱动调查,并使用无浏览器的 Python 重放或采集;原生应用和小程序不在范围内。
主要功能
- 01以证据驱动协议调查
- 02分析 HTTP 请求与状态
- 03针对性签名和解码辅助程序
- 04无浏览器的 Python 重放与采集器
- 05证据及代码交付门槛
适用场景
- 01分析提供的 HAR 或请求数据
- 02还原 Web 端点的请求流程
- 03重建固定轨迹的签名器或解码器
- 04打包有限范围的 Python 采集器
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aoyunyang/ spider-king-skill --skill spider-king安装后在 Claude Code 中输入/spider-king确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEREADME.mdagents/openai.yamlreferences/anti-debug-playbook.mdasync-export-job-playbook.mdanti-bot-class-playbook.mdcase-reuse-playbook.mdchallenge-artifact-harvest-playbook.mdchallenge-state-envelope-playbook.mdanti-patterns-playbook.mdcrypto-patterns.mddevice-trust-sidecar-playbook.mddelivery-gate-playbook.mddecoy-and-real-request-playbook.mddual-writer-param-playbook.mdenvironment-patch-playbook.mddoctrine-index.mdembedded-browser-runtime-playbook.mdcookie-provenance-playbook.mdenv-diff-playbook.mdevidence-corroboration-gate.mdexperience-card-schema.mdreferences/examples/douyin-bdms-pure/algorithm-notes.mdreferences/examples/douyin-bdms-pure/fixtures/primitives-vectors.jsonreferences/examples/douyin-bdms-pure/scripts/verify_primitives.pypure_abogus_template.pyreferences/experience-cards/signer-egress-stub-must-match-callsite.jsonserver-clock-must-enter-observed-writer.jsonstandard-primitive-concat-before-custom-port.jsonreferences/experience-fixtures/page-local-exception-matrix.json详细介绍
Spider King
使命
将对抗性 Web 客户端转变为稳定的协议采集器。
这是一项纯 Web 协议还原技能,不是浏览器自动化技能,也不是 APK/小程序逆向技能。只能使用浏览器工具收集 Web 证据。交付原始 HTTP,以及范围有限的本地签名、引导、解码或传输辅助工具。如果主要目标是 APK、原生应用或小程序,应说明不在范围内,而不是凭空设计一个 Web 双浏览器初步方案。
不可妥协的原则
- 在全新任务中选择任何工具之前,先运行本文件中的 Auto Judge Card 和
references/mcp-routing-playbook.md:判断任务受理方式、是否需要浏览器、要使用哪个基准宿主,以及要使用哪些调试器跟踪手段(js-reverse和/或silent-value-capture)。不要先打开工具,再事后找理由。 - 每个全新的网页目标若被归类为
live-target,在声称已了解页面/运行时之前,都必须依次取得两个角色的证据:先fingerprint-baseline,再debugger-trace。唯一范围更窄的说法是references/startup-triage-playbook.md中的transport-only direct-endpoint exception:它可以在严格的负向对照和业务判定依据门槛通过后,接受针对某个确切端点的采集器,但不得声称已了解页面/运行时。 - 默认手段是先用
chrome-devtools建立基准,再用js-reverse进行调试器跟踪。如果已经需要处理 DP/发起方,js-reverse可以在同一宿主上承担两个角色;不要再启动第二个 Chrome。记录使用的是launch还是attach,绝不可把launch假称为attach。只有证实存在指纹压力或干净基准失败时,才将基准宿主升级为 Camoufox 或其他托管配置;普通低风险任务不得默认使用 Camoufox,也不得仅因 CDP 的navigator.webdriver为 true 而使用 Camoufox。 - 调试器跟踪须由以下证据满足:来自
js-reverse且相互关联的发起方/变更证明、references/silent-value-capture-playbook.md中相互关联的silent-value-capture卡片,或两者兼有。若可以attach,优先使用js-reverse。 - 如果缺少
attach,记录debugger_attach_gap;若有后端,则通过silent-value-capture继续调试器跟踪,不要放弃该角色。如果所需的静默后端也不可用,则记录silent_value_capture_gap,并继续离线处理或降低交付形式。 silent-value-capture绝不能替代基准,也绝不能承担compact-replay或collector交付。APK、原生应用和小程序的主要任务仍不在范围内,不得为了走形式而编造成对的浏览器证明。如果任何必需角色都无法通过现有手段满足,必须先报告阻碍,再声称已了解该实时目标。- 浏览器和引擎采集证据必须按目标串行收集:最多只能有一个浏览器或引擎采集系列处于
TARGET_ACTIVE状态,且并行工具批次中绝不能有两个目标所有者。遵循references/tool-playbook.md中的交接门槛;授予静默值引擎采集权限之前,先暂停或保留基准;对于无法重放的独特状态,使用RETAINED_EXCEPTION保留,而不是为了清理而将其销毁。 - 对于
compact-replay和collector,必须交付不依赖浏览器的 Python 运行路径。最终重放路径或回退方案绝不可使用浏览器自动化、Playwright、Selenium、CDP 页面驱动、页面上下文 fetch、浏览器配置、手动浏览器状态、silent-value-capture后端或引擎检测。 - HTTP、编排、解析、重试、持久化和输出优先使用纯 Python。只有在验证后的 Python 移植风险更高时,才将 JS/WASM 保留为微型本地辅助程序;本地引导程序可以模拟宿主语义,但在线 HTTP 由 Python 负责,报告必须如实说明不依赖浏览器/运行时。重放身份必须与已安装的 curl impersonate Chrome 主版本锁定;不要将较新的在线 Chrome 主版本复制到较低版本的 impersonate 上,也不要仅因版本漂移而重启风险控制逆向工作。
- 在处理分页、并发、提交或运行时精简之前,先恢复一个稳定的业务请求。对于未知的风控逆向,先检查被拒请求;未证明有效的额外路由每轮最多尝试一个,而且只有在省略该路由会改变判定结果时才可尝试。
- 当本地 JS/WASM/SDK 辅助程序在一个类浏览器工作流中被反复调用时,应将进程/VM/上下文身份及隐藏的可变状态视为动态因素;在精简或扩展辅助程序之前,先证明持久世界与全新世界的行为差异;不得将会自行失效的实例重复用作分页器。
- 每项结论都必须有其声明的交付形式所要求的证据支撑。只有在声称当前在线接受时,才要求重复进行在线重放。敏感原始值仅保留在本地;聊天、报告和版本控制中须对凭据、令牌、个人数据和 Cookie 值进行脱敏。
- 在证明轮换状态的写入方、槽位、作用范围、有效期和刷新路径之前,绝不可将其硬编码;对于依赖繁重引导的流程,在证明可跨会话复用之前,须保留同一条会话链。
- 只有声明的交付形式通过其专属能力门槛,或已证实存在真实外部阻碍时,才能停止。不得将
evidence或local-proof标记为采集器,也不得将不完整自动化伪装成临时采集器。 compact-replay和collector交付须包含可通过 PyCharm 右键运行的 Python 入口点,通常为项目根目录下的main.py或collector/main.py,且不得要求提供终端参数。除非所请求的产物是可执行代码,否则evidence和local-proof无须提供入口点。- 只路由到当前工具注册表/架构中已确认的 MCP 系列;磁盘上的源代码树不代表工具可用。被动线缆存储可以与
TARGET_ACTIVE并存,但不能替代首次在线证据;compact-replay/collector必须始终不依赖浏览器运行时、页面驱动、浏览器配置、采集后端和引擎检测。 - 在固化某个 gate 家族标签、扩大运行时范围,或将工作交给已安装的专用工具前,先通过
references/evidence-corroboration-gate.md。单个状态码、Cookie 名称、令牌名称、旧备注或看似合理的辅助工具输出,都只能算作假设。 - 在可信正样本通过而本地路径失败时,完成样本清理后,使用
references/positive-sample-ablation-playbook.md。使用references/failure-surface-taxonomy.md为尚未解决的在线故障命名,而不是暗示采集器已完成。遇到卡点时,从该文件中选择一项 Stuck 后续操作;不要批量添加未经验证的额外路由。
对于故障形态的反例,请阅读 references/anti-patterns-playbook.md。打包结果前,只应用相匹配的能力门控,参见 references/delivery-gate-playbook.md。分级降级:导入错误/NameError 是我们自身的错误(在 stderr 上发出警报);外部超时则回退。将关键响应输出到 stderr;stdout 保持为机器可读的 JSON。
轻量级调度
在内部使用这些标签,让第一步保持精简。正常回复用户时,不要强行套用僵化的机器格式标题。
| 形态 | 交付物 |
|---|---|
evidence | 真实请求、发起方、状态来源、修改点或明确的阻碍 |
local-proof | 固定向量、解码后的样本、恢复的源码,或无需实时出站流量即可调用的辅助工具 |
compact-replay | 一次有界的右键可运行重放,用于已证实的请求 |
collector | 可重复、无需浏览器的 Python 采集器,并带有边界限制 |
默认选择能满足用户需求的最小形态。用户提供的 HAR、数据包捕获、请求文本、JS/WASM、Cookie/令牌样本、固定向量或现有项目产物,应从 evidence 或 local-proof 开始;不要仅为满足实时目标的形式要求而打开浏览器。evidence 和 local-proof 不得自动启动双角色浏览器流程。单独的 URL 本身并不授权浏览器导航、实时重放、写入、使用账户/会话、安装依赖或大范围采集。
路由名称描述的是当前能力归属方,而非门控所属家族:evidence-reuse、chromium-recon、browser-hook、static-ast、env-patch、iv8-local-runtime、verifier、transport、pure-python-rebuild 或 python-collector。沿一条路由执行,直至获得证据或明确命名的阻碍。如果两条路由看起来都可行,优先选择更精简的离线路由,并记录哪些证据足以支持升级。
在任何路由写入文件、发送实时出站流量、执行目标提供的代码、使用账户/会话状态、安装依赖或更改运行时状态之前,请应用 references/provider-work-order.md 中的精简契约。
快速路线与归属
目标已经明确时,请使用专门路线。对于这些情况,不要重新启动针对未知目标的完整发现流程。
| 当前目标 | 路线 |
|---|---|
| 在已知边界处粘贴即用的浏览器观测 Hook | references/profiles/browser-hook-snippets/index.md |
| 对给定 JS 文件进行结构化 Babel AST 还原 | references/profiles/static-ast/index.md |
| 在 Node/VM 中使用已知入口、调用和固定浏览器输出 | references/profiles/env-patch/index.md |
| JSVMP/SDK 已加载,但 XHR 或 fetch 签名保持静默或依赖路径 | references/profiles/env-patch/references/jsvmp-interceptor-contract.md;使用正向和负向路径对照证明已激活;如果 CDP navigator.webdriver 为 true,请在 Camoufox 之前于 initScript 中删除可配置的原型属性;没有列表 XHR 的 HTML 零值不是数据 |
| 固定轨迹的纯 Python 签名器/解码器重建或回归测试 | references/pure-python-rebuild-playbook.md |
| 未知或多层端到端采集器 | 继续执行下方的启动门禁 + 通用逆向循环 |
| 仅定位入口/调用链 | 有专用逆向技能时使用该技能;否则使用 chrome-devtools / js-reverse 发起方证据 |
| 明确要求 Python + iv8 运行时 | 有 iv8 技能时使用;若不可用,报告未满足的约束,且仅在用户接受此替代方案后使用 env-patch/本地辅助工具 |
| 窄范围已安装的专家工具与经佐证的阻塞因素匹配 | 仅当能力快照列出该专家工具且双界面佐证通过时才移交;Spider 仍是次要运行时辅助工具。如果没有安装专家工具,请继续使用通用循环——不要臆造系列捷径 |
| 已有 HAR、Reqable 历史记录或请求文本,需要解释或起草重放内容 | evidence-reuse;打开浏览器前先阅读 references/mcp-routing-playbook.md |
| 在收集证据前需要指纹或托管配置文件 | 自动判定指纹压力高 -> Camoufox/托管主机基线,然后在调试端点可用时附加/移交至 js-reverse |
| HAR/请求/JS/cookie 样本充足,且不需要新的实时证明 | artifact-only / evidence-reuse;不要为了走流程而打开 Camoufox、Chrome 或 js-reverse |
专用配置文件规则:
- 仅当工作属于
artifact-only或已证明的已知边界工作时,browser-hook、static-ast 和 env-patch 才可跳过未知目标流程;变更必须可逆,日志必须妥善保护秘密;纯结构 AST 检测可从给定源代码开始,但要提出行为方面的结论,仍需固定样本。如果需要新的交互,将其归类为live-target并要求提供按顺序排列的角色证据;缺少引导、会话、传输、解码或分页状态时,须退出该配置文件并进入通用逆向循环。 - 进程产物应存放在正在执行的项目的
js_reverse_cache/tasks/<task-id>/下(task.json、network.jsonl、runtime-evidence.jsonl、使用时的silent_value/、handoff.json、fixtures/、report.md)。交付证明仍保存在analysis/proof_manifest.json和相关分析文件中。切勿将任务秘密写入此技能目录。首次保存或晋级之前,请应用references/project-artifact-contract.md。
自动路由卡
选择工具前先使用此卡。它不会放宽任何交付门禁。完整的信号表和主机升级规则见 references/mcp-routing-playbook.md 和 references/startup-triage-playbook.md。
自动判定卡(信号驱动)
按以下顺序判断,并在首次执行目标操作前记录分支:
- 输入评估:离线样本充足且无需实时验收 ->
artifact-only;只有裸 URL,或需要新鲜的页面/会话证明 -> 网页live-target;目标/环境/目标相同 ->continuation;APK/应用/小程序为主要目标 -> 超出范围。 - 是否需要浏览器/引擎?:纯离线解释/还原/固定向量工作 -> 不需要浏览器;需要当前请求/页面/线路证明 -> 基线主机;需要已知边界值或发起方工作 ->
debugger-trace,即基线交接之后(js-reverse和/或silent-value-capture)。 - 基线主机:普通低风险侦察默认使用
chrome-devtools。如果已经需要 DP/发起方工作,则由js-reverse负责基线,并在同一主机上进行debugger-trace;不要启动第二个 Chrome。只有在指纹压力或基线干净度失败时,才升级到 Camoufox/托管主机;普通低风险工作绝不默认使用 Camoufox。 debugger-trace的含义:候选业务请求出现后,在不放弃该角色的前提下选择手段:- 有可用的附加方式 -> 默认在顺序交接后,于当前主机上使用
js-reverse;记录launch模式,不要将其伪装成附加模式 - 升级触发条件(会毒化观察结果的钩子、系统性漏检、需要固定输入向量、缺少 JSVM 公共边界值、页面自检不信任页面世界)-> 立即启用
silent-value-capture;不要先扩大页面世界钩子范围 - 缺少附加方式 -> 记录
debugger_attach_gap;如果有可用的静默值后端,则通过silent-value-capture继续debugger-trace;否则继续离线工作 - 需要时却没有静默后端 -> 记录
silent_value_capture_gap,并继续离线工作或降低交付形式;只有在references/startup-triage-playbook.md中的每项入口条件都已独立证明时,精确的直接端点才可使用仅传输例外
- 有可用的附加方式 -> 默认在顺序交接后,于当前主机上使用
- 满足以下任一条件时,
debugger-trace角色即完成:通过js-reverse获得相关的发起方/变更证明;获得一张或多张相关的fixed_input_ready静默值卡片;或两者都获得。优先选择公共边界 I/O,而非操作码/全程序跟踪;protobufserializeBinary和 wasmencode(i32,i32)也符合要求。绝不要将捕获后端放入compact-replay或collector。 - 尽早停止浏览器/引擎:证明真实请求、变更点和重建路径后,退出浏览器 MCP 和任何静默值后端,然后使用纯 Python 完成工作。
默认实时流程
capability snapshot (browser mode launch|attach|unavailable, curl impersonate max chrome, silent_backend)
-> Auto Judge
-> fingerprint-baseline (chrome-devtools default; js-reverse may own both roles when DP is already required; Camoufox/managed host only on pressure)
-> sequential handoff (park/retain baseline)
-> debugger-trace means (branch, not a linear tail):
attach? yes -> js-reverse first
+ silent-value-capture on upgrade triggers
attach? no -> debugger_attach_gap
+ silent-value-capture if backend available
else offline continue
-> offline rebuild + delivery gate
启动门槛
在深入分析前完成并报告此门槛。扩展清单见 references/startup-triage-playbook.md。
0. 输入模式
使用工具前声明一种模式:
live-target:当前网页/端点需要新鲜的浏览器和线路证据;按角色顺序依次使用artifact-only:只有已保存的请求/源码/令牌/样本;标记实时验收尚未得到证明continuation:目标/环境/目标相同;复用当前门槛,仅重新检查发生变化的部分
1. 环境和工具
记录已安装的 MCP 工具系列、浏览器模式(launch|attach|unavailable)、已知调试端点、scripts/check_reverse_env.py 检测到的 curl impersonate 最高 Chrome 版本、可选静默值后端的可用性(silent_backend=available|absent),以及可选的被动线路存储。仅路由到已确认的工具。缺少可选工具系列或后端属于缺口,不是走流程。若 silent_backend=absent,不要探测捕获后端;在附加/js-reverse 存在缺口后,继续离线工作或降低交付形式。
2. 工具系列分流
根据当前证据标记最小的主导门槛类别(signer-gated、transport-gated、verifier-gated、decode-gated、session-gated),然后只打开对应路径。
3. 交付意图
声明预定形式(evidence、local-proof、compact-replay、collector),并在该门槛处停止。不要把不完整的自动化包装成临时采集器。
最简信息收集
用户提供目标页面或 API URL、网站和采集目标、捕获的请求、JS 或 WASM 示例、Cookie 或令牌示例,或数据包捕获后,立即开始。在判断是否需要浏览器证据之前,先选择信息收集模式。
只询问会影响实现的缺失信息:目标字段、采集范围、输出格式、是否需要登录,以及是否需要去重、续传或增量同步。
对于只读证据或本地证明请求,只询问缺失的示例、向量、触发操作或源路径。只有在下一步将要写入、执行目标代码或联系目标时,才询问项目根目录、保留期限、实时重放和请求预算。
在实现 compact-replay 或 collector 之前,如果仍有多种可行的实现形式,或下一步将扩大当前已确定的运行时、依赖项、可写范围或实时授权边界,请使用 references/provider-work-order.md 中的条件式实现简报。不要将该简报变成 evidence、local-proof 或用户已选定实现方案时的强制审批流程。
通用逆向循环
使用 references/workflow-overview.md 作为简明执行路线图,使用 references/tool-playbook.md 选择工具。以下阶段编号是唯一的阶段编号体系;多阶段稳定检查和阶段字段集合是贯穿各阶段的检查清单,映射关系见该文件。
阶段 0:指纹识别
- 如果存在观察者效应的可能,在启用广泛 Hook 之前先采集干净的基线;区分诱饵与真实端点、传输层与应用层门禁、可见参数与包装器重写、引导流程与数据 API、单个请求与有状态的请求记录、HTML 占位零值与列表 XHR 数据、无关的 HTTP 同级接口与 WebSocket 或文本通道、chrome-devtools HTTP 日志与 WebSocket 帧,以及非 JSON WebSocket 前缀帧与业务 JSON。
- 尽早识别纯 JSON、GraphQL、WebSocket、protobuf、二进制封装、加密响应、字形映射、HTML 中的 CSS 精灵图或偏移字形、JSVMP,或与宿主绑定的运行时。优先使用 protobuf
serializeBinary/ wasmencode,而非操作码;二进制数据应捕获为十六进制,而非 UTF-8 转储。 - 选择最小的下一项验证,而不是最大的捆绑包转储。
阶段 1:验证真实请求
- 跟踪重定向和包装器/兼容页面,分别映射入口、引导、列表、详情、提交、验证器、预热、遥测、下载、风控以及异步导出/报告路由。
- 捕获准确的 URL、方法、查询参数、请求体字节、标头、出站 Cookie 标头、响应形态和发起方。
- 将分页切换点和受挑战文档的重放视为协议约定的一部分。
- 如果相同的直接端点和业务输入仅因客户端传输方式而产生差异,请在此处、签名器或环境工作之前,运行
references/transport-pre-gate-playbook.md中的相同输入矩阵和负向对照。如果符合references/startup-triage-playbook.md中transport-only direct-endpoint exception的所有条件,则仅针对该端点限定验收范围,并明确说明浏览器角色方面的缺口。
在真实业务路径上交付一个已确认的请求。
阶段 2:隔离变化状态
在认定变更模型已明确之前,先回答 references/minimal-verifiable-facts-playbook.md 中的六个静态分析问题。
对每个变化部分进行分类:时间戳、随机数、签名查询参数或请求体、轮换的标头或 Cookie、包装字段、操作名称、游标、引导产物、解码密钥、字形映射、会话密钥、配置基线、稀疏增量、计数器、心跳、对经过时间的依赖、媒体密钥、页面例外、账户状态或主机语义。
当同一个本地运行时服务于多个请求或步骤时,还要对辅助程序的生命周期、VM/上下文身份、模块实例、闭包、缓存、队列、惰性初始化和调用顺序标记进行分类;显式重放计数器/Cookie 并不能证明状态连续性。
如果涉及导出接口或签名开放平台风格的 API,还要在设计重新生成机制之前,将字段分为业务字段、静态应用字段、服务端签发字段和每请求动态字段。另行标注来源类别(fixed / plaintext / local-algorithm / server-issued / risk-interactive)和归属类别(python-owned / host-owned / server-owned);绝不要把来源等同于归属。
证明 Cookie 的来源,并区分服务端签发的产物与本地生成的填充内容。只有在网络行为证实之后,才将关于会话参与的页面文本视为假设。如果登录只是第一道门,则在导出之前,通过最终身份重新读取来验证租户、角色和数据范围;参见 references/multi-context-session-playbook.md。当存储的 Cookie jar 状态与权威的出站 Cookie 标头不一致时,将二者分开处理。当业务重放与浏览器成功数据包不匹配时,先使用 references/session-contract-playbook.md 还原请求契约,再深入研究签名逻辑。
阶段 3:定位规范的变更点
按以下顺序追踪:
- 传输包装器、拦截器、
beforeSend、fetch、Ajax、XHR、worker 或消息边界;冻结网络数据:空的beforeSendIIFE 并不是签名器 - 引导脚本和内联载荷
- 暴露的辅助程序和返回的子对象
- WASM 导出或内部序列化器、打包器、签名器或解码器原语
- 服务端返回的质询和响应端刷新字段
- 帧序列化器、protobuf 解析器、握手记录和密钥调度
规范的变更点是网络数据形态的载荷实际发生变化的位置,而不是业务代码创建占位符的位置。
当存在具名摘要或具名的 AES/GCM/WASM 导出时,应使用固定输入进行验证,并在信任标准库之前固定帧、打包密钥布局和内部字段伪随机数生成器。优先检查由环境选择的摘要常量和浏览器分支,而不是 UI 或函数名称;转至 references/crypto-patterns.md。当 ALU 跟踪显示 0x9E3779B9,或 VM 将 4 字符打包为小端字节块时,也转至同一文件。
阶段 4:离线重建
- 多层面验证器在出现类似令牌的内容后拒绝请求:先消融形态/状态链,填充日卡并关闭 K1-K8 开关;将与黄金样本的相似度视为虚假进展(
references/verifier-morph-and-state-chain-playbook.md)。 - 已有同系列的已解决骨架:先迁移主机/路径/状态链(
references/case-reuse-playbook.md);不要重新开启行为墙主线。 - 每次只攀升一级:固定输入一致性、窄范围边界观测、纯本地复现、窄范围主机引导,然后是有证据支持的主机表面修补。当阶段数与浏览器路径不同时,在重写算法前遵循
references/workflow-overview.md中的多阶段收敛规则。在每一级内,只修补references/reproducible-evidence-playbook.md中的first_divergence最小单元,并在继续时重新验证证据是否仍然有效。 - 对于重复的辅助函数调用,在添加浏览器 API 前,先运行
references/runtime-state-continuity-playbook.md中的最小连续性矩阵:一个持久环境、一个全新环境,以及一个显式状态消融测试,并尽可能保持其他输入不变。 - 升级前,记录最后一个已证实的产物、确切的盲点、为何下一级是最小步骤,以及如何保持交付不依赖浏览器。
- 在扩大运行时、修补范围或传输配置前,阅读
references/escalation-ladder-playbook.md。 - 当传输证据表明,最接近的受维护后端无法表达已纳入范围的浏览器配置时,在构建路由专用的原生适配器前,阅读
references/native-transport-profile-playbook.md。 - 当不透明的分阶段产物仍依赖捕获的运行时输入时,阅读
references/opaque-runtime-profile-playbook.md;保留一次原子运行,逐阶段移植,并区分算法生成、快照驱动生成或池回放。非确定性输入源(Math.random/Date.now/ canvas / audio)与会话绑定;绝不要用新会话脚本处理旧输入源。 - 保留精确的序列化方式、字段槽位、封装、JSONP 回调、分隔符、压缩、加密及解码顺序。
- 将 JS 摘要算法移植到 Python 时,先在冻结的前像上验证 uint32 截断、
ROTL边界情况以及逐字节打包掩码,再进行实时回放。 - 对于字符串表密集型捆绑包,先使用非执行型
references/profiles/static-ast/index.md检测器和保守重写,然后通过两遍重写离线还原解码器,再深入美化代码;参见references/obfuscation-guide.md和references/offline-inline-deob-playbook.md。 - 如果页面、关键词、正文、referer、时间戳或会话状态可能改变请求形态的产物,则在请求循环内重新生成这些产物。
- 如果持久环境与全新环境的行为不同,则针对已证实的序列保留窄范围的本地辅助函数,并记录初始化、生命周期、重置、超时、清理和运行时版本;如果持久环境在首次加密后自行失效,则隔离或移植该加密步骤,而不是继续使用已失效的实例发送请求;不要把每次调用都启动子进程视为中性的实现细节。
阶段 5:验证可重复性并扩展规模
references/workflow-overview.md 将此阶段归纳为 阶段 5:交付(验证可重复性 + 交付打包)。阶段编号相同;并非第二套系统。
- 使用固定输入或固定负载向量验证辅助工具和解码器。
- 在扩展规模或缩减运行时之前,先在一条会话链上验证一次全新的单页重放。
- 至少重复进行两到三次实时重放(声明硬门槛指标稳定时,验证器门槛为 10-20 次);辅助工具加载成功或外形类似铸造令牌的令牌都不能作为验收依据。
- 对带有指纹/设备配套组件的验证器门控流程,请阅读
references/device-trust-sidecar-playbook.md并标明交付级别 L0-L3;本地 SDK 运行时修补请参阅references/local-sdk-env-patch-playbook.md。 - 对验证器门控流程,请在一个完整轮次中验证必需的配套组件、同一环境中的共享状态、单一协议配置、实际请求时机、最终验证器语义,以及首个下游使用方。严格遵循上述顺序;在扩展重试之前,记录消融矩阵和本地错误语义映射。
- 对验证器门控流程,验证正样本的质量:干净的成功样本优先于受污染的自动化失败样本。环境风险(出口 IP、自动化标记、连续失败)是独立于轨迹质量的失败面;若本地重放与干净成功样本不一致,请参照
references/failure-surface-taxonomy.md分类,并使用references/positive-sample-ablation-playbook.md隔离各层。 - 验证下一页或游标、路由切换、刷新行为、字段完整性以及相关权限边界。
- 对异步导出,使用创建前的任务 ID 快照和条件匹配来验证创建,隔离轮询中的任务,并在下载列少于请求字段时阻止持久化;请参阅
references/async-export-job-playbook.md。 - 尽早保存原始样本;响应形态意外时明确报错。
实施约定
- 按职责拆分客户端、设置、引导、标头和 Cookie、签名、信封、解码、提取、重试、存储和测试。
- 编写代码前绑定一个任务项目,并将动态证据保存在
js_reverse_cache/tasks/<task-id>/下;不要将操作系统临时目录、桌面投放文件夹、技能目录或隐藏浏览器配置文件用作主要存储位置。 - 将稳定的脚手架与易变的捕获数据和生成的运行时数据块分开。
- 分别编目服务器签发状态和本地计算状态。
- 在确认可以复用之前,让需要大量引导的获取和重放保持在同一会话链上。
- 在 UA/Client-Hints、Cookie/存储、指纹表面和传输/出口方面保持一个纯基线;参见
references/env-diff-playbook.md。区分 Chrome 页面世界复刻与本地 DOM 宿主。按 L0-L4 对宿主保真度评分(原生计数 / 序列 LCS / 值馈送 / 协议参数集 / eval sha256;不要与设备信任 L0-L3 或冒烟测试 L1-L4 混淆);无法通过画布或 navigator JS 补丁统计探测次数。不要将外部指纹缓存送入运行路径(references/environment-patch-playbook.md)。 - 当线上出口数据与中间 getter、回调或 Cookie 存储区不一致时,以线上出口数据为准。
- 如果流量在到达应用语义之前就中断,应单独测试传输准入。
- 将确定性证明模式与实时生成模式分开。
- 确保每个最终辅助工具都可独立运行,不依赖有运行时支持的前置导入。
- 如果最终辅助工具具有状态,应明确其生命周期,并测试连续性和有意重置;实时 HTTP 仍由 Python 负责,辅助工具不得取代浏览器。
- 仅通过
references/case-reuse-playbook.md复用已有的已解决辅助工具:按精确范围或多个独立信号匹配,先运行固定向量,绝不要将复制的密钥或历史笔记提升为当前证明。
对于以 Python 为主的项目,使用 scripts/scaffold_reverse_project.py;使用 scripts/protocol_diff.py 比较请求或响应差异,使用 scripts/transport_profile_diff.py 比较结构化 TLS 和 H2 配置差异,使用 scripts/transform_trace_diff.py 比较分阶段运行时的一致性,并使用 scripts/crypto_fingerprint.py 获取初步编码或摘要提示。
对于可复用证据,请阅读 references/reproducible-evidence-playbook.md;使用 scripts/evidence_normalizer.py 创建经过脱敏、保留顺序的软件包,使用 scripts/transcript_diff.py 定位链路首次出现差异的位置,并使用 scripts/practice_lab.py 离线练习协议的正向和负向控制。
技能自带的回环练习实验室用于确定性固定测试数据评估,并非新的实时目标。仅使用直接 HTTP 对其进行探测;请勿在此自测中启用实时顺序启动门(fingerprint-baseline / debugger-trace)。
验证与报告
在与声明的形态相关的每个关卡都通过之前,不要标记为完成:
- Startup Gate 为最新状态。
- 对于实时声明,已证明真实端点、规范突变点和变化中的状态。
- 对于全新的 Web
live-target,已记录首轮的两个角色(fingerprint-baseline和debugger-trace)及其选定手段或明确缺口。缺口会阻止页面/运行时理解类声明;只有严格限定为仅传输的直接端点例外,仍可接受一项限定于单个端点、可运行的交付物。artifact-onlyWeb 工作须说明这些表面尚未得到证明;非 Web 主目标则不在范围内,不得臆造 Web 浏览器证明。 - 在相关情况下,已处理干净基线和观察者效应风险。
- 固定输入的辅助工具或解码器检查已通过。
- 非空或类似铸造的迹象、合理的长度、辅助工具加载、单次 HTTP
200、当前 Cookie、稳定的拒绝 JSON、与黄金样本的相似度或铸造变体计数都不构成验收标准;无需强制要求在单个黄金样本上锁定形态。 - 在适用时,已记录 Cookie 来源、槽位放置、会话链完整性、传输、信封、解码、流、分页和权限规则。
- 对于
compact-replay和collector,除非接受的结果是明确限定范围的离线重放,且已标明实时验收尚未得到证明,否则重复实时重放必须成功。 - 任何最终重放或采集均不得使用浏览器自动化或浏览器配置文件。
- 输出已按要求的格式保存。
- 敏感产物已在任务专用的密钥存储区之外脱敏。持久化的规范化证据包使用
references/project-artifact-contract.md中针对证据的清单架构;可运行的重放或采集清单还需记录能力、会话范围、辅助工具和重放证据,不得复制机密。无需写入文件的对话式证据结果不需要清单文件。
每个重要阶段完成后,使用 references/report-templates.md 中简明的阶段差异格式,并填写 browser_mode、curl impersonate、capsule major、business_request、unproven_routes 和 next_action;仅在重大决策和最终交付时使用完整模板。对于 compact-replay 和 collector,请以其简明协议交接摘要收尾,不要创建冗余的项目文档。始终报告所选家族、每个可用证据表面证明的内容、真实端点、变化部分、误导性信号、固定输入证明、最终协议路径、采集器/辅助工具的职责划分、保存路径、无浏览器状态和剩余不稳定性。仅在相关时补充 Cookie、观察者效应、同级路由、信封家族、解码、会话、分页或最小可验证事实的详情。
当出现可复用的家族时,使用 references/minimal-verifiable-facts-playbook.md 保留 5 至 15 条结构性事实。单次任务的经验应仅保留在任务范围内;在两次独立复现后,使用 references/experience-card-schema.md 只提升不变量、夹具、正反向判定依据和适用边界。
参考资料路由
仅加载与当前证据相符的参考资料,但要确保此处可直接找到每条路由。
核心工作流与维护
- 专注于 Hook / env-patch / 纯 Python 路径:参见 Fast Routes and Ownership
references/profiles/browser-hook-snippets/index.mdreferences/profiles/static-ast/index.mdreferences/profiles/env-patch/index.mdreferences/runtime-state-continuity-playbook.mdreferences/pure-python-rebuild-playbook.mdreferences/startup-triage-playbook.mdreferences/workflow-overview.md(Phase 0-5 映射、多阶段稳定、阶段字段)references/tool-playbook.md- 低观察者边界值捕获升级:
references/silent-value-capture-playbook.md - MCP 家族选择与信号驱动的自动判定:在 artifact-only、Camoufox/managed host、chrome-devtools、js-reverse、silent-value-capture、passive wire stores、wire visibility 或 environment providers 之间做选择时,请阅读
references/mcp-routing-playbook.md - 本地附加端口或调试配置文件路径问题:
references/local-mcp-environment.md references/escalation-ladder-playbook.mdreferences/delivery-gate-playbook.mdreferences/anti-patterns-playbook.mdreferences/report-templates.mdreferences/doctrine-index.mdreferences/symptom-heuristics.mdreferences/pattern-atlas.mdreferences/minimal-verifiable-facts-playbook.mdreferences/provider-work-order.mdreferences/specialist-handoff-contract.md- 声明升级 / 双表面确认:
references/evidence-corroboration-gate.md - 本地与成功的因果隔离:
references/positive-sample-ablation-playbook.md - 多表面形态 / 状态链验证器:
references/verifier-morph-and-state-chain-playbook.md - 主要故障表面标签与卡住时的下一步操作:
references/failure-surface-taxonomy.md - 反机器人类别(签名绑定 / 拦截器 / 纯混淆):
references/anti-bot-class-playbook.md references/project-artifact-contract.mdreferences/case-reuse-playbook.mdreferences/experience-card-schema.md- 已推广的无密钥卡片:
references/experience-cards/page-local-exception-needs-negative-control.json、references/experience-cards/standard-primitive-concat-before-custom-port.json、references/experience-cards/signer-egress-stub-must-match-callsite.json、references/experience-cards/server-clock-must-enter-observed-writer.json
请求路径、签名器与混淆
- 签名器阶段对齐与有序回放失败阶梯:
references/signer-parity-chain-playbook.md - 先检查 VM/拦截器的退出路径、嵌套标准 ISA 内存映像、操作码前的 protobuf serializeBinary / wasm encode(i32,i32)、反向跟踪、ALU 重叠 ID;参数替换后的编译函数体快照是密钥材料,而非调用跟踪;
fromCharCode热度(百万 vs 0)可诊断 VM 入口:references/jsvmp-analysis-playbook.md - 移植常量前,先检查修改过的标准摘要、原生存在性 IV/Tj/每轮 K/打包/压缩分支选择(Node 对提取出的摘要执行 eval 并非浏览器基准);自定义移植前先拼接常量池;在语句拆分下,具名 JSEncrypt/JSBN/RSA 仍需拼接 + PKCS#1(在金标 Token 策略确定前,先固定填充字符串;由于随机填充,结果不相等是预期的);缺少分组雪崩时保留打包的助手;具名 AES/GCM 若会产生雪崩,仍需检查打包密钥 / GCM 帧 / 金标对 XOR / 内层字段 PRNG;区分诱饵时间戳/PRNG 包装器与内层哈希器,或必须进入观测到的写入器的服务端时钟(签名器参数、查询时钟或 ajax success;而非冻结内层 Date);两阶段混合(占位符 vs 主机;无填充 vs 有填充十六进制;长度遵循第一阶段混合的十六进制);按尺寸指纹识别 DES/3DES/AES/RC4(具名 AES 下的短向量 8 字节 CT 实际是 DES/3DES;主机对象捕获路径可能重排密码键);TEA/XTEA 系列常量、字节码中的密钥恢复、uint32 移植、具名 MD5 时间戳双重未命中时保留打包的助手;哈希器内部对恢复出的 R 执行 eval/setInterval 是桩代码,并非原像;固定样本加密:
references/crypto-patterns.md - 字符串表或混淆器风格的恢复、解码器完整性循环、每次获取时轮换的写入槽、庞大的图表/绘制器包装器与精简的列表 URL 模块:
references/obfuscation-guide.md、references/offline-inline-deob-playbook.md - HTML 占位零值但没有列表 XHR;虚假的 HTTP 填充不会让 WebSocket 列表失效;chrome-devtools HTTP 日志会省略 WebSocket;跳过非 JSON 的 WS 前缀帧:
references/decoy-and-real-request-playbook.md、references/structured-transport-playbook.md - 空的
beforeSendIIFE 不是签名器;冻结线上请求体:references/transport-wrapper-playbook.md references/patched-helper-playbook.md- 不透明阶段、先收集再修补、嵌套内存映像、后端对比、同一会话的非确定性输入:
references/opaque-runtime-profile-playbook.md
Cookie、引导状态与会话
- 登录后的多层业务身份:
references/multi-context-session-playbook.md - Cookie 写入器/刷新与 impersonate-jar 主机名绑定(空 domain 与仅主机 Cookie 的区分):
references/cookie-provenance-playbook.md references/session-contract-playbook.mdreferences/public-bootstrap-envelope-playbook.md- 挑战主键 / 同轮惩罚 HTML / 轮换的 document Token / 200 填充 JSON 惩罚 / 答案接受与完成锁存:
references/challenge-state-envelope-playbook.md - 同一参数名的双写入器,Cookie 与查询参数或内存全局变量:
references/dual-writer-param-playbook.md - 本地挑战执行器、init/observe/interact/sign、标记生命周期、正式后端选择;助手身份取决于参数数量和输入输出,而非 URL;视觉基准拖动起点是框的
x1,而非中心;OCR/验证码平台仅用于诊断,绝不用于采集器运行时:references/local-challenge-executor-playbook.md - 文档完成时创建加载锁存、Cookie 与查询参数的 WAF 槽位、轮换的 202 JS、Cookie 与 window 槽位、200 填充值惩罚:
references/server-js-cookie-bootstrap-playbook.md references/side-asset-bootstrap-playbook.md
绑定宿主的运行时与观测
- 热读与因果宿主读取、页面世界副本与本地 DOM 宿主、WebIDL FTS、
window.eval构造器、易受 Proxy 影响的实时集合;暴露 webpack__wpRequire并跳过 UI$mount;setTimeout绝不能同步运行回调(通过__drainTimers__驱动);一旦 impersonate 已返回业务 200,伪造 canvas/audio 对 cookie 铸造辅助程序就可能足够;在 Camoufox 前可配置删除 CDP webdriver:references/environment-patch-playbook.md - 本地供应商指纹 SDK 运行时:
references/local-sdk-env-patch-playbook.md references/embedded-browser-runtime-playbook.md- 混合脚本字符集、未命名 meta 内容、
page.loadbaseURL、ThreadPool 隔离、Node 诱饵铸造与原生宿主:references/iv8-runtime-cheatsheet.md - 重建加密链前,先使用公开的多元数导出预言机;cookie/重定向仍然优先:
references/challenge-artifact-harvest-playbook.md - 在
Number.prototype.toString、TextEncoder.encode上添加包装,以及对 TypedArray / 实时集合使用 Proxy,都会毒化观察;参数替换后通过 Function 构造器/eval编译函数体是关键材料;绝不包装全局Function.prototype.apply/call;Array.join可能暴露明文:references/hook-techniques.md Function("debugger")/Function("while (true) {}")会卡住,包括 live js-reverse 重新调用;仅精确剥除函数体;某个构造器外的一处无效!==不会清除 attach;解码器完整性循环、debugger 操作码、哈希器内部对已恢复 R 的 eval/setInterval(替换宿主,保留摘要);MCP select_page 超时表示 debugger_attach_gap,之后应离线提取;JSVMP 的 XHR 因 webdriver 静默并不表示 attach 卡住:references/anti-debug-playbook.md
传输、解码与结构化协议
- 异步导出、报告下载、任务隔离:
references/async-export-job-playbook.md - 同级路由返回 200,而此路由的标准库请求返回 403:在重启签名器或逆向 canvas 前,先对同一组获准的令牌字节移除已安装的 curl impersonate:
references/transport-pre-gate-playbook.md references/native-transport-profile-playbook.md- HTML 中 CSS 精灵图的隐藏类 / 流内偏移 / 图像字节标识、字体或字形映射、JSON 数值中的 CR/LF 去除:
references/response-decode-playbook.md - UTF-8 MCP 转储会损坏 protobuf;在序列化器处捕获十六进制;过期时钟桶令牌会返回 403;跳过非 JSON WebSocket 前缀/确认帧:
references/structured-transport-playbook.md references/stateful-stream-e2ee-playbook.md
验证器、分页、异常与恢复
- 设备信任伴随门控 / L0-L3:
references/device-trust-sidecar-playbook.md - 本地指纹 SDK 环境补丁:
references/local-sdk-env-patch-playbook.md - 网关/授权/业务接受、同一世界、配置身份、重试/冒烟测试阶梯;源类别与所有权类别正交:
references/verifier-replay-playbook.md、references/parameter-ownership-playbook.md - 已签发的挑战图片/令牌必须被消耗;未使用的提取可能会毒化会话通过率;接受率和拒绝率可能是不同的指标:
references/challenge-state-envelope-playbook.md references/verifier-error-localization-playbook.md- 多表面形变/状态链门控:
references/verifier-morph-and-state-chain-playbook.md - 正样本卫生处理与卫生处理后的行为校准:
references/positive-sample-hygiene-playbook.md references/pagination-route-pivot-playbook.mdreferences/page-specific-exception-playbook.md- 下一步操作卡住时的症状处理方案:
references/troubleshooting-playbook.md
技能验证
- 维护、官方套件与独立行为审查:
references/skill-maintenance.md、references/official-self-test-task-suite.md、references/forward-testing-playbook.md
维护此技能
编辑前,请阅读 references/skill-maintenance.md。根据 references/official-self-test-task-suite.md 进行验证,并在存在 scripts/validate_skill.py 时运行它。默认验证是静态的;仅针对可信的当前技能根目录运行 scripts/validate_skill.py --run-trusted-self-tests。需要机器可读的 JSON 套件时,请使用 scripts/validate_skill.py --export-tests <path-outside-skill>;将 Markdown 套件保留为唯一事实来源。静态 PASS 并不能证明行为正确。若要声称行为未发生回归,请遵循 references/forward-testing-playbook.md,并使用 scripts/forward_test_report.py 验证由外部新运行器和独立审核者提供的报告;报告和响应产物应保存在此技能目录树之外。
将可复用的详细内容放在最具体的参考文档中。保留此条目作为协议优先的执行路径和直接路由器。保留通用事实和固定向量,绝不保留实时密钥、复制的 Cookie、账户令牌或特定网站的传闻。
归根结底
当网站看起来只能通过浏览器操作时,先弄清楚真正的请求是什么、哪些状态确实发生了变化,以及能否在本地重建这些状态。
有了网络传输证据和可重复回放,这些目标大多都能迎刃而解。