¿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.
