Hack It 3: Post-It v.1989. Así se titula la prueba. El nivel tiene enlazado un fichero .nsf , es decir, una aplicación Lotus Notes (ahora se llama IBM Notes). La extensión NSF es un acrónimo de Notes Storage Facility. En estos ficheros se guardan tanto el diseño de la aplicación como los datos asociados. Los datos son documentos (llamados «notes») que se muestran al abrir el fichero .nsf. Normalmente las aplicaciones se acceden a través de un servidor (Lotus Domino) pero, tal y como se demuestra en este nivel, también pueden abrirse en modo local. No me extenderé en hablar sobre el uso de Lotus IBM Notes, ya tuve en otra vida una experiencia con esta bestia y es por ello que conocía el modo «Diseño» de Notes. En este modo se pueden editar las acciones (normalmente programadas en LotusScript) que se ejecutarán al abrir o cerrar la base de datos, al abrir un documento, periódicamente…
Lo más importante es saber cómo pasar este nivel. Lo primero (y creedme, lo más complicado) es conseguir instalar el cliente Notes. Hay una versión llamada Open Social (IBM Notes 9.0), descargable en modo trial para Linux, MacOSX y Windows. La versión para Linux es nativa… pero me costó horrores instalarla (problemas de dependencias con libgnomeprint, libbonobo, libgnome-desktop… En fin, una vez instalada, abrimos la aplicación password.nsf que nos enlazan en este nivel y vemo que muestra una aplicación con 2 columnas: fecha y datos. Además, salta un mensaje indicando que «Your word for today is: una ristra de carácteres no imprimibles 🙂
Así que entramos en modo diseño desde Actions / View Options / Design… y aquí es donde nos damos cuenta de que la versión de Notes para Linux está sin terminar :-O No tiene modo «Design» (o yo no lo he encontrado). En fin… probemos con la versión Windows. Anda, en esta sí que está el modo diseño. Lo abrimos y vemos que el evento «postopen» desencadena la ejecución de un script que básicamente encadena los números de la segunda columna, tratándolos como carácteres ASCII y muestra el mensaje indicado. Ok, ¿pero de dónde salen estos números? Si examinamos el diseño de esa columna veremos un código como el siguiente:
@Modulo((Data*123);256);
REM{FIXME. 123 IS WRONG}; |
@Modulo((Data*123);256);
REM{FIXME. 123 IS WRONG};
Es decir, cada número es igual a calcular el módulo 256 de la fecha de su izquierda (interpretada como número), multiplicada por 123. El problema es que 123 no es el número correcto… ¿qué podemos hacer?
1) Apuntar los números de las fechas en crudo (dejando por ejemplo «Data» como valor a imprimir, sin módulos ni gaitas)
2) Una vez que tengamos la ristra de números en crudo, crear un programa que pruebe todas las opciones posibles de X tales que @Modulo((Data*X);256); nos arroje un mensaje con sentido.
Piece of cake! Y así llegamos al temido «Trollencio», level 4, que nos tuvo a casi todos los grupos epatados (que no empatados 😉