¿Qué es JSFuck?

JSFuck es un estilo de programación esotérico basado en JavaScript, en el que el código se escribe utilizando únicamente seis caracteres: [ ] ( ) ! +. Fue creado originalmente por Martin Kleppe como un desafío para demostrar que es posible realizar cualquier operación lógica en la web sin necesidad de letras o números estándar.

¿Cómo funciona?

Su secreto reside en la coerción de tipos de JavaScript, es decir, la forma en que el lenguaje intenta convertir datos de un tipo a otro automáticamente para que una operación funcione.

Los pilares de la conversión:

  • ![] → Se convierte en false (un array vacío es "truthy", su negación es falso).
  • !![] → Se convierte en true.
  • +[] → Se convierte en el número 0.
  • +!+[] → Se convierte en el número 1.
  • (![]+[]) → Se convierte en el string "false" (falso + string vacío).

Combinando estos elementos, el sistema puede extraer letras individuales de los strings (como la "a" de "false") y reconstruir cualquier palabra o comando ejecutable.

Ejemplos Reales

Para obtener el número 2 en JSFuck, el código sumaría dos veces el valor "1":

+!+[] + +!+[]

Como ejemplo de la complejidad que puede alcanzar, este es el código necesario para ejecutar un simple alert(1):

(![]+[])[+[[+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]+(!![]+[])[+[[+[]]]]+(![]+[][(![]+[])[+[[+[]]]]+([![]]+[][[]])[+[[+!+[]]]+[[+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]])[+[[!+[]+!+[]]]+[[+[]]]]+[+!+[]]+(!![]+[][(![]+[])[+[[+[]]]]+([![]]+[][[]])[+[[+!+[]]]+[[+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]])[+[[!+[]+!+[]]]+[[+[]]]]

Datos Interesantes

  • Completitud de Turing: A pesar de usar solo 6 caracteres, JSFuck es funcionalmente equivalente a JavaScript estándar.
  • Uso en Seguridad: Se ha utilizado históricamente para ofuscar código y evadir filtros de seguridad básicos que buscan palabras clave.
  • Crecimiento exponencial: El tamaño del código aumenta drásticamente; un pequeño script puede convertirse en miles de caracteres.