jsr-reverse
Web JSのリバースエンジニアリングにおいて、不明瞭なフェーズ選択や複雑なソースチェーン、ランタイムの乖離などが発生した際に、効率的に解析を進めるSkill。
📜 元の英語説明(参考)
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.
🇯🇵 日本人クリエイター向け解説
Web JSのリバースエンジニアリングにおいて、不明瞭なフェーズ選択や複雑なソースチェーン、ランタイムの乖離などが発生した際に、効率的に解析を進めるSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-17
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
[スキル名] jsr-reverse
JSR Reverse
役割とミッション
jsr-reverse は、Web JS リバース作業のデフォルトのエントリスキルであり続けます。
そのミッションは、以下のワークフローの骨格を実行することです。
intake -> evidence -> locate -> recover -> runtime -> validation -> handoff
これを使用して、次のことを行います。
- 現在のプロジェクトの状態から次のステップを選択し、手がかりとなる単語だけから選択しない
evidenceとhandoffをjsr-reverseの内部に保持し、個別のスキルとして扱わないlocate、recover、runtime、またはvalidationのみにルーティングする- 今すぐ必要な最小限の参照セットを指し示す
412、token、worker、basearr、protobuf、JSVMP、wasm、hasDebug などの手がかりは、サポートする参照を選択するのに役立ちますが、ステージ選択に取って代わるものではありません。
ワークフローの骨格
intake: リクエスト、ターゲット、トリガー、目標、および制約を正規化します。evidence: 実際の要求チェーンを証明し、ステージルーティングの前にプロジェクトレコードを更新します。locate: 書き込み境界、シンク、およびアップストリームの依存関係チェーンを証明します。recover: 関連するロジックコントラクトが読み取り可能で操作可能になるまでシェルを削減します。runtime: ブラウザ/ローカルの相違を説明し、最小限のランタイム依存関係セットを適合させます。validation: 等価性、チェックポイント、および最終的な一貫性を証明します。handoff: 現在のステージの決定と必要な成果物の更新を出力します。
迅速なトリアージは許可されますが、この骨格内のステージ選択を加速するためのみです。骨格に取って代わるものであってはなりません。
インテーク契約
このブロックから開始します。
URL or target page:
Target request / field / cookie / message:
Trigger action:
Current symptom:
Known evidence:
Goal:
Constraints:
複雑度評価
インテーク後、労力と予想されるステージカバレッジを調整するために複雑度レベルを割り当てます。
| レベル | ラベル | 特徴 | 予想されるステージ |
|---|---|---|---|
| L1 | 透明なチェーン | パラメータは可視的な連結または単純なマッピング。難読化なし。環境依存なし | locate → validation |
| L2 | 単層シェル | 単純な難読化または webpack バンドルラッピング。1つの暗号化呼び出し。環境チェックなし | locate → recover → validation |
| L3 | 多層シェル + 環境 | JSVMP / wasm / worker ブリッジ + 環境依存の分岐。アンチデバッグが存在 | フル骨格: locate → recover → runtime → validation |
| L4 | 対抗保護 | マルチホップクッキー + 動的コード生成 + アンチデバッグ + 環境フィンガープリンティング + リスク分岐 (例: RS/瑞数、特定の captcha SDK) | 複数回のイテレーションを伴うフル骨格。ステージの回帰を想定 |
ルール:
- インテーク時に評価しますが、後の証拠で隠れた複雑さが明らかになった場合は上方修正します。証明なしに下方修正することはありません。
- L1/L2 タスクは、コンパクトなハンドオフカードを使用し、成果物内の recover/runtime アノテーションをスキップできます。
- L3/L4 タスクは、完全なハンドオフカードと完全な成果物ライフサイクルを使用する必要があります。
- グレードは調整シグナルであり、ルーティングのオーバーライドではありません。ステージ選択は、グレードではなくエンジニアリングの状態に従います。
インテーク後、エンジニアリングの状態を平易な言葉で要約します。
- ターゲットリクエストは実在し、キャプチャされていますか、それともまだ推測されていますか?
- アップストリームの依存関係チェーンは実在しますか、部分的ですか、それとも不明ですか?
- 書き込み境界は証明されていますか、近いが隠されていますか、それともまだ見つかっていませんか?
- 主なブロッカーはシェル削減、ランタイムの相違、それともチェックポイントの証明ですか?
- 次に更新する必要がある成果物は何ですか?
エビデンスゲート
以下のいずれかが真である場合は常に、ルーティングされたステージ選択の前にこのゲートを実行します。
- ターゲットリクエストが実際のサンプルから特定されていない
- アップストリームの依存関係チェーンがまだ推測されている
- トリガーアクションは既知だが、リクエストのエビデンスがまだ記録されていない
- 現在のタスクが複数の仮説を混ぜているが、リクエストチェーンレコードがそれらを解決していない
このゲートは、個別のスキルとしてではなく、jsr-reverse の内部に留まります。
ゲートが実行されるとき、ルーティングされたステージを選択する前に reverse-records/请求链路.md を更新します。
正確な Request Chain Judgment 形式と記録の詳細は references/request-chain-recording.md に属します。
ステージ契約
locate
目的
ターゲットリクエスト、フィールド、クッキー、またはメッセージの実際の書き込み境界、シンク、およびアップストリームの状態チェーンを証明します。
次の場合に開始
- ターゲットリクエストまたはシンクがまだ証明されていない
- アップストリームの依存関係チェーンが不完全である
- 書き込み境界が観測されたものではなく推測されている
- 現在のエビデンスが「値がどこでどのように書き込まれるかまだわからない」と示している
実行すること
- ライブリクエストチェーンとイニシエータパスを確認する
- ターゲット値を書き込む最小の境界に絞り込む
- どのアップストリームの状態遷移が重要で、どれが重要でないかを特定する
- リクエストチェーンがより明確になったら
reverse-records/请求链路.mdを更新する
成果物
- 実際のターゲットリクエストサンプル
- 証明されたシンクまたは書き込み境界
- ダウンストリーム作業に十分具体化されたアップストリーム依存関係チェーン
次の場合に終了
シンクとアップストリームチェーンが、次のブロッカーがリクエストの発見ではなくシェル削減であると判断できるほど現実的である場合。
次の場合に開始しない
- シンク/シェル境界が明確になった後、主なブロッカーがすでにランタイムの相違であることが証明されている場合
- 作業がすでに等価性証明のみに削減されている場合
実行しないこと
- 書き込み境界が現実的になる前の広範な難読化解除
- シンクがまだ推測されている間の環境パッチ適用
recover
目的
継続に必要なロジックコントラクトが読み取り可能、追跡可能、または呼び出し可能になるまで、証明された境界の周りのシェルを削減します。
次の場合に開始
- シンクまたは書き込み境界がすでに近く、現実的である
- 次のブロッカーが難読化、ディスパッチャ構造、パックされたヘルパー、
worker、wasm、webpack ブートストラップ、プロトコルエンベロープ、または同様のシェルロジックである - プロジェクトが最初にリクエストの発見を必要としなくなった
実行すること
- ダウンストリームの理解を妨げるシェルレイヤーのみを削除またはバイパスする
- 継続に必要なヘルパー、ディスパッチャ、ブリッジ、プロトコル、またはローダーのコントラクトを回復する
- 削減を最小限に抑え、証明された境界を中心に据える
成果物
- 削減されたシェルまたは回復されたコントラクト
- ランタイムまたは
(原文がここで切り詰められています)
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
JSR Reverse
Role & Mission
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:
- choose the next step from the current project state, not from clue words alone
- keep
evidenceandhandoffinsidejsr-reverse, not as separate skills - route only into
locate,recover,runtime, orvalidation - point to the smallest reference set needed right now
Clues such as 412, token, worker, basearr, protobuf, JSVMP, wasm, or hasDebug can help choose supporting references, but they do not replace stage selection.
Workflow Spine
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.
Intake Contract
Start from this block:
URL or target page:
Target request / field / cookie / message:
Trigger action:
Current symptom:
Known evidence:
Goal:
Constraints:
Complexity Grading
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:
- Grade at intake, but revise upward if later evidence reveals hidden complexity. Never revise downward without proof.
- L1/L2 tasks may use compact handoff cards and skip recover/runtime annotations in the artifact.
- L3/L4 tasks must use full handoff cards and full artifact lifecycle.
- The grade is a calibration signal, not a routing override. Stage selection still follows engineering state, not the grade.
After intake, summarize the engineering state in plain terms:
- Is the target request real and captured, or still guessed?
- Is the upstream dependency chain real, partial, or unknown?
- Is the write boundary proven, near-but-hidden, or not yet found?
- Is the main blocker shell reduction, runtime divergence, or checkpoint proof?
- What artifact must be updated next?
Evidence Gate
Run this gate before routed stage selection whenever any of the following is true:
- the target request is not identified from a real sample
- the upstream dependency chain is still guessed
- the trigger action is known but the request evidence is not yet recorded
- the current task mixes multiple hypotheses but no request-chain record resolves them
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.
Stage Contracts
locate
Purpose
Prove the real write boundary, sink, and upstream state chain for the target request, field, cookie, or message.
Enter when
- the target request or sink is still unproven
- the upstream dependency chain is incomplete
- the write boundary is guessed rather than observed
- current evidence says “we still do not know where or how the value is written”
Do
- confirm the live request chain and initiator path
- narrow to the smallest boundary that writes the target value
- identify which upstream state transitions matter and which do not
- update
reverse-records/请求链路.mdwhen the request chain becomes clearer
Produce
- a real target request sample
- a proven sink or write boundary
- an upstream dependency chain that is concrete enough for downstream work
Exit when
The sink and upstream chain are real enough that the next blocker is shell reduction, not request discovery.
Do not enter if
- the main blocker is already proven to be runtime divergence after the sink/shell boundary is clear
- the work is already reduced to equivalence proof only
Do not do
- broad deobfuscation before the write boundary is real
- environment patching while the sink is still guessed
recover
Purpose
Reduce the shell around a proven boundary until the logic contract needed for continuation is readable, traceable, or callable.
Enter when
- the sink or write boundary is already near and real
- the next blocker is obfuscation, dispatcher structure, packed helpers,
worker,wasm, webpack bootstrap, protocol envelope, or similar shell logic - the project no longer needs request discovery first
Do
- strip or bypass only the shell layers that block downstream understanding
- recover helper, dispatcher, bridge, protocol, or loader contracts needed for continuation
- keep the reduction minimal and oriented around the proven boundary
Produce
- a reduced shell or recovered contract
- the smallest callable or inspectable logic slice needed for runtime or validation
Exit when
The shell is reduced enough that the next blocker is environment fit or consistency proof, not code hiding.
Do not enter if
- the real write boundary is still not proven
- the task is primarily about first divergence under browser/local execution
Do not do
- full decompilation when a bridge contract or operator slice is enough
- topic-driven recovery work that is not connected to the current boundary
runtime
Purpose
Explain and close the first meaningful divergence between browser execution and local or controlled execution.
Enter when
- the sink and shell boundary are already clear enough
- browser and local execution diverge in state, timing, branch, or environment facts
- the next question is which minimum runtime facts must be fitted
Do
- identify the first real divergence point
- determine the minimum dependency set required to keep execution aligned
- distinguish lifecycle-produced facts from patchable surface facts
- treat runtime as last-mile fit when the user wants to avoid heavy environment patching
Produce
- a first-divergence explanation
- a minimum runtime dependency set
- a justified route for replay, patch, browser-assisted execution, or staged validation
Exit when
The runtime divergence is explained and the remaining work is equivalence proof or final consistency checking.
Do not enter if
- the sink or shell boundary is still guessed
- the task still needs request-chain proof or shell reduction first
Do not do
- blind patch stacking without proving the first divergence
- expanding runtime work into general reverse if a smaller fit is enough
validation
Purpose
Prove that the recovered path, runtime fit, or reproduced output is defensible at the checkpoint and final-output levels.
Enter when
- the main blocker is no longer discovery, reduction, or runtime fit
- the work now needs checkpoint proof, equivalence proof, or final consistency proof
- the task is validation-only
Do
- compare concrete checkpoints, not just the last output
- prove where outputs match, diverge, or remain unproven
- define the artifact or evidence needed to close the remaining proof gap
Produce
- a defensible equivalence or non-equivalence statement
- concrete checkpoints and conclusions for handoff
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
- the project still lacks a real request chain, sink, shell reduction, or runtime explanation
Do not do
- accept final output similarity while intermediate checkpoints disagree
- hide uncertainty when the compared evidence is incomplete
Routing Rules
Routing is always two-step.
Step 1: choose the stage from engineering state
Pick the stage from the current project state:
- choose
locatewhen request reality, sink, or upstream chain is still unproven - choose
recoverwhen the boundary is proven but a shell still hides the usable logic contract - choose
runtimewhen boundary and shell are clear enough but execution diverges across environments - choose
validationwhen the remaining work is proof, comparison, or checkpoint closure
Quick examples:
412,403, cookie hops, ortokenclues still route tolocateif the real chain is not yet provenworker,wasm,protobuf, orJSVMPclues route torecoveronly if the task has already crossed the locate boundarybasearrorhasDebugclues route toruntimeonly if the boundary is already clear and the issue is environment divergence
Step 2: pick the smallest reference set for that stage
After the stage is chosen, read:
- exactly 1 core reference for the stage
- plus at most 1-2 topic references that match the current blocker
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:
- Output a handoff card per
references/stage-handoff-protocol.mdbefore the new stage's output contract. - Reload the new stage's core reference and topic references before proposing the next debugging action. References from the previous stage do not satisfy the new stage.
Topic Mount Rules
Choose topic references after the stage is selected. Use the evidence artifact reference separately when the evidence gate runs.
Core references by stage
locatecore:references/locate-workflow.mdrecovercore:references/recover-strategy.mdruntimecore:references/runtime-diagnosis.mdvalidationcore:references/equivalence-and-validation.md
Evidence artifact support
references/request-chain-recording.mdwhen the evidence gate runs orreverse-records/请求链路.mdmust be updated. This is the evidence artifact reference, not a topic mount.
Cross-stage references
references/stage-handoff-protocol.mdat every stage boundary crossing — mandatory, not optionalreferences/anti-patterns.mdwhen a wrong-path pattern is suspected or as a pre-check before committing to an investigation direction
Topic mount policy
Read the core ref first, then add at most 1-2 topic refs that match the current blocker:
references/crypto-entry-locating.mdforsign,token, dynamic headers, or encrypted request fields duringlocatereferences/hook-and-boundary-patterns.mdfor hook, breakpoint, initiator, or boundary observation duringlocatereferences/jsvmp-and-ast.mdforJSVMP, dispatcher loops, flattening, or AST-heavy shells duringrecoverreferences/ast-deobfuscation-playbook.mdfor string-table recovery, helper inlining, AST transforms, or bundle unpacking duringrecoverreferences/wasm-worker-webpack.mdforworker,wasm,webpack/runtime, bootstrap, or loader logic duringrecoverreferences/protocol-and-long-connection.mdfor WebSocket, protobuf, SSE, heartbeat, ack, or renewal as a cross-stage topic after stage selectionreferences/anti-debug-and-risk-branches.mdfor anti-debugging or branch flips duringruntimereferences/minimal-env-design.mdfor minimum environment design duringruntimereferences/sdenv-fit-check-and-routing.mdfor lifecycle-produced state, navigation-produced state, or replay routing duringruntime
Breakpoint-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 / 瑞数 mount policy
RS clues do not replace stage selection.
412,403, challenge pages,meta[r=m],r2mKa,$_ts,$_ts.l__, first-hop / second-hop cookies,hasDebug, andbasearrare signals for choosing a supporting ref- after the stage is chosen, add the smallest RS reference that fits that stage:
references/rs-collection-and-two-hop-routing.mdduringlocatereferences/rs-recovery-anchors.mdduringrecoverreferences/rs-runtime-and-basearr-fit.mdduringruntime
Protocol can appear in more than one stage. Add its reference only after the stage is already selected.
Record & Handoff Rules
- If the evidence gate runs, update
reverse-records/请求链路.mdbefore routed-stage output. - At every stage switch, output a handoff card per
references/stage-handoff-protocol.md. L1/L2 tasks may use compact mode; L3/L4 must use full format. - Repeat the stage output only when the stage changes or the request evidence materially changes.
- If a topic mount changes the current investigation path, repeat the stage output and update the current artifact before handoff.
- Current artifact:
reverse-records/请求链路.md. - Keep the handoff tied to the current artifact, not to a clue list.
- Only reference
jsr-reverse/references/*.
Output Contract
Always output this block after routing:
Complexity: L{1-4}
Current stage:
Why this stage now:
Read now:
Required artifact:
Exit condition:
Requirements:
Complexitymust be assigned at intake and revised upward if later evidence reveals hidden complexity.Why this stage nowmust explain the engineering state, not just clue words.Read nowmust contain exactly 1 core reference plus at most 1-2 topic references.Required artifactmust point to the artifact or stage output that must be updated next.- If the evidence gate ran, keep
Required artifactasreverse-records/请求链路.mdand append the current stage conclusion there.
Examples
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.
Guardrails
- Do not start from broad source grep when a live request and initiator chain already exist.
- Do not skip the evidence gate when the real request chain is still guessed.
- Do not let
412,token,worker,basearr,protobuf, or other clue words choose the stage by themselves. - Do not jump into runtime patching while the write boundary is still unproven.
- Do not fully decompile a shell when a bridge contract or operator slice is enough.
- Do not treat RS first-hop material as complete until second-hop consumption is checked.
- Do not treat a final output match as sufficient when intermediate checkpoints disagree.
- Do not continue targeted step-into, helper-contract recovery, or object-structure补全 under a
locateframe once the boundary is already proven; restage torecoverfirst. - Update
reverse-records/请求链路.mdimmediately after each request-chain capture or material change. - Keep topic refs minimal; do not turn this skill into a reference encyclopedia.