HackIt’2010: Level 2

Más de lo mismo 🙂 Aunque ahora el código Javascript está ofuscado con un empaquetador (packer).
Basta con abrir el level2.js y analizar la primera línea:

eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k[c]);return p}('C D(){f a=q.t('u').w;f r=z A(8);f x="";B(f i=0;i<r.g;i++){r[i]=z A()}c(a.g==8){c(a.b(5)=="n"){r[7]=["l","j","k","j","9","1","l","m"];c(a.b(4)=="0"){r[2]=["x","d","e","j"];c(a.b(0)=="3"){r[8]=["s","s","3","j","o","E","k"];c(a.b(3)=="y"){r[6]=["7","5","k","j","n","v","k"];r[0]=["l","j","k","j"];c(a.b(1)=="4"){r[3]=["l","j","4","j"];r[1]=["l","j","k","j"];c(a.b(2)=="s"){r[5]=["l","j","k","j","h","o","p"];c(a.b(6)=="3"){r[4]=["l","j","k","j","2","8","h"];B(f j=0;j<r[7].g;j++){x=x+r[j][j]}c(x.F("e","3")==r[7][0]+r[2][3]+a.b(6)+r[5][3]+"2"+r[8][4]+r[1][2]+r[7][7]){q.t('u').w=a.b(0)+a.b(1)+a.b(2)+a.b(3)+a.b(4)+a.b(5)+a.b(6);G()}}}}}}}}}}',43,43,'|||||||||||charAt|if|||var|length||||||||||document|||getElementById|password||value|||new|Array|for|function|check|S|replace|Login'.split('|'),0,{}))

