Desofuscador de JavaScript

Pega un bloque de JavaScript ofuscado, cadenas codificadas en hex, nombres de variables de una sola letra, un bucle decodificador en la parte superior, y la herramienta descompone las capas: desescapa cadenas, in-linea el arreglo de búsqueda, renombra variables a marcadores legibles, aplana envolturas triviales y embellece el resultado. Útil para analizar fragmentos sospechosos que obtuviste de una página o un enlace de pastebin pegado.

Cómo desofuscar JavaScript

  1. 1

    Pega la fuente ofuscada

    Minificada, empaquetada o salida de herramientas estilo `javascript-obfuscator.io`.

  2. 2

    Deja que el analizador lo procese

    Los arreglos de cadenas son decodificados, las secuencias numéricas son evaluadas y las ramas de código muerto son eliminadas.

  3. 3

    Aplica renombrado

    Las variables de una sola letra `a`/`b`/`c` son renombradas a `var1`, `var2`, etc. marcadores legibles, no necesariamente nombres significativos.

  4. 4

    Embellecer

    Indentar, agregar nuevas líneas y producir código que realmente puedas leer y razonar.

Técnicas que el desofuscador revierte

Ofuscación Reversión
Literales de cadena hex-escapados Decodificar \x48\x69 de vuelta a "Hi"
Identificadores unicode-escapados \u006E\u0061\u006D\u0065 -> name
Arreglo de cadenas + función decodificadora In-linear el arreglo, llamar al decodificador en tiempo de análisis
Plegado de constantes numéricas 0x1F3 + 5 -> 504
Envoltorios eval(...) Elevar el código interno al nivel superior
Aplanamiento de flujo de control (máquina de estados) Detectar el switch-case, reconstruir el flujo
Código muerto / ternarios inútiles Eliminar ramas que nunca se ejecutan
Nombres estilo _0x1a2b3c() Reemplazar con var1, var2 incrementales

Límites: lo que la herramienta no hace

  • Recuperar nombres de variables originales. Una vez que userEmail es renombrado a a, ninguna herramienta puede adivinarlo de nuevo. Obtienes una estructura legible, no la semántica original.
  • Desempaquetar virtualizadores personalizados. Ofuscadores comerciales pesados (JScrambler, niveles empresariales de Obfuscator.io) introducen una VM personalizada que interpreta bytecode. Derrotar eso requiere ingeniería inversa manual.
  • Ejecutar código arbitrario. El desofuscador evalúa expresiones puras de manera estática. No obtendrá recursos remotos, creará elementos DOM ni se comunicará con la red.

Casos de uso típicos

  • Investigación de seguridad: descomponer un script sospechoso que llegó en un correo electrónico o fue servido por un CDN comprometido.
  • Arqueología de código: recuperar código legado donde el único artefacto sobreviviente es un paquete minificado.
  • Aprendizaje: entender lo que una ofuscación a nivel de tutorial realmente hace bajo el capó.

Seguridad y ética

Nunca ejecutes JavaScript no confiable en una pestaña del navegador conectada a algo importante, el código puede leer cookies, llamar a APIs internas y exfiltrar estado. El desofuscador en sí opera sobre la fuente como texto; no ejecuta el código que pegas.

Solo desofusca código que estás autorizado a analizar. La ingeniería inversa de software con licencia puede estar restringida en tu jurisdicción.

Preguntas frecuentes

No. Una vez que el ofuscador renombra userEmail a _0x1a2b3c, el nombre original se pierde. El desofuscador te da marcadores legibles (var1, var2) y una estructura correcta, pero no los nombres semánticos originales.

No. Analiza el código como un AST y aplica transformaciones estáticas. Las expresiones puras (como 0x1F3 + 5) son plegadas, pero nada toca la red, cookies o el DOM.

Sí, pero la salida del empaquetador está minificada en lugar de deliberadamente ofuscada, por lo que el resultado es solo código embellecido con envolturas de módulo restauradas. Los mapas de origen, si están disponibles por separado, te dan nombres mucho mejores.

Las herramientas comerciales pesadas (JScrambler empresarial, VMs personalizadas) introducen un intérprete de bytecode que el análisis estático no puede desenredar. La herramienta obtendrá la capa superficial, pero la lógica central permanece opaca sin reversión manual.

Herramientas relacionadas

Herramienta disponible en otros idiomas