Cookies Este sitio guarda solo lo imprescindible para funcionar. Hoy no usa analítica ni publicidad, y nada de lo que hay aquí te sigue a otras webs. Leer la política de privacidad

Elegir qué permitir
+92 312 8299940Presupuesto gratis
Herramienta gratis, nada que instalar

Ofuscador JavaScript
Renombrado, codificado y aún funcionando

Este ofuscador JavaScript reescribe un programa para que los nombres dejen de significar algo y la forma del código deje de apuntar a la lógica. Marca las transformaciones, deja el prefijo de nombre que prefieras, y el ofuscador comprueba que la salida aún analiza. Nada de lo que pegas sale del navegador.

  • GratisPrecio
  • 4Transformaciones
  • NuncaEjecuta código
  • NingunaSubidas

Ofuscador JavaScript

Pega tu código o suelta tus archivos — sin subir nada

o pulsa Ctrl + Enter

Resultado ofuscado

 
Original
—
Ofuscado
—
Cambio de tamaño
—
Nombres renombrados
—
Cadenas ocultas
—
Tardó
—

Listo. Pega tu JavaScript y pulsa Ofuscar.

Tu navegador lee y reescribe tu código aquí, en esta pestaña. No subimos nada, no guardamos nada y no registramos nada.
La versión corta

Qué hace un ofuscador JavaScript

El código fuente entrega dos cosas a la vez: qué hace un programa y cómo lo hace. Por eso un lector que recibe un módulo obtiene el razonamiento gratis.

Un ofuscador separa las dos. Este ofuscador JavaScript conserva el comportamiento y quita los nombres, las cadenas literales y los números simples.

Además, trabaja desde el árbol de sintaxis, no desde el texto. Como el árbol ya sabe qué nombre es una variable y cuál es una propiedad, el renombrador puede trabajar por ámbito en vez de globalmente.

Cuatro transformaciones viven tras un solo editor, y cada una es una casilla. Así que puedes renombrar un programa solo, o ejecutarlas todas para una lectura mucho más dura.

Nada se ejecuta y nada se sube. Como el lector solo analiza y reescribe el módulo, un programa bajo una cláusula de confidencialidad no se diferencia de uno público aquí.

Cómo un ofuscador JavaScript reescribe un script

El primer paso construye el árbol de sintaxis, igual que un validador. El reglamento es ECMA-262, así que el árbol coincide con el que construiría un motor.

Esquema de una función a través de cuatro pasos de ofuscación, de código legible a renombrado y codificado, mismo comportamiento
Cuatro pasos, un árbol reescrito cada vez, y un comportamiento que no se mueve.

Desde el árbol, el renombrador recorre cada ámbito por turno. Un parámetro, un local, un nombre de función y un nombre de clase reciben cada uno un nombre opaco nuevo, de un rango que no puede chocar con un nombre ya en uso.

Por lo tanto, dos cosas se dejan a propósito. Una propiedad de un objeto no es una variable, así que obj.userName conserva su grafía. Un nombre que llega más allá del módulo, como un nombre exportado o un global que la página llama, también se conserva, salvo que actives el renombrado de nivel superior.

Cada paso produce su propio árbol en vez de editar el texto. El escritor solo corre al final, así que un programa que no analiza nunca queda reescrito a medias.

El último paso vuelve a analizar la salida. Como el ofuscador relee su propio resultado antes de mostrarlo, un paso que produjo código inválido te devuelve el archivo original.

Las cuatro transformaciones, en el orden en que corren

El renombrado corre primero. Parámetros, locales, nombres de función y nombres de clase se vuelven nombres opacos cortos como _0x1a2b, con ámbito para que dos funciones usen el mismo nombre con seguridad. Los nombres exportados y de nivel superior se conservan salvo que también los pidas.

El paso de cadenas corre después. Cada cadena literal pasa a un array arriba, y cada uso se vuelve una búsqueda por índice mediante un pequeño accesor que rota el orden. Como las cadenas ya no están junto al código que las lee, buscar un mensaje deja de encontrar nada útil.

La codificación de números sigue. Cada entero simple se imprime en hexadecimal, así 1000 se vuelve 0x3e8. El valor no cambia; los dígitos solo dejan de leerse como una cifra familiar.