Busando packers de Javascript en Google, llegamos a éste (usando «eval(function(p,a,c,k,e,r)» como cadena de búsqueda).

Desempaquetamos y obtenemos código mucho más clarito (donde vemos también que hey_neken metió líneas de código espurio)

function check() {
	var a = document.getElementById('password').value;
	var r = new Array(8);
	var x = "";
	for (var i = 0; i < r.length; i++) {
		r[i] = new Array()
	}
	if (a.length == 8) {
		if (a.charAt(5) == "n") {
			r[7] = ["l", "j", "k", "j", "9", "1", "l", "m"];
			if (a.charAt(4) == "0") {
				r[2] = ["x", "d", "e", "j"];
				if (a.charAt(0) == "3") {
					r[8] = ["s", "s", "3", "j", "o", "S", "k"];
					if (a.charAt(3) == "y") {
						r[6] = ["7", "5", "k", "j", "n", "v", "k"];
						r[0] = ["l", "j", "k", "j"];
						if (a.charAt(1) == "4") {
							r[3] = ["l", "j", "4", "j"];
							r[1] = ["l", "j", "k", "j"];
							if (a.charAt(2) == "s") {
								r[5] = ["l", "j", "k", "j", "h", "o", "p"];
								if (a.charAt(6) == "3") {
									r[4] = ["l", "j", "k", "j", "2", "8", "h"];
									for (var j = 0; j < r[7].length; j++) {
										x = x + r[j][j]
									}
									if (x.replace("e", "3") == r[7][0] + r[2][3] + a.charAt(6) + r[5][3] + "2" + r[8][4] + r[1][2] + r[7][7]) {
										document.getElementById('password').value = a.charAt(0) + a.charAt(1) + a.charAt(2) + a.charAt(3) + a.charAt(4) + a.charAt(5) + a.charAt(6);
										Login()
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

Siguiendo las comprobaciones de las ramas if, llegamos a:

     0 1 2 3 4 5 6 7
     3 4 s y 0 n e .

Donde la longitud ha de ser de 8 caracteres, siendo el último de ellos uno cualquiera. Y con esto, llegamos al level3 donde estuvimos un buen rato atascados… a ver qué tal se os da a vosotros 😉

HackIt 2010: Solución al level 1

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 .

HackIt 2010 : solucionario

cc-by-sa  mightyohm http://www.flickr.com/photos/mightyohm/2680805529/ Tenía pendiente desde hace unos cuantos meses escribir sobre el HackIt’2010. También sobre el Hackit-Makeit de la Gipuzkoa Encounter 2011, pero esa acaba de terminar y la dejaré para más adelante.

Ya sabéis cómo funciona la cosa (¿cómo que no? Veo que no seguís DiarioLinux desde hace tiempo). Los hackits de otros años los tenéis tanto en la página de txipi como en las de DiarioLinux (hackit1 (2007), hackit2 (2008), hackit3 (2009)). El Hackit de 2010 por ahora sólo está disponible en la web de marcan. Espero poder hacer un mirror en cuanto consiga convencer a Hey_Neken para que me pase el .tar.gz (lo he intentado un par de veces sin éxito ;-P )

Los ganadores del año pasado (2010) fueron el equipo de topolb, z@scrack, marcan, ziberpunk, jaxvi, lothwen et all (Epic Einsteins !?). 2º puesto para DiarioLinux (yeah!) y tercero para NavarParty (tatai, Ontza, Arcan and cía).

No me extenderé más, probad con el nivel 1 (realmente muuuuy sencillo de pasar, pero para algo es el nivel 1, ¿no? 🙂 En breve la solución (que marcaré con aviso de SPOILER para que no pille a nadie por sorpresa)

Jornada Software Libre: GNOME3 y otros 8 proyectos libres :-)

Oier Mees y Jon A. Hernández. Quiero empezar citando sus nombres porque muchas veces nos olvidamos de que detrás de los eventos relacionados con el software libre hay personas que dedican días (más que horas…), por amor al arte, a atar multitud de cabos para que dicha jornada, meeting, party o lo que fuere salga adelante en condiciones ( decidir ponencias, buscar ponentes, reservar sala, diseñar el cartel, gestionar horarios, distribuir y repartir publicidad, preparar la sala, la web, recoger el material, solicitar permisos, …) A medida que pasa el tiempo veo que quedan pocos «mohicanos» (¿estamos ante la última hornada?) capaces de ilusionarse y mantener un ambiente universitario que vaya más allá de ir a clase, coger apuntes y largarse. Gente que se implica y que con su motivación, arrastran a otros. Mentes que no sólo se dirigen guiadas por las bondades técnicas del software libre sino también porque creen en la filosofía que hay detrás de este movimiento.

En fin, me gustan especialmente las jornadas que organiza ITSAS. La que nombraré a continuación es una pero también me quito el sombrero ante el trabajo de mi amigo Dani Gutiérrez, que ha sabido moverse (y soportar algún que otro palo metido entre las ruedas) en la burocracia universitaria para conseguir una subvención, un programa de actividades y un suelo bajo techo con conectividad. Con todo ello traerá a Bilbao la KDE Edu Sprint 2011 entre el jueves 7 y el lunes 11 de Abril, orientado a desarrolladores KDE y usuarios relacionados con la educación y el software libre para este escritorio.

Pero en este post me quiero centrar en la jornada organizada en Donostia (Facultad de Informática, seminario 3.1) por ITSAS el 7 de Abril (sí, otra vez ITSAS que en Abril tira la casa por la ventana 🙂

Aprovechando la publicación oficial de GNOME 3 el 6 de Abril, el 7 nos hablarán (Íñigo Illán, al que todos señalamos cuando nos preguntan sobre quién es el que más controla de GNOME en la FISS 😉 sobre las novedades de este entorno de escritorio: cómo hemos llegado hasta GNOME 3 y cuáles son las principales novedades. Hay muchas… y es la razón de que la charla dure más que las demás, 1 hora (y seguro que se nos hace demasiado corta!). La organización se puso en contacto con la Fundación GNOME y ésta les envió un pack de camisetas, pins y merchandising GNOMEro que se repartirá entre los asistentes 🙂

Jon A. nos hablará sobre KestrelHPC (un proyecto que busca facilitar la creación y administración de clusters con nodos live). ¿Qué es eso? Nada mejor que acudir a la charla para enterarte 🙂 Jon A. ha dedicado gran parte de las vacaciones de verano a trabajar a destajo en este proyecto, por lo que sus explicaciones parten de la experiencia desde dentro.

Julen Ruiz nos hablará de Librezale, un grupo que trabaja incansablemente en la traducción de herramientas libres al Euskera. Julen es además un desarrollador experimentado (Pootle, Euskalbar, XuXen…) muy respetado en la comunidad, por lo que será todo un lujo atender su charla (espero que la haga «a là» L. Lessig, como en SLUN’08 🙂

Ander Martinez nos hablará del port de Google Web Toolkit a Python (proyecto conocido como Pyjamas). Ander es un todoterreno que lo mismo nos asombra con las interioridades del kernel FreeBSD que con las novedades de C++ o un framework para desarrollo de aplicaciones RIA. Un placer oírle.

Oier Mees (organiz. principal) nos hablará del uso de Launchpad para gestionar las traducciones de Ubuntu al Euskera. Coordinador oficial del proyecto EU en Ubuntu, autor de tutoriales de «euskaldunización» de Java, políglota… Atentos a sus explicaciones!

Streaming de canales de TDT en redes VLC. Sugerente título para una charla impartida por una mente inquieta del CIDIR, un administrador de sistemas profesional (nada de BOFH 🙂 con el que he tenido el gusto de trabajar en un proyecto actual (debería de decir futuro, porque estamos en beta-testing) para implantar OpenMeetings en la UPV/EHU. Bueno, pero me estoy adelantando a acontecimientos futuros 🙂

Sistemas de control de versiones centralizados vs. distribuídos. Oier Mees, tras descansar de su charla anterior, nos ayudará a comprender las diferencias, el porqué de la elección de Git o Mercurial frente a Subversion ( o $DEITY no lo quiera, CVS). Los alumnos que se iniciaron en el control de versiones con Subversion en la asignatura de ProgII o SoftIng. no deben perderse esta charla bajo ningún concepto.

Servidor (torrent, SAMBA, ssh, HTTP) de bajo consumo eléctrico con OpenWRT. Aitor Cuartango, hombre Linux en el CIDIR, e impulsor de numerosas iniciativas relacionadas con soft. libre en la UPV/EHU nos explicará cómo aprovechar nuestro viejo router con la distro OpenWRT para que haga las veces de servidor. Los usuarios de torrent, jDownloaders y demás juguetitos (o sea, el 100% de los FISS-ianos) seguro que no dejan una silla libre en esta charla 🙂

Babelium Project. Impartida por un servidor, Juanan Pereira. Junto con muchos alumnos y sobre todo con mis compañeros del grupo GhyM, hemos creado la primera aplicación RIA que permite la práctica oral de segundas lenguas con evaluaciones colaborativas. Por si eso fuera poco hemos liberado el código fuente hace una semana 🙂 (haremos el tar.gz de la v1.0 en el IEB). En la charla de ITSAS os hablaré de este proyecto en el que llevamos trabajando año y medio… que se dice pronto !

Iñaki Alegría (profesor de la FISS), una de las personas más conocidas y respetadas del mundo del software libre en Euskadi, nos hablará de 2 plataformas (Apertium y Matxin), un servicio (OpenTrad) y una iniciativa (Wikipedia + traducción automática).

Creo que no me dejo nada. El día 7, id a la facultad, a disfrutar, aprender y compartir vuestros conocimientos con esta charlas y estos ponentes. Nos vemos en Donostia!