JS Reverse Ops
Utilisez cette compétence comme un workflow structuré de rétro-ingénierie, et non comme une session de débogage ad hoc.
Pour commencer
MAINTENANT: classifiez la demande (récupération de signature, désobfuscation hors ligne, traçage d'exécution, reconstruction d'environnement, ...) et chargez uniquement les fichiers référencés pour ce type de tâche.MAINTENANT: si le travail implique l'exécution locale de JS dans un navigateur, lisez d'abordreferences/env-rebuild-recipes.md— 10 fiches techniques (classes masquées natives, sondes de marquage de classe, absence de builtins d'hôte, vrais temporisateurs, proxy en ligne, oracles de calibrage) qui préviennent les erreurs les plus coûteuses d'environnement de test.MAINTENANT: en cas de doute sur les dépendances ou les outils, suivezreferences/toolchain-bootstrap.mdavant d'écrire des sondes.SUIVANT: si un flux reconstruit "fonctionne presque" (premier jeton valide, échecs ultérieurs, réponses 200 mais erronées, divergence de clé inexpliquée), arrêtez les sondes et lisezreferences/misdiagnosis-patterns.md.AGISSEZ: entrez dans l'étape correspondante du Workflow Principal et exécutez — ne vous arrêtez pas à la confirmation.
Périmètre
Cette version publique conserve :
- le routage par étapes pour
Localiser,Exécution,RécupéreretRejouer - des scripts réutilisables pour l'extraction, la normalisation des captures d'exécution, l'échafaudage de relecture et la génération d'artefacts
- des références génériques, des règles et des modèles pour la rétro-ingénierie JavaScript exécutée par navigateur
Cette version publique exclut intentionnellement :
- les bibliothèques de cas privés ou spécifiques à un site
- les jeux de tests capturés et les corpus de validation
- les cibles de benchmark concrètes, les identifiants et les notes de relecture liés à des sites nommés
Workflow Principal
Partez du contexte fiable le plus petit :
- cible inconnue : exécutez
node scripts/js_reverse_ops.js <cible-url-ou-fichier> [--json] - notes existantes, journaux de sondes ou résumés d'échecs : exécutez
node scripts/map_case_to_pattern.js <notes.md>et passez--notes <notes.md>àscripts/js_reverse_ops.js - exécution réalisable d'une procédure : exécutez
node scripts/run_playbook.js <cible> --notes <notes.md> --out runs/courantpour produire un cahier de route, un plan de routage, des artefacts de démarrage/provenance/risque/relecture et un échafaudage de sondes - commande d'opérateur suivante : exécutez
node scripts/recommend_next_action.js runs/courant --jsonquand un répertoire d'exécution existe mais que des blocages d'exécution, de relecture ou de préparation rendent l'étape suivante floue - cible JS ou HTML locale : exécutez
scripts/triage_js.sh <chemin>puis le plus petit extracteur correspondant à la famille de la cible - cible avec navigateur : vérifiez l'état du navigateur et du pont avant de collecter des preuves d'exécution
- symptômes anti-analyse : exécutez
node scripts/select_anti_detection_profile.js --symptoms "<symptômes>"avant de changer la stratégie de sondes ou de navigateur ; la sélection de profil modifie uniquement la stratégie d'observation et doit toujours être suivie d'une vérification d'exécution/relecture - contrôle qualité public : exécutez
node scripts/run_public_benchmarks.jsavant de publier ou après avoir modifié le routeur, la mémoire des motifs, les exemples ou les procédures - audit des risques de publication publique : exécutez
node scripts/explain_public_release_risk.js --json --strictpour expliquer les risques liés aux fichiers suivis, secrets, chemins, captures et artefacts générés avant de pousser - résumé des capacités publiques : exécutez
node scripts/generate_capability_scorecard.jspour comparer cette compétence à d'autres packages de rétro-ingénierie - résumé des lacunes du marché : exécutez
node scripts/generate_market_gap_scorecard.jspour décider comment améliorer cette compétence par rapport aux compétences avancées de rétro-ingénierie et aux chaînes d'outils MCP - matrice de régression externe : exécutez
node scripts/compare_external_skill_matrix.js --jsonpour comparer cette compétence aux profils de MCP navigateur, décompilateur statique, rétro-ingénierie JS agentique et rétro-ingénierie inter-domaines - planification des tests de fumée MCP navigateur : exécutez
node scripts/plan_browser_mcp_smoke.js --server-family chrome_devtools_mcp --jsonavant d'exécuter des vérifications de fumée spécifiques à l'adaptateur - vérification des tests de fumée MCP navigateur : exécutez
node scripts/verify_browser_mcp_smoke_record.js --record <mcp-execution.json> --jsonavant de déclarer des observations de fumée d'adaptateur - boucle de livraison MCP navigateur : exécutez
node scripts/run_mcp_delivery_loop.js <cible> --record <mcp-execution.json> --out runs/courant --jsonpour échafauder, vérifier, promouvoir, valider et évaluer la préparation en un seul passage - diagnostic d'échec de relecture : exécutez
node scripts/diagnose_replay_failure.js --run-dir runs/courant --jsonou passez--replay-record <record.json>avant de modifier le code du signataire - génération de client de relecture : exécutez
node scripts/generate_replay_delivery_client.js --record <relecture-acceptée.json> --out runs/courant/replay-client --jsonpour produire des clients de relecture Node et Python nettoyés - validation du client de relecture : exécutez
node scripts/validate_replay_delivery_client.js runs/courant/replay-client --jsonavant de traiter les clients générés comme des artefacts de transfert - porte de vérité statique : exécutez
node scripts/assess_static_recovery_truth.js --original <input.js> --restauré <output.js> --jsonavant de promouvoir une sortie statique lisible - planification statique prioritaire aux source maps : si un bundle contient
sourceMappingURL,sourceURL, des maps en ligne ou des notesX-SourceMap, exécuteznode scripts/plan_static_toolchain.js <bundle.js> --jsonavant le nettoyage AST - validation de transfert de domaine : exécutez
node scripts/validate_domain_handoff_record.js --record <transfert-record.json> --json --strictavant de fusionner les résultats WASM, paquets, mobiles, natifs ou débogueur dans les preuves JS - interface CLI : utilisez
node scripts/jsro.js <commande>ou le binaire du packagejsropour les commandes route, run, validate, next, benchmark, scorecard, marketgap, releaserisk, externalmatrix, mcpsmoke, mcpsmokeverify, mcploop, replaydiagnose, replayclient, replayclientcheck, statictruth, handoff, handoffcheck, install et publish - installation ou publication en une commande : utilisez
bash scripts/install_local.shetbash scripts/publish_release.sh
- réponse acceptée plus valeurs visibles par le navigateur confuses : inspectez la logique de rendu et de suppression côté page avant d'escalader vers la récupération du signataire, et utilisez
playbooks/accepted-response-hidden-dom.md - réponse acceptée plus entités de police ou de glyphes intégrées à la page : extrayez la police de la réponse actuelle, résolvez la carte des glyphes au niveau de la page, et utilisez
playbooks/embedded-runtime-font-mapping.md - la relecture échoue encore même après qu'un condensé accepté a été récupéré : inspectez l'ordre d'écriture des cookies au démarrage, les collecteurs de condensés et l'assemblage des cookies enveloppés, puis utilisez
playbooks/bootstrap-digest-ladder.md - un point d'accès renvoie systématiquement du JavaScript en premier et ne renvoie des tableaux qu'après exécution du script et relecture sur le même chemin : traitez-le comme une chaîne de préchauffage itérative au lieu de chercher un second point d'accès caché, et utilisez
playbooks/iterative-script-warmup-same-endpoint.md - le signataire dépend d'une heure émise par le serveur et d'un assistant wasm ou module : figez la source temporelle, prouvez la forme exacte de l'entrée du signataire, et utilisez
playbooks/server-time-gated-wasm-signer.md - le nom de l'assistant de condensé semble standard, mais la sortie du navigateur diverge à la fois de la bibliothèque standard et de l'assistant local brut : isolez d'abord la plus petite surface de correctif d'exécution, et utilisez
playbooks/patched-runtime-digest-branch.md - un gros bundle cache un petit assistant d'exécution dont vous avez réellement besoin pour la relecture : extrayez d'abord cet assistant au lieu d'émuler toute la page, et utilisez
playbooks/runtime-bundle-signer-extraction.md - les assistants de jeton globaux sont absents ou trompeurs, mais
XMLHttpRequest.openréécrit l'URL protégée avec le champ du signataire : traitez l'URL réécrite comme la sortie du signataire, préservez l'ordre des scripts et l'état d'exécution, et utilisezplaybooks/xhr-open-url-rewrite-runtime-replay.md - le contrat de requête visible est stable mais différents clients HTTP divergent : escaladez via une échelle de transport avant d'inventer plus d'état du signataire, et utilisez
playbooks/transport-profile-ladder.md - la réponse de vérification semble bruyante ou pessimiste alors que les requêtes de données réussissent toujours : traitez le point d'accès de données comme l'oracle d'acceptation, et utilisez
playbooks/lenient-verify-data-gate.md - la page expose une simple requête ou un champ d'assistant, mais les pages suivantes échouent avec une porte en forme de jeton : prouvez si la requête visible est un leurre avant d'élargir à la récupération complète de la VM, et utilisez
playbooks/decoy-page-request-hidden-token-gate.md - une image de défi est une petite grille fixe avec un glyphe ou un symbole par cellule : résolvez d'abord le chemin d'affectation de la grille, et utilisez
playbooks/grid-challenge-template-matching.md - un défi en plusieurs étapes nécessite un rechargement frais, une preuve de signataire ensemencée, puis utilise une valeur d'étape acceptée comme clé suivante : validez la première requête de base avant de résoudre les décryptages en aval, et utilisez
playbooks/fresh-reload-seeded-signer-step-key-ladder.md - un chemin de relecture fonctionne pour le premier tour, mais les tours suivants ne retrouvent la parité qu'après la relecture du tour précédent : préservez l'échelle explicite des tours sur la même page, et utilisez
playbooks/same-page-prior-round-signer-replay.md - le HTML de bureau est instable mais un profil de requête mobile ou d'application aboutit à une page coque avec une hydratation JSON ultérieure : récupérez d'abord l'enveloppe de requête coque et la carte de routage, puis utilisez
playbooks/mobile-shell-api-pivot.md - Pour les bibliothèques cryptographiques groupées dont les primitives sont conditionnées par l'environnement (branches navigateur vs. bac à sable, alphabets base64 ou constantes de hachage modifiés, jetons de bac à sable rejetés alors que les jetons navigateur passent), acheminez vers
playbooks/env-gated-crypto-differential.md. - Pour les signataires VM avec état dont les URL de jetons capturés se rejouent avec succès, acheminez vers
playbooks/browser-assisted-token-replay.mdavant de tenter une récupération sémantique de la VM. - Pour les signataires VM personnalisée nécessitant un oracle local sans navigateur, acheminez vers
playbooks/jsdom-native-vm-differential.mdet différenciez les flux d'instructions et de constantes par rapport à une vérité de base de navigateur instrumentée. - Pour les jetons à courte durée de vie, acheminez vers
playbooks/short-ttl-inline-proxy.md: envoyez la vraie requête depuis l'environnement de calcul du jeton via un intercepteur de ressources basé sur Promise.
- code empaqueté ou de type VM : préservez l'artefact original, récupérez la structure de manière incrémentielle et étiquetez la sémantique vérifiée
- transfert de relecture : exportez un ensemble d'artefacts stable avant d'écrire le code de livraison Node ou Python
Référence des meilleurs outils
Utilisez les scripts intégrés pour le routage, les preuves, les artefacts et la répétabilité. Utilisez des outils spécialisés uniquement pour la tâche précise pour laquelle ils sont compétents :
- source maps ou modules originaux d'abord, avant toute passe de désobfuscation
webcrackpour les bundles obfuscator.io courants, les paquets de type webpack, les tableaux de chaînes et le premier dépaquetagewakarupour les sorties modernes minifiées où la normalisation de la syntaxe et la lisibilité comptent plus que la vérité d'exécutionast-grep, Babel ourecastpour de petites transformations structurelles cibléeshumanifyou un autre renommeur LLM uniquement après avoir assaini le code et uniquement lorsque la récupération d'identifiants vaut la peine d'envoyer des extraits en dehors de l'espace de travail
Ne laissez pas les désobfuscateurs externes remplacer les preuves. Chaque champ, cookie, entrée de signataire ou assistant de relecture récupéré a encore besoin d'une observation de navigateur vérifiée ou d'un artefact de relecture locale.
Pour une comparaison plus large avec les compétences et outils de rétro-ingénierie adjacents, utilisez references/external-skill-comparison-2026-06-04.md.
Porte de sécurité de publication
Avant de publier cette compétence publique, exécutez bash scripts/check_public_release.sh depuis la racine du dépôt public. Le package public ne doit pas contenir :
- notes de site privées, captures en direct, identifiants, cookies, jetons ou chemins spécifiques à un client
- répertoires
tmp/, cache,__pycache__,.pycgénérés ou sorties de benchmark locales suivies par git - chemins utilisateur absolus locaux, jetons d'authentification, jetons GitHub, clés cloud, JWT ou clés privées
- extraits non assainis qui identifient une cible active au-delà d'exemples génériques
Conservez les corpus privés et les bundles de validation locaux dans l'espace de travail privé. Publiez uniquement des procédures, scripts, modèles et exemples assainis génériques.
Références principales
references/env-rebuild-recipes.mdreferences/misdiagnosis-patterns.mdreferences/toolchain-bootstrap.mdreferences/standard-workflow-cookbook.mdreferences/stage-gates.md— conditions d'entrée/sortie strictes, boîtes de temps, chaîne de replireferences/decision-handoff.md— protocole de transfert delta uniquement entre étapes/sessionsreferences/task-types.mdexamples/case-walkthrough-combinatorial-gates.md— récit assaini : portes environnementales combinatoires + oracles de calibrageexamples/case-walkthrough-timer-selfcheck-and-fake-200s.md— récit assaini : auto-vérifications de temporisateurs, clés dérivées du temps, labyrinthe de fausses données 200
Remarque : le générateur d'échafaudage d'environnement de test à l'identique référencé dans l'édition complète est distribué uniquement avec l'espace de travail privé ; ce package public documente les règles équivalentes dans references/env-rebuild-recipes.md.
references/stages/locate.mdreferences/stages/runtime.mdreferences/stages/recover.mdreferences/stages/replay.mdreferences/rules/evidence-rules.mdreferences/rules/runtime-first.mdreferences/rules/routing-rules.mdreferences/rules/replay-rules.md
Note de publication
Cette variante publique est destinée à être partagée comme un package de compétence réutilisable. Conservez les jeux de tests privés, les captures en direct et les notes clients ou spécifiques à un site dans un espace de travail ou dépôt privé séparé.