Compactar va al final. Todo el módulo pasa por el minificador, que quita los comentarios y el espaciado, así el resultado es un bloque denso en vez de líneas ordenadas.

Qué no hace la ofuscación

Así, no oculta tu código de un lector decidido. Cada transformación aquí es reversible en principio, y existe una herramienta para la mayoría.

La salida ofuscada junto a la fuente, con los nombres, cadenas y números cambiados y el resultado aún analizando
Los nombres, las cadenas y los números se reescriben; el comportamiento y el valor devuelto siguen iguales.

No mantiene un secreto a salvo. Una clave compilada en un script del navegador es una clave que el navegador tiene, y cualquiera que cargue la página puede leerla. Como la ofuscación solo eleva el esfuerzo, una clave de API va en un servidor.

Además, no impide la copia. Alguien aún puede guardar un archivo reescrito, servirlo y ejecutarlo. La licencia y el contrato son lo que aborda eso, y ninguno es un paso de compilación.

Por eso, no hace un módulo más rápido, y puede hacerlo más lento. Como las búsquedas de cadenas cuestan algo de trabajo en tiempo de ejecución, el canje es legibilidad por unos milisegundos.

Tampoco protege un script en el servidor. Cualquiera con acceso a la máquina tiene el archivo original, reciba lo que reciba el navegador.

El prefijo de nombre y mantener válida la salida

El prefijo de nombre es el único ajuste más allá de las casillas, y existe para evitar un choque. Un generador que emite un ayudante llamado a o b puede chocar con un global de la página, así que un prefijo corto y distintivo como _0x quita el riesgo.

Ajustes del ofuscador con cuatro casillas de transformación y un prefijo de nombre, el tamaño de salida y el recuento de renombrados debajo
Cuatro casillas y un prefijo, con una fila de tamaño que dice lo que costó la transformación.

El renombrado de nivel superior queda desactivado por defecto. El código pegado suele ser un módulo clásico, donde una función de nivel superior se vuelve una propiedad de window que otro archivo llama por nombre, y renombrarla ahí rompería a quien el ofuscador no puede ver.

Por eso, dentro de un módulo o una IIFE nada de fuera puede alcanzar esos nombres, así que activar el renombrado de nivel superior ahí es seguro y oculta mucho más.

Cada ejecución termina con un análisis de su propia salida. Como el ofuscador relee su propio resultado antes de mostrarlo, informa de una transformación que produjo código inválido en vez de entregarlo.

Guía en vídeo

Mira el ofuscador JavaScript en acción

Un vídeo corto recorre cada paso. Luego elige tu idioma abajo y activa los subtítulos si quieres.

Paso a paso

Cómo usar el ofuscador JavaScript

Cuatro pasos, y ninguno necesita una cuenta.

  • 1

    Pega el módulo

    Pega un archivo entero o un módulo. Como el lector construye un árbol de sintaxis, tienes que compilar antes una extensión como JSX o una anotación de tipos.

  • 2

    Marca las transformaciones

    Luego elige qué pasos corren. Renombrar locales y ocultar cadenas son el par seguro; el renombrado de nivel superior es el que dejar apagado cuando otro archivo llama a tus nombres.

  • 3

    Pon el prefijo de nombre

    Luego da a los nombres generados un prefijo corto y distintivo como _0x. Así un global de la página no puede chocar con un ayudante generado.

  • 4

    Revisa el tamaño y prueba

    Por último, lee la fila de tamaño y copia la salida. Después, ejecútala en una página real, porque solo el programa haciendo su trabajo demuestra que un renombrado es seguro.

Por qué esta página

Por qué usar este ofuscador JavaScript

Cinco razones, y cada una es sobre la lectura más que sobre el candado.

  • El renombrado funciona por ámbito

    De hecho, como el renombrador trabaja desde el árbol de sintaxis, dos funciones pueden usar el mismo nombre corto sin chocar. Así que un archivo grande sale pequeño y correcto en vez de roto.

  • Cada paso es una elección

    Cuatro casillas en vez de un solo botón. Por tanto puedes renombrar un módulo solo, que es la transformación de menos riesgo y la mayor parte del beneficio.

  • El ofuscador vuelve a analizar su propia salida

    Así, como el último paso relee su propio resultado, informa de una transformación que produjo código inválido. Así que un build roto se detecta aquí y no en la consola del navegador.

  • Nada se sube

    Toda la reescritura corre en esta pestaña. Así que un archivo de cliente bajo una cláusula de confidencialidad no se diferencia de uno público aquí.

  • La fila de tamaño es honesta

    La ofuscación suele hacer un programa más grande, y la fila dice cuánto. Así que el canje es visible antes de que te comprometas con él.

