
jshunter es una herramienta de línea de comandos diseñada para analizar archivos JavaScript y extraer endpoints. Esta herramienta se especializa en identificar datos sensibles, como endpoints de API y posibles vulnerabilidades de seguridad, lo que la convierte en un recurso esencial para cazadores de bugs y investigadores de seguridad.
Herramienta profesional de análisis de seguridad de JavaScript
Descubrimiento completo de endpoints, detección de datos sensibles y análisis avanzado de código para profesionales de seguridad
JSHunter es una herramienta de línea de comandos integral para el análisis de seguridad de JavaScript y el descubrimiento de endpoints. Diseñada para profesionales de seguridad, pentesters y desarrolladores, ofrece capacidades de análisis de nivel empresarial con algoritmos de detección de alta precisión y funciones de generación de informes profesionales.
https://github.com/user-attachments/assets/5a5f60fa-f8dc-4aac-bd06-2e93779f9af4
JSHunter en acción — una captura real de terminal de la CLI (cada secreto mostrado son datos de prueba falsos)
Precisión de nivel empresarial con algoritmos de análisis avanzados
JSHunter analiza el JavaScript que escanea en lugar de solo aplicar coincidencia de patrones. Un escáner ECMAScript de una sola pasada clasifica cada byte de la respuesta como literal de cadena, literal de plantilla, comentario, literal de expresión regular o código, y las reglas de detección se evalúan contra esa clasificación.
Esto importa porque una regex no tiene idea de qué coincidió. Los mismos cuarenta caracteres base64 significan "credencial" dentro de un literal de cadena, "hash de chunk" dentro de un identificador minificado, y nada en absoluto cuando se extienden sobre la unión entre dos tokens adyacentes. Saber cuál es cuál reemplaza un montón de heurísticas de proximidad con una respuesta estructural:
key, el motor recupera el identificador o la clave de propiedad a la que el valor
está realmente vinculado — const stripeSecret = "..." se lee muy distinto de
{contentHash: "..."}, y una regla basada solo en la forma ahora requiere ese vínculo.role, SIDs de Twilio — se clasifican en lugar de reportarse como filtraciones.
--include-public los reporta de todos modos.Cada rechazo está condicionado a que el cuerpo sea confiablemente JavaScript o JSON.
En cualquier otra cosa — un archivo .env, prosa, HTML sin procesar — el motor aporta
evidencia pero nunca suprime, por lo que una entrada mal clasificada nunca puede ocultar un secreto.
--no-structural desactiva toda la capa y restaura el comportamiento de v0.7.
Los hallazgos llevan el razonamiento como un objeto evidence en --json, --ndjson y
la bolsa de propiedades SARIF:```json
"exposure": "secret",
"evidence": {
"region": "string-literal",
"role": "assignment",
"bound_to": "awsAccessKeyId",
"shape": "opaque-token",
"charset": "alphanumeric",
"signals": [
{"name": "in-literal", "delta": 0.04, "detail": "value is a complete string-literal"},
{"name": "credential-binding", "delta": 0.12, "detail": "bound to 'awsAccessKeyId'"}
]
}
`--stats` informa qué descartó cada etapa, por lo que el pipeline permanece auditable.
### Grafo de Chunks y Descubrimiento de Rutas
Una aplicación moderna entrega un bundle de entrada y varios cientos de chunks cargados de forma diferida cuyas URLs se ensamblan en tiempo de ejecución a partir de un manifiesto que el bundler incorpora. Nada enlaza hacia ellos, por lo que un crawler nunca los ve. `-G` recupera ese manifiesto e imprime la lista completa de assets y la tabla de rutas del cliente:```console
$ jshunter -u https://target.example/_next/static/chunks/main-a1b2c3.js -G
[CHUNKS] https://target.example/...: next runtime, 214 chunks, 37 routes
[CHUNK] https://target.example/... https://target.example/_next/static/chunks/settings.11aa22bb33cc.js
[ROUTE] https://target.example/... /admin/users/:id
Runtimes compatibles: webpack 4 y 5 (__webpack_require__.u, miniCssF,
jsonpScriptSrc), manifiestos de compilación de Next.js, Vite y Rollup (__vite__mapDeps,
__vitePreload), import() dinámico simple, y tablas de rutas de React Router,
Vue Router y Angular. La salida está separada por tabulaciones y deduplicada, por lo que se canaliza
directamente de vuelta como la lista de entrada de un escaneo posterior:```bash
jshunter -u https://target.example/main.js -G -q | awk -F'\t' '/^[CHUNK]/{print $3}' > chunks.txt
jshunter -l chunks.txt -s -j > findings.json
### Suite Profesional de HTTP y Redes
<details>
<summary><strong>Configuración de Red de Nivel Empresarial</strong></summary>