Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
jsc_deobfuscator — Kit de desofuscación estática para bytecode de JavaScript V8 compilado, centrado en cargas útiles de JSCeal. Proporciona filtros basados en patrones, aplanamiento inverso del flujo de control, reconstrucción de cadenas y renombrado opcional de funciones asistido por LLM para el análisis. | Kitploit
Herramientas/GitHubGitHub/hasherezade/jsc_deobfuscator
Análisis EstáticoIngeniería InversaAnálisis de MalwareAnálisis de BinariosAprendizaje y Educación
GitHubhasherezade/jsc_deobfuscator

jsc_deobfuscator

Ver Repositorio

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Sitio web
625121hace 20 díasRevisado por Kitploit

Acerca de

Kit de desofuscación estática para bytecode de JavaScript V8 compilado, centrado en cargas útiles de JSCeal. Proporciona filtros basados en patrones, aplanamiento inverso del flujo de control, reconstrucción de cadenas y renombrado opcional de funciones asistido por LLM para el análisis.

Compartir

JSC Deobfuscator

Esta herramienta está dedicada a desofuscar estáticamente el bytecode de JavaScript V8 compilado que fue protegido con javascript-obfuscator.

Opera sobre el pseudocódigo producido por View8, en lugar de sobre el código fuente JavaScript original. El proyecto fue desarrollado y probado con payloads de JSCeal.

Los filtros están basados en patrones y están pensados principalmente como un kit de herramientas de investigación y una implementación de referencia. La herramienta no es un desofuscador de JavaScript de propósito general, no reconstruye el código fuente original y no produce JavaScript ejecutable. Su salida sigue siendo pseudocódigo de View8 destinado a inspección estática, búsqueda, comparación y exportación de árboles de funciones.

📖 Leer Wiki

Notas de seguridad

  • Los archivos serializados de View8 usan pickle de Python. Cargar un archivo .pkl malicioso o no confiable puede ejecutar código. Solo carga archivos serializados que hayas generado localmente con View8.
  • Los nombres de funciones generados por LLM son hipótesis. Verifica cada nombre importante contra el cuerpo de la función, las cadenas, las APIs, las rutas y el flujo de datos.

Requisitos

  • Python 3.10 o superior;
  • dependencias de Python de requirements.txt;
  • un desensamblador de V8 compatible con la versión exacta de V8 utilizada por el payload;
  • la utilidad de línea de comandos brotli para el flujo de trabajo de desempaquetado por lotes en Linux;
  • Node.js solo cuando se usa el respaldo de descompresión Brotli incluido;
  • una clave de API o un servidor de modelos local accesible al generar nuevos nombres asistidos por LLM. Aplicar un CSV de renombrado existente no requiere un backend de LLM.

Crea un entorno de Python aislado:

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install --upgrade pip
python3 -m pip install -r requirements.txt

El backend de OpenAI en deobf_ai.py requiere adicionalmente el paquete de Python de OpenAI:

python3 -m pip install openai

El backend de Anthropic usa la API HTTP a través de requests. El backend de Ollama espera un servidor de Ollama accesible.

Desofuscando JSCeal

1. Descomprime el payload

El payload original app.jsc de JSCeal está comprimido con Brotli. En Linux, se puede descomprimir con la utilidad brotli:

brotli -d app.jsc -o app.decompressed.jsc

El flujo de trabajo por lotes bajo scripts/ realiza este paso con scripts/unpack_all.sh.

En Windows, o cuando la utilidad de línea de comandos brotli no esté disponible, se puede usar el helper de Node.js incluido como respaldo. Solo descomprime la entrada y no la ejecuta:

node Utils/decompress-jsc.js app.jsc

Escribe:

app.jsc.decompressed.jsc

2. Desensambla la caché de código V8

La caché de código V8 es específica de la versión. Usa un desensamblador construido para la misma versión de V8 que el payload.

Las muestras de JSCeal utilizadas durante el desarrollo estaban basadas en V8 10.2.154.26. Los desensambladores predeterminados de una compilación de V8 no relacionada no funcionarán correctamente.

El árbol de fuentes contiene el código fuente del desensamblador y los parches de V8 requeridos bajo:

Utils/disasm/v8dasm.cpp
Utils/disasm/patches/