Reglas prácticas

Hábitos que mantienen el código ofuscado funcionando

Seis hábitos que mantienen un archivo reescrito funcionando en producción.

  • Guarda el archivo legible en control de versiones Así, así el build corre en una sola dirección. Como nadie debería editar un archivo ofuscado a mano, un repositorio que solo guarda la salida ha perdido su fuente.
  • Nunca ofusques una librería que publicas Además, un consumidor alcanza tus exportaciones por nombre, así que un renombrado rompe a cada quien llama. De ahí que un paquete publicado conserve sus nombres reales y sus tipos.
  • Deja el renombrado de nivel superior desactivado por defecto Renombrar un nombre de nivel superior rompe cualquier otro archivo que lo llame, y un módulo clásico pone sus funciones en window donde quien llama las alcanza. Como eso solo aparece en tiempo de ejecución, déjalo opcional y resérvalo para módulos.
  • Mantén el source map fuera de producción Un source map es un deshacer perfecto, y publicar uno junto al programa cancela todo el trabajo. Así que guarda el mapa para informar de fallos y sírvelo desde ningún sitio público.
  • Prueba después de ofuscar, no antes Por tanto, solo el módulo haciendo lo correcto demuestra que un renombrado es seguro. Por tanto la prueba va sobre la salida, no sobre la entrada.
  • Di qué es en las notas del build Un futuro responsable que se topa con un archivo ofuscado no debería adivinar. Así que una línea en el readme sobre qué pasos corren ahorra una tarde.
Cuidado aquí

Seis formas en que la ofuscación rompe una compilación

Cada una de estas pasa un análisis y falla en producción.

  • Tratarla como seguridad

    Cuidado aquí. Cada transformación es reversible, y un lector decidido recuperará la lógica. Así que la ofuscación eleva el coste de leer, y no protege nada por sí sola.

  • Renombrar un nombre que otro lee

    Un global que la página llama, un callback que un host pasa, o un nombre en una plantilla del servidor. Como el mundo exterior sigue usando la grafía antigua, la llamada cae en nada.

  • Renombrar nombres que otro archivo llama

    Por tanto, una función de nivel superior que otro archivo llama por nombre deja de existir con ese nombre. Así que la llamada falla en tiempo de ejecución, mucho después de que el renombrado pareciera bien.

  • Dejar un source map en el servidor

    Una petición al mapa deshace toda la compilación. Como un depurador lee el mapa, es un deshacer completo y exacto.

  • Confiar en que oculte un secreto

    Una clave o un token en el módulo sigue en el programa; el navegador tiene que leerlo para usarlo. De ahí que la ofuscación eleve el esfuerzo de encontrarlo y nada más, así que el secreto va en un servidor.

  • Ofuscar en vez de minificar

    No son una elección entre mejor y peor, porque apuntan a cosas distintas. Ejecuta el minificador para los bytes y el ofuscador para el esfuerzo de lectura, en ese orden.

Preguntas

Preguntas sobre el ofuscador JavaScript

¿Este ofuscador JavaScript es gratis?

Sí. No hay cuenta, ni límite, ni plan de pago. Así que ofuscas tantos scripts como quieras.

¿La ofuscación hace que mi código sea seguro?

No, y ninguna herramienta puede. Eleva el esfuerzo de leer un módulo y no oculta nada a un lector decidido. Un secreto va en un servidor, nunca en un programa del navegador.

¿Qué cambia en realidad?

Cuatro cosas como mucho: en qué se convierten los nombres, dónde viven las cadenas, cómo se imprimen los números y si se quita el espaciado. El comportamiento queda igual que estaba.

¿Ejecuta mi código?

Nunca. El ofuscador analiza y reescribe el módulo, y no llama a ninguna función. Así que un fragmento desconocido no puede actuar mientras lo tienes abierto.

¿El resultado seguirá funcionando?

Analiza, y el último paso lo demuestra. El comportamiento es otra cosa, así que pasa la salida por tus propias pruebas antes de publicarla.

¿Debo renombrar los nombres de nivel superior?

Solo cuando nada fuera del script los llame. Dentro de un módulo o una IIFE es seguro; un script clásico cuyas funciones están en window no lo es, porque otro archivo las llama por su nombre.

¿Hace el script más pequeño?

Normalmente no; mover las cadenas a un array y deletrear los nombres puede añadir bytes. La fila de tamaño informa del cambio de todos modos, y compactar recupera algo.

¿Qué hace codificar los números en hexadecimal?

Imprime cada entero normal en hexadecimal, así 1000 se muestra como 0x3e8. El valor es idéntico; los dígitos solo dejan de leerse como una cifra familiar a primera vista.

¿Por qué hay un campo de prefijo de nombre?

Porque un ayudante generado llamado a puede chocar con un global de la página. Así que un prefijo corto y distintivo quita ese riesgo.

¿Puedo deshacer la ofuscación?

Desde aquí no. Un lector puede ordenar a mano un archivo renombrado, y puede plegar un array de cadenas, pero ninguna tarea es automática. Por eso frena al lector.

¿Se sube mi script a algún sitio?

No. Toda la reescritura corre en esta pestaña del navegador. Así que un archivo de cliente bajo una cláusula de confidencialidad se queda en tu máquina.

¿Puedo pegar un fragmento en vez de un script entero?

Sí. Una sola función funciona, y el renombrado se queda dentro de ella. Así que puedes probar un fragmento antes de comprometerte con el script entero.

¿Admite JSX o TypeScript?

No directamente, porque ambos añaden sintaxis sobre JavaScript. Así que ejecuta primero el compilador y ofusca lo que produce.

¿Necesito un source map?

Para informar de fallos, sí, y debe quedar privado. Como un mapa servido es un deshacer perfecto, guárdalo en tu propio rastreador de errores y en ningún sitio público.

¿Es lo mismo que minificar?

No. Un minificador quita el espacio en blanco y acorta los nombres locales dentro de un script. Un ofuscador va más allá y reconfigura el código, y cuesta más bytes.

¿En qué orden debo ejecutarlos?

Minificar primero, luego ofuscar, luego validar. Como el validador nombra las líneas, revisa el archivo legible antes de que ninguna transformación lo toque.

¿Puede ofuscar una carpeta entera?

En esta página no. Un script a la vez es el trato aquí, y una herramienta de compilación es el sitio adecuado para una carpeta.

¿Funciona en el móvil?

Sí. Los paneles se apilan y los ajustes se reparten en filas. Así que es posible una prueba rápida fuera del escritorio, aunque un archivo largo es más fácil con un teclado.

¿Puedo descargar el resultado?

Sí. La descarga guarda la salida como un archivo JavaScript, así que lo pones en un paso de compilación sin copiar y pegar.

¿Necesito una cuenta o una extensión?

No. No hay registro, ni complemento, ni extensión que añadir. Así que cierras la pestaña cuando la compilación termina.

Sigue

Herramientas que acompañan a esta

Cuatro páginas a las que suele llevar el mismo trabajo.

  • Minificador de JavaScript

    Ejecuta esta primero. Como un minificador quita bytes y deja los nombres en paz, es la mitad más barata del mismo paso de compilación.

    Abrir herramienta →
  • Validador de JavaScript

    Luego comprueba que la entrada y la salida analizan. Como un error de sintaxis frena todo el script, esa comprobación va antes de que nada se publique.

    Abrir herramienta →
  • Embellecedor de código

    Cuando te llega un archivo compactado o renombrado de otro sitio, esta página lo vuelve a maquetar. Como una sola línea densa cuesta de seguir a ojo, reindentar es el primer paso.

    Abrir herramienta →
  • Minificador de CSS

    La mitad de la hoja de estilos del mismo build. Como un navegador descarga cada comentario y salto de línea, la hoja merece el mismo trato.

    Abrir herramienta →

Eleva el esfuerzo de leer tu script

Marca las transformaciones y pega el script. Nada se ejecuta ni se sube, y el ofuscador comprueba cada paso antes de darte el resultado. Trátalo como un freno, no como un candado, y hace bien su trabajo.