
jshunter est un outil en ligne de commande conçu pour analyser les fichiers JavaScript et extraire des points de terminaison. Cet outil se spécialise dans l'identification de données sensibles, telles que les points de terminaison d'API et les potentielles vulnérabilités de sécurité, ce qui en fait une ressource essentielle pour les chasseurs de bugs et les chercheurs en sécurité.
Outil professionnel d'analyse de sécurité JavaScript
Découverte complète d'endpoints, détection de données sensibles et analyse avancée de code pour les professionnels de la sécurité
JSHunter est un outil complet en ligne de commande pour l'analyse de sécurité JavaScript et la découverte d'endpoints. Conçu pour les professionnels de la sécurité, les testeurs d'intrusion et les développeurs, il offre des capacités d'analyse de niveau entreprise avec des algorithmes de détection à haute précision et des fonctionnalités de reporting professionnelles.
https://github.com/user-attachments/assets/5a5f60fa-f8dc-4aac-bd06-2e93779f9af4
JSHunter en action — une capture réelle du terminal de la CLI (chaque secret affiché est une donnée de test fictive)
Précision de niveau entreprise avec des algorithmes d'analyse avancés
Authentification et en-têtes :
-H) : En-têtes d'authentification répétables et en-têtes de requête personnalisés-c) : Cookies de session pour accéder aux ressources protégées-U) : Chaînes UA personnalisées ou rotation basée sur fichier pour la discrétionPerformance et fiabilité :
-R) : Délais de requête configurables (millisecondes) pour éviter la détection-T) : Paramètres de délai d'attente personnalisés pour différentes conditions réseau-y) : Mécanisme de nouvelle tentative automatique avec backoff exponentiel pour les requêtes échouéesIntégration professionnelle :
-p) : Intégration complète de Burp Suite et proxys personnalisés (HTTP/HTTPS/SOCKS5)-k) : Contournement facultatif de la vérification des certificats pour les environnements de testOutils d'analyse principaux :
-d) : Décompacte le JavaScript minifié et obfusqué pour une analyse approfondie-m) : Extrait et analyse le code source original à partir des source maps-z) : Identifie et classe les techniques et modèles d'obfuscationAnalyse dynamique :
-e) : Analyse l'exécution dynamique de code (eval(), Function(), génération à l'exécution)Intelligence de code :
Utilisation professionnelle : Combinez les outils d'analyse avec la détection de sécurité pour une couverture maximale Exemple :
jshunter -u target.js -d -m -e -s -g(désobfuscation complète + analyse de sécurité)
Détection de sécurité principale :
-s) : Clés API, jetons d'accès, mots de passe et identifiants codés en dur-x) : Extraction, validation et inspection de la charge utile des jetons d'authentification-F) : Analyse de configuration, clés API et détection d'URL de base de donnéesAnalyse avancée :
-P) : Paramètres de formulaire cachés, variables et clés de configuration-PU) : Analyse avancée des paramètres avec contexte URL complet-g) : Détection de schémas, extraction de requêtes et découverte d'endpoints-B) : Modèles de contournement de sécurité et techniques d'évasionPortée et contexte :
-i) : Identification et classification des ressources privées/internes-L) : Extraction complète des URLs et cartographie des relationsFormats de sortie principaux :
-o) : Enregistrement des résultats complets vers des emplacements de fichiers personnalisés-j) : Format de données structuré pour l'automatisation et le traitement programmatique-C) : Format compatible tableur pour le reporting exécutif et l'analyseIntégration professionnelle :
-n) : Intégration directe avec Burp Suite Professional pour des tests immédiats-r) : Correspondance de modèles personnalisés pour un filtrage ciblé des résultats-v) : Sortie d'analyse détaillée avec informations de débogage et contexteGestion des résultats :
--found-only) : Masquage des résultats vides pour un reporting de sécurité ciblé-q) : Suppression de la bannière pour les scripts automatisés et l'intégration CI/CDgo install -v github.com/cc1a2b/jshunter/cmd/jshunter@latest
jshunter --help
### Compilation à partir des sources```bash
git clone https://github.com/cc1a2b/jshunter.git
cd jshunter
go build -o jshunter ./cmd/jshunter
jshunter -u "https://example.com/app.js"
jshunter -l urls.txt
jshunter -f app.js
### Analyse de sécurité complète```bash
# Find API keys, secrets, and credentials
jshunter -u "https://target.com/app.js" -s
# Full analysis with deobfuscation, GraphQL, and Firebase detection
jshunter -u "https://target.com/app.js" -d -s -g -F -x -L
# Professional security assessment with all tools
jshunter -u "https://target.com/app.js" -d -m -e -s -x -P -g -F -B -L
# Export comprehensive results for reporting
jshunter -l targets.txt -s -g -F -j -o security_findings.json
jshunter -u "https://example.com/app.js"
jshunter -l urls.txt
cat urls.txt | grep ".js" | jshunter
jshunter -u "https://example.com/app.js" -s -x -F
jshunter -u "https://target.com/app.js" -d -m -e -s -x -P -g -F -B -L
jshunter -u "https://target.com/bundle.js" -d -m -s -g -F
jshunter -l targets.txt -s -x -F -g -j -o security_findings.json
jshunter -l targets.txt -p 127.0.0.1:8080 -s -g -F -n -o burp_findings.txt
jshunter -l targets.txt -p socks5://127.0.0.1:9050 -s -x -F
jshunter -l urls.txt -R 2000 -H "Authorization: Bearer token" -s -x -F -g -q
jshunter -l urls.txt -ep -P -PU -L -w 2
jshunter -f obfuscated.js -d -z -e -s -v
---
## Référence des commandes
Obtenez l'aide complète à tout moment avec `jshunter --help````
Usage:
-u, --url URL Input a URL
-l, --list FILE.txt Input a file with URLs (.txt)
-f, --file FILE.js Path to JavaScript file
--har FILE Ingest a Chrome DevTools HAR archive
Basic Options:
-t, --threads INT Number of concurrent threads (default: 5)
-c, --cookies <cookies> Authentication cookies for protected resources
-p, --proxy host:port HTTP/SOCKS5 proxy (e.g., 127.0.0.1:8080 for Burp Suite)
-q, --quiet Suppress ASCII art output
--no-color Disable ANSI color (auto-off when not a TTY)
-o, --output FILENAME Output file path
-r, --regex <pattern> RegEx for filtering results
--update, --up Update the tool to latest version
-ep, --end-point Extract endpoints from JavaScript files
-k, --skip-tls Skip TLS certificate verification
-fo, --found-only Only show results when sensitive data is found
HTTP Configuration:
-H, --header "Key: Value" Custom HTTP headers (repeatable, including Auth)
-U, --user-agent UA Custom User-Agent string or file path
-R, --rate-limit MS Request rate limiting delay (milliseconds)
-T, --timeout SEC HTTP request timeout (seconds)
-y, --retry INT Retry attempts for failed requests (default: 2)
--per-host INT Per-host outbound concurrency cap (default: 4)
--max-bytes N Cap response body read in bytes (default: 32MiB)
--allow-internal Permit localhost / RFC1918 / link-local targets
--cache-dir DIR Persist responses on disk; revalidate via ETag
JavaScript Analysis:
-d, --deobfuscate Deobfuscate minified and obfuscated JavaScript
-m, --sourcemap Fetch and parse source maps + sourcesContent[]
-e, --eval Analyze dynamic code execution (eval, Function)
-z, --obfs-detect Detect code obfuscation patterns and techniques
--inline-html Scan inline <script> tags + SRI/CSP in HTML responses
--csp-origins Emit CSP-allowed origins as candidate endpoints
Security Analysis:
-s, --secrets Detect API keys, tokens, and credentials
-x, --tokens Extract JWT and authentication tokens
-P, --params Discover hidden parameters and variables
-PU, --param-urls Advanced parameter extraction with URL context
-i, --internal Filter for internal/private endpoints
-g, --graphql Analyze GraphQL endpoints and queries
-B, --bypass Detect WAF bypass patterns and techniques
-F, --firebase Analyze Firebase configurations and keys
-L, --links Extract and analyze all embedded links
Detection Tuning:
-mc, --min-confidence FLOAT Minimum confidence (0.0-1.0) for a finding (default: 0.50)
-sc, --show-confidence Print [conf=X.XX] alongside each finding
--no-fp-filter Disable the false-positive filter (debug)
--ignore-file FILE Permanent suppressions (.jshunterignore)
--diff PREVIOUS.json Report only NEW findings vs previous JSON envelope
--rules-file FILE.json Load an external JSON rule pack
--only-rules id,glob Run only matching rules (supports * glob)
--disable-rule id,glob Disable matching rules (supports * glob)
Verification:
--verify Probe findings against provider read-only endpoints
--verify-timeout SEC Timeout per verification probe (default: 10)
--verify-workers INT Concurrent verifier worker pool (default: 8)
Scope & Discovery:
-w, --crawl DEPTH Recursive JavaScript discovery depth (default: 1)
-D, --domain DOMAIN Limit analysis to specific domain
-E, --ext Filter by JavaScript file extensions
--robots Fetch /robots.txt for each input host and exit
Output Formats:
-j, --json Structured JSON output (schema_version 2)
--ndjson Newline-delimited JSON (jq / SIEM streaming)
--sarif SARIF 2.1.0 (GitHub code-scanning compatible)
-C, --csv CSV format for spreadsheet analysis
-v, --verbose Detailed analysis and debug output
-n, --burp Burp Suite compatible export format
--stats Per-stage counters on stderr at end of run
Registry:
--list-rules Print the rule registry as a table and exit
--explain RULE_ID Print full rule details and exit
--self-test Run rule registry against built-in TP/FP fixtures
-h, --help Display this help message
Chaque correspondance de classe secret est notée dans [0.0, 1.0]. Le score part d'un a priori propre à chaque règle et est ajusté par :
Le --min-confidence 0.50 par défaut filtre la longue traîne des correspondances basées uniquement sur les motifs. Utilisez --min-confidence 0.80 pour un tri haute précision, --no-fp-filter pour une sortie brute et non filtrée.
Un validateur est un contrôle de cohérence propre à chaque règle qui s'exécute après la correspondance regex.
C'est la défense la plus solide contre les faux positifs : une chaîne aléatoire qui correspond
par hasard à la forme doit encore survivre à une somme de contrôle, à un décodage structurel ou à une
preuve de longueur/jeu de caractères avant d'être signalée (et réussir ajoute +0.10).
Le registre organisé fournit plus de 85 détecteurs couvrant le cloud et les gestionnaires de secrets
(AWS, Azure, GCP/PKCS#8, HashiCorp Vault, Terraform, Fly.io, Tailscale), le contrôle de version
et CI/CD (GitHub, GitLab, Docker Hub, Atlassian, Sentry, CircleCI,
Buildkite), les paiements (Stripe, Square, Braintree, Plaid), les fournisseurs IA/LLM
(OpenAI, Anthropic, Groq, Perplexity, Replicate, OpenRouter, Fireworks,
HuggingFace), la messagerie (Slack, Discord, Telegram, Twilio, Intercom, SendGrid,
Mailgun), SaaS et bases de données (Notion, Airtable, Figma, Postman, Databricks,
PlanetScale, Grafana, New Relic, Dropbox, RubyGems, Supabase), et le matériel PKI
(clés privées RSA/EC/DSA/OpenSSH/PGP/PKCS#8, .ppk PuTTY, URI de connexion
de bases de données). Exécutez jshunter --list-rules pour le tableau faisant autorité et
jshunter --explain <rule_id> pour le motif, le validateur et les
fixtures d'une règle donnée. Les formes « hash nu » sans préfixe ne sont fournies que lorsqu'un
validateur structurel ou une porte de contexte obligatoire peut les maintenir sans faux positifs.
jshunter -l targets.txt -d -m -e -z -s -x -P -PU -g -F -B -L -j -v -o complete_assessment.json
jshunter -l targets.txt -d -m -z -e -s -g -F --found-only -o deobfuscated_findings.json
jshunter -l targets.txt -R 2000 -U "Mozilla/5.0..." -H "X-Forwarded-For: 1.1.1.1" -s -x -F -q
jshunter -l targets.txt -p 127.0.0.1:8080 -s -x -g -F -B -n -o burp_comprehensive.txt
jshunter -l targets.txt -ep -P -PU -L -w 3 -i -j -o endpoint_discovery.json
### Intégration Entreprise & Automatisation```bash
# CI/CD Security Pipeline Integration
jshunter -f dist/bundle.js -d -s -x -F -j --found-only > security-scan.json
# Comprehensive automated security reporting
jshunter -l production-js.txt -d -s -x -P -g -F -B -C -o enterprise-security-report.csv
# Source map analysis for development security
jshunter -f app.js -m -s -x -F -v -o sourcemap-analysis.json
# Firebase and GraphQL focused assessment
jshunter -l targets.txt -g -F -L -j -o api_security_findings.json
Nous accueillons les contributions ! Voici comment vous pouvez aider :
git clone https://github.com/cc1a2b/jshunter.git cd jshunter go mod tidy go build -o jshunter ./cmd/jshunter
---
## Licence
JSHunter est publié sous la **licence MIT**. Voir [LICENSE](https://github.com/cc1a2b/jshunter/blob/master/LICENSE) pour plus de détails.```
Copyright (c) 2024-2026 Hussain Alsharman
Licensed under MIT License - free for commercial and personal use
Si JSHunter vous aide dans vos recherches en sécurité ou votre travail professionnel :
Mettez une étoile à ce dépôt • Suivez @cc1a2b • Partagez avec d'autres
JSHunter - Analyse professionnelle de la sécurité JavaScript
Développé par cc1a2b pour la communauté de la sécurité
-tFonctionnalités pour professionnels de la sécurité : Conçu pour les tests d'intrusion et les évaluations de sécurité Exemple :
jshunter -l targets.txt -p 127.0.0.1:8080 -H "Authorization: Bearer token" -R 1000
Astuce professionnelle : Combinez les indicateurs pour une analyse complète (par exemple,
jshunter -u target.js -s -x -F -g)
Flux de reporting : Utilisez JSON pour l'automatisation, CSV pour les rapports de gestion, l'export Burp pour des tests immédiats Exemple :
jshunter -l targets.txt -s -j -o security-findings.json(rapport de sécurité structuré)
| Signal | Effet |
|---|
| Le chemin source ressemble à un bundle vendor/chunk | −0.15 |
| Le contexte environnant contient un libellé de fixture | −0.30 |
| Validateur spécifique au fournisseur réussi | +0.10 |
| Mot-clé de contexte requis présent (règle générique) | +0.05 |
| Entropie de Shannon ≥ 4.5 | +0.05 |
| Diversité de classes de caractères ≥ 3 | +0.05 |
| Correspondance dans la denylist de bruit vendor | exclu avant notation |
| Longueur / entropie sous le plancher de la règle | exclu avant notation |
La ligne est un marqueur //# sourceMappingURL= | exclu avant notation |
| Fournisseur | Validateur |
|---|
| AWS | Famille de préfixe (AKIA/ASIA/A3T…) + corps base32 de 16 caractères |
| Stripe | Famille de clé (sk/rk/pk_live/test_) et corps base62 du webhook whsec_ |
| GitHub | Somme de contrôle CRC32 base62 vérifiée par rapport au corps aléatoire |
| OpenAI | Préfixe de famille + fenêtre de longueur (sk-/sk-proj-/sk-svcacct-) |
| Slack | Forme segmentée par traits d'union (segments internes numériques, fin alphanumérique) |
| JWT | En-tête JSON décodé en base64url avec champ alg + charge utile JSON |
| Twilio | Corps hexadécimal de 32 caractères + seuil d'entropie |
| Azure | Le corps base64 AccountKey= se décode en exactement 64 octets ; AD …<digit>Q~… |
| Telegram | Division <id de 8 à 10 chiffres>:AA…, secret base64url + seuil d'entropie |
| Intercom | Le base64 se décode en une charge utile préfixée tok: |
| Sentry | La charge utile du jeton org sntrys_ se décode en base64 en JSON portant une revendication url |
| Terraform | Structure à trois segments <14>.atlasv1.<60-70> |
| Square | Famille sq0atp-/sq0csp-/sq0idp- + longueur exacte du corps + entropie |
| Braintree | Structure à quatre segments access_token$<env>$<16 base36>$<32 hex> |
| Airtable | Division en deux segments pat<14>.<64 hex> |
| Postman | Longueurs de segments PMAK-<24 hex>-<34 hex> + entropie |
| Base de données | Mot de passe d'URI de connexion rejeté si modélisé/défaut/faible entropie |