Un binario de Linux precompilado se distribuye con el lanzamiento del proyecto, mientras que el árbol de fuentes contiene el código fuente y los parches necesarios para recompilarlo. Hay una descripción detallada disponible en el Wiki del proyecto. Después de obtener o construir el v8dasm coincidente, ejecuta:

/path/to/v8dasm app.decompressed.jsc > app.jsc.disasm.txt

3. Descompila el desensamblado con View8

Alimenta el archivo desensamblado a view8.py y produce tanto la salida serializada para procesamiento posterior como el pseudocódigo legible por humanos:

mkdir -p decompiled

python3 View8/view8.py \
  --input_format disassembled \
  --inp app.jsc.disasm.txt \
  --normalize \
  --out decompiled/app.dec.txt \
  --export_format decompiled serialized

Esto produce:

decompiled/app.dec.txt
decompiled/app.dec.pkl

La opción --normalize hace que los identificadores de funciones generados sean reproducibles entre ejecuciones repetidas de desensamblado y descompilación.

4. Aplica todas las pasadas de desofuscación

Hay filtros separados para las capas individuales de ofuscación. Se pueden aplicar juntos a la salida serializada de View8 con deobf_all.py:

mkdir -p deobfuscated

python3 deobf_all.py \
  --inp decompiled/app.dec.pkl \
  --out deobfuscated/app.deobf.txt \
  --export_format decompiled serialized

El filtro de cadenas predeterminado es la variante 2, utilizada por la mayoría de los payloads de JSCeal analizados. Para seleccionar explícitamente el esquema de cadenas más simple, agrega:

--str_deobf 1

Las salidas típicas son:

deobfuscated/app.deobf.txt
deobfuscated/app.deobf.pkl
deobfuscated/app.deobf.txt.strings.txt
decompiled/app.dec.resolved_funcs.csv

El CSV de funciones resueltas es una caché específica de la muestra. Cuando está ausente, la pasada de cadenas recupera la configuración del decodificador requerida, escribe el CSV y continúa desofuscando cadenas en la misma ejecución. Las ejecuciones posteriores reutilizan la caché y normalmente son más rápidas.

No reutilices un CSV de funciones resueltas con un payload descompilado diferente.

5. Renombra funciones con un LLM

Después de que se hayan aplicado todos los filtros de desofuscación estructural, deobf_ai.py puede proponer nombres que describan el comportamiento de las funciones. Soporta backends de Anthropic, OpenAI y Ollama.

Pasa el modelo explícitamente para que las ejecuciones sean reproducibles.

Anthropic

export ANTHROPIC_API_KEY='...'

python3 deobf_ai.py \
  --inp deobfuscated/app.deobf.pkl \
  --out deobfuscated/app.renamed.txt \
  --llm_backend anthropic \
  --model '<model-id>' \
  --export_format decompiled serialized

OpenAI

export OPENAI_API_KEY='...'

python3 deobf_ai.py \
  --inp deobfuscated/app.deobf.pkl \
  --out deobfuscated/app.renamed.txt \
  --llm_backend openai \
  --model '<model-id>' \
  --export_format decompiled serialized

Ollama

python3 deobf_ai.py \
  --inp deobfuscated/app.deobf.pkl \
  --out deobfuscated/app.renamed.txt \
  --llm_backend ollama \
  --model '<local-model>' \
  --ollama_url http://localhost:11434 \
  --export_format decompiled serialized

En el modo predeterminado, el renombrador construye un árbol de llamadas directas comenzando desde la función de entrada y renombra solo las funciones alcanzadas a través de llamadas. Agrega --greedy para incluir todas las referencias de funciones visibles, incluyendo callbacks y handlers asignados.

Reanudar desde un CSV de renombrado

El CSV de dos columnas generado actúa como una caché y permite que una ejecución interrumpida continúe. Selecciona una caché existente explícitamente con --csv:

python3 deobf_ai.py \
  --inp deobfuscated/app.deobf.pkl \
  --out deobfuscated/app.renamed.txt \
  --csv deobfuscated/app.deobf.renamed_funcs.greedy.example-model.csv \
  --llm_backend anthropic \
  --model '<model-id>' \
  --greedy \
  --export_format decompiled serialized
Descargar herramienta