jsr-reverse/SKILL.md
Use when a Web JS reverse task has unclear phase selection, mixed source-chain and shell blockers, runtime divergence, validation-only work, or RS/瑞数 clues such as 412, cookie hops, sign, token, JSVMP, worker, wasm, hasDebug, or basearr.
npx skillsauth add 715494637/reverse-skill jsr-reverseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
jsr-reverse remains the default entry skill for Web JS reverse work.
Its mission is to run this workflow spine:
intake -> evidence -> locate -> recover -> runtime -> validation -> handoff
Use it to:
evidence and handoff inside jsr-reverse, not as separate skillslocate, recover, runtime, or validationClues such as 412, token, worker, basearr, protobuf, JSVMP, wasm, or hasDebug can help choose supporting references, but they do not replace stage selection.
intake: normalize the request, target, trigger, goal, and constraints.evidence: prove the real request chain and update the project record before stage routing.locate: prove the write boundary, sink, and upstream dependency chain.recover: reduce the shell until the relevant logic contract is readable and operable.runtime: explain browser/local divergence and fit the minimum runtime dependency set.validation: prove equivalence, checkpoints, and final consistency.handoff: output the current stage decision and required artifact update.Fast triage is allowed, but only to accelerate stage choice inside this spine. It must not replace the spine.
Start from this block:
URL or target page:
Target request / field / cookie / message:
Trigger action:
Current symptom:
Known evidence:
Goal:
Constraints:
After intake, assign a complexity level to calibrate effort and expected stage coverage:
| Level | Label | Characteristics | Expected stages | |---|---|---|---| | L1 | Transparent chain | Parameters are visible concatenations or plain mappings; no obfuscation; no environment dependency | locate → validation | | L2 | Single-layer shell | Simple obfuscation or webpack bundle wrapping; one crypto call; no environment checks | locate → recover → validation | | L3 | Multi-layer shell + env | JSVMP / wasm / worker bridge + environment-dependent branching; anti-debug present | Full spine: locate → recover → runtime → validation | | L4 | Adversarial protection | Multi-hop cookies + dynamic code generation + anti-debug + environment fingerprinting + risk branches (e.g., RS/瑞数, certain captcha SDKs) | Full spine with multiple iterations; expect stage regressions |
Rules:
After intake, summarize the engineering state in plain terms:
Run this gate before routed stage selection whenever any of the following is true:
This gate stays inside jsr-reverse, not as a separate skill.
When the gate runs, update reverse-records/请求链路.md before choosing a routed stage.
The exact Request Chain Judgment format and recording details belong to references/request-chain-recording.md.
locatePurpose
Prove the real write boundary, sink, and upstream state chain for the target request, field, cookie, or message.
Enter when
Do
reverse-records/请求链路.md when the request chain becomes clearerProduce
Exit when
The sink and upstream chain are real enough that the next blocker is shell reduction, not request discovery.
Do not enter if
Do not do
recoverPurpose
Reduce the shell around a proven boundary until the logic contract needed for continuation is readable, traceable, or callable.
Enter when
worker, wasm, webpack bootstrap, protocol envelope, or similar shell logicDo
Produce
Exit when
The shell is reduced enough that the next blocker is environment fit or consistency proof, not code hiding.
Do not enter if
Do not do
runtimePurpose
Explain and close the first meaningful divergence between browser execution and local or controlled execution.
Enter when
Do
Produce
Exit when
The runtime divergence is explained and the remaining work is equivalence proof or final consistency checking.
Do not enter if
Do not do
validationPurpose
Prove that the recovered path, runtime fit, or reproduced output is defensible at the checkpoint and final-output levels.
Enter when
Do
Produce
Exit when
The proof is concrete enough for handoff and the next reader can see what is solved versus still open.
Do not enter if
Do not do
Routing is always two-step.
Pick the stage from the current project state:
locate when request reality, sink, or upstream chain is still unprovenrecover when the boundary is proven but a shell still hides the usable logic contractruntime when boundary and shell are clear enough but execution diverges across environmentsvalidation when the remaining work is proof, comparison, or checkpoint closureQuick examples:
412, 403, cookie hops, or token clues still route to locate if the real chain is not yet provenworker, wasm, protobuf, or JSVMP clues route to recover only if the task has already crossed the locate boundarybasearr or hasDebug clues route to runtime only if the boundary is already clear and the issue is environment divergenceAfter the stage is chosen, read:
Do not reverse this order. Do not pick references first and infer the stage afterward.
If new evidence closes locate and the next blocker becomes shell reduction, helper contracts, dispatcher flow, or opaque object structure, switch to recover immediately in the same turn.
After every stage switch:
references/stage-handoff-protocol.md before the new stage's output contract.Choose topic references after the stage is selected. Use the evidence artifact reference separately when the evidence gate runs.
locate core: references/locate-workflow.mdrecover core: references/recover-strategy.mdruntime core: references/runtime-diagnosis.mdvalidation core: references/equivalence-and-validation.mdreferences/request-chain-recording.md when the evidence gate runs or reverse-records/请求链路.md must be updated. This is the evidence artifact reference, not a topic mount.references/stage-handoff-protocol.md at every stage boundary crossing — mandatory, not optionalreferences/anti-patterns.md when a wrong-path pattern is suspected or as a pre-check before committing to an investigation directionRead the core ref first, then add at most 1-2 topic refs that match the current blocker:
references/crypto-entry-locating.md for sign, token, dynamic headers, or encrypted request fields during locatereferences/hook-and-boundary-patterns.md for hook, breakpoint, initiator, or boundary observation during locatereferences/jsvmp-and-ast.md for JSVMP, dispatcher loops, flattening, or AST-heavy shells during recoverreferences/ast-deobfuscation-playbook.md for string-table recovery, helper inlining, AST transforms, or bundle unpacking during recoverreferences/wasm-worker-webpack.md for worker, wasm, webpack/runtime, bootstrap, or loader logic during recoverreferences/protocol-and-long-connection.md for WebSocket, protobuf, SSE, heartbeat, ack, or renewal as a cross-stage topic after stage selectionreferences/anti-debug-and-risk-branches.md for anti-debugging or branch flips during runtimereferences/minimal-env-design.md for minimum environment design during runtimereferences/sdenv-fit-check-and-routing.md for lifecycle-produced state, navigation-produced state, or replay routing during runtimeBreakpoint-hit inspection belongs to locate only while the team is still proving the real write boundary. Once the active chain is already real and the next move is a targeted step-into across helpers such as _$jR -> _$cg to recover _$_U, _$$j, dispatcher, or bridge contracts, restage to recover first and mount references/recover-strategy.md, then the matching topic reference.
RS clues do not replace stage selection.
412, 403, challenge pages, meta[r=m], r2mKa, $_ts, $_ts.l__, first-hop / second-hop cookies, hasDebug, and basearr are signals for choosing a supporting refreferences/rs-collection-and-two-hop-routing.md during locatereferences/rs-recovery-anchors.md during recoverreferences/rs-runtime-and-basearr-fit.md during runtimeProtocol can appear in more than one stage. Add its reference only after the stage is already selected.
reverse-records/请求链路.md before routed-stage output.references/stage-handoff-protocol.md. L1/L2 tasks may use compact mode; L3/L4 must use full format.reverse-records/请求链路.md.jsr-reverse/references/*.Always output this block after routing:
Complexity: L{1-4}
Current stage:
Why this stage now:
Read now:
Required artifact:
Exit condition:
Requirements:
Complexity must be assigned at intake and revised upward if later evidence reveals hidden complexity.Why this stage now must explain the engineering state, not just clue words.Read now must contain exactly 1 core reference plus at most 1-2 topic references.Required artifact must point to the artifact or stage output that must be updated next.Required artifact as reverse-records/请求链路.md and append the current stage conclusion there.Current stage: locate
Why this stage now: The target request is still partly guessed, the upstream cookie dependency is not yet proven from a real capture, and the team does not have a stable write boundary for the token field.
Read now: references/locate-workflow.md + references/request-chain-recording.md + references/crypto-entry-locating.md
Required artifact: reverse-records/请求链路.md
Exit condition: The target request, upstream dependency chain, and token write boundary are all proven from real evidence.
Current stage: recover
Why this stage now: The request chain and write boundary are already real, but the usable logic is still hidden behind a worker bootstrap and packed helper layer, so the next blocker is shell reduction rather than runtime fit.
Read now: references/recover-strategy.md + references/wasm-worker-webpack.md
Required artifact: recovered worker/bootstrap contract for the target boundary
Exit condition: The shell is reduced enough that the next blocker is runtime fit or validation, not hidden control flow.
Current stage: runtime
Why this stage now: The sink and shell boundary are already clear, but local execution diverges at a fixed environment-dependent branch after browser lifecycle state is consumed.
Read now: references/runtime-diagnosis.md + references/minimal-env-design.md + references/rs-runtime-and-basearr-fit.md
Required artifact: first-divergence note and minimum runtime dependency set
Exit condition: The first divergence and minimum fit set are concrete enough to move into validation.
412, token, worker, basearr, protobuf, or other clue words choose the stage by themselves.locate frame once the boundary is already proven; restage to recover first.reverse-records/请求链路.md immediately after each request-chain capture or material change.tools
通过 chrome-devtools-mcp 连接真实浏览器,跟踪 sign/enc/token 的生成链路,识别运行时入口函数与依赖,然后生成 JSRPC 注入代码、Flask 代理代码以及带校验输出的 Burp autoDecoder 对接文档,本skills只生成对应的代码,不会对未授权目标进行测试。
tools
定位 JS 中参数的生成入口。当用户问"xxx 参数在哪生成"、"找加密入口"、"定位签名函数"、"请求参数怎么加密的"时使用
tools
通用 JS AST 解混淆。当用户说"解混淆"、"还原代码"、"反混淆"、"deobfuscate"、"代码看不懂全是_0x"时使用
development
Use when a Web JS reverse task has unclear phase selection, mixed source-chain and shell blockers, runtime divergence, validation-only work, or RS/瑞数 clues such as 412, cookie hops, sign, token, JSVMP, worker, wasm, hasDebug, or basearr.