SPOILER! Si quieres resolverlo por tu cuenta, no sigas leyendo (Edit: recuerda que el HackIt! 2010 está disponible en la web de Marcan)
Tú lo has querido, estabas avisado…
Analizando el código fuente veremos la siguiente función Javascript (que he desplegado para que el código se vea mejor):
function check(){ ... if(pass.charCodeAt(0) == "102"){ if(pass.charCodeAt(1) == "52"){ if(pass.charCodeAt(6) == "115"){ if(pass.charCodeAt(3) == "49"){ if(pass.charCodeAt(8) == "109"){ if(pass.charCodeAt(5) == "49"){ pass2 = pass.replace("i","1").replace("a","4").replace("o","0"); if(pass.charCodeAt(2) == "99"){ if(pass.charCodeAt(7) == "49"){ if(pass.charCodeAt(4) == "108"){ if(pass.charCodeAt(9) == "111"){ Login(); |
Es decir, se comprueba letra a letra la cadena que hayas metido como password. Para que no sea trivial, en lugar de comprobar el carácter en sí, se comprueba su código ASCII. Y en una línea especial se busca que todas las i se sustituyan por el número 1, las a por el 4 y las o por el número 0 (esta última sustitución es una pequeña trampa, porque en la última rama del if se comprueba que la última letra sea realmente una o – y no un 0 – )
Así pues:
Posición: 0 1 2 3 4 5 6 7 8 9 ASCII 102 52 99 49 108 49 115 49 109 111 carácter f 4 c 1 l 1 s 1 m o
El autor del level (hey_neken) lo decía en el propio enunciado, el password es f4c1l1s1mo .
Donde están los enunciados a los problemas, esta vez has empezado directamente a poner soluciones 😉
Saludos.
Juanmi.
Vale, vale, me he venido directamente aquí sin leer la anterior noticia 😉
En realidad no es que la sustitución sea una trampa. Directamente, como pass2 no se usa en ningún otro lugar de la función, yo borré esa línea para resolverlo.