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)

Solución al reto de paginación de un PDF

Bueno, muchas de las respuestas aportadas son correctas y muy interesantes: iText, uso de opción multibackground con pdftk, o el script para pdfcreator. De hecho mi propuesta se parece a esta última pero funciona también en Linux 🙂 Se basa en usar pdfedit y su soporte de scripting, ejecutando el siguiente script tal y como figura en la imagen adjunta:

for (i=1; i <= document.getPageCount(); i++)
 {
   addText(300,745,300,745,765,711);
   text = tr("%1".arg(i));
   _AddTextSlot(text);
    PageSpace.nextPage();
}
    go();

Los números de addText son coordenadas x,y de la esquina superior izquierda e inferior derecha del rectángulo que envolverá al texto (repetidas las primeras, no sé aún por qué pdfedit lo requiere así…)
La función _AddSlot se supone por la nomenclatura (empieza por _) que es privada, pero el lenguaje no la oculta 😛 . La función tr simula un printf (para conseguir un casting de número -en la variable i- a String)
go() recarga la página del PDF (si no la ejecutas parece que hay algún error de refresco de pantalla, porque el número mostrado no es el que realmente se ha añadido en la página).

Espero que os haya gustado el reto y las distintas soluciones. Incluso os será útil 😛

Un reto relacionado con la edición de PDF’s

Me gustan los retos informáticos. Los que seguís este blog lo sabréis, y seguramente habréis disfrutado como yo con retos como el HackIt, HackIt2 y HackIt3. Pero no sólo de HackIts vive el hombre (ya podría ser!) 🙂 Así que, hoy traigo un reto más mundano: tenemos un PDF sin números de página (las hojas no están paginadas, vaya). El reto consiste en añadirle a cada página su número (1, 2, 3… etc.). Repito: es un PDF (no tengo el documento original a partir del cuál se creó). Y no quiero añadir los números a mano, claro, porque podría eternizarme 😉 Quiero que el ordenador trabaje por mí, y por supuesto, sólo se admiten soluciones basadas en software libre. ¿Te animas a superar el reto? Mañana (día 3 de Marzo), postearé la solución, pero mientras, ¡espero vuestras aportaciones! 😉

Hackit!: nivel 3

Warning! Este post muestra paso a paso cómo superar la prueba 4 (nivel 3) del HackIt! de la Gipuzkoa Encounter 2009. Si no quieres verlo, deja de leer… ¿Todavía estás aquí? Entonces ¿quieres leer la solución? Vale, tú mismo. Allá vamos:

0) Descargar el ejecutable para Windows a crackear. Si estás en Linux, aprovecha para pasarle el comando strings y ver si encuentras algo interesante – no hay gran cosa-. Ya puestos ábrelo en vi (sí! abrimos el binario en vi) . Aquí sí que vemos algunas cadenas interesantes. Entre ellas UPX!

1) UPX es un empaquetador de ejecutables (tanto para Win como para Linux). Descargamos UPX. Desempaquetamos el ejecutable (se puede hacer en Linux con Wine si se desea)

/tmp/upx303w$ wine upx.exe -d ../crackit.exe
Ultimate Packer for eXecutables
Copyright (C) 1996 – 2008
UPX 3.03w Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2008
File size Ratio Format Name
——————– —— ———– ———–
28672 <- 8704 30.36% win32/pe crackit.exe
Unpacked 1 file.

2) La idea ahora es abrir el ejecutable con algún debugger para Win. Por ejemplo, OllyDBG. Lo he probado con Wine y no ha ido muy fino así que abrámoslo en el sistema del maligno 😉

Abrimos el fichero desempaquetado crackit.exe en OllyDBG.

Ponemos un punto de ruptura en la primera línea ejecutable del .exe (en la 00401811). Para ello, basta con hacer doble click sobre la línea en cuestión (el número de línea se pondrá rojo, igual que en la imagen). Ahora, dado que la primera línea es un «call 004023E4» lo inspeccionamos con «step into», es decir, pulsamos F7 para ver el código al que ese call está llamando. Ahora, empezamos a navegar por el código usando F8 (o sea, step over, es decir, ejecución línea por línea, sin meternos en los call)

Seguimos así hasta la línea 00401665 «call 00401005». Realmente la idea es que pulsamos F8 hasta ver cuándo se abre una ventana MS-DOS que nos está pidiendo login y password. En ese momento apuntamos la línea que provocó esa llamada y nos damos cuenta de que es la 00401665. Ahora reiniciamos la sesión de debug y pulsamos F7/F8  hasta pararnos en 00401665. Pulsamos F7 (step into) para ver «las tripas» de ese método.

Ahí hay un «jmp 00401010». Pulsamos F7. Y seguimos con F8, línea a línea. En la 00401050 vemos que se prepara el string que nos indicará por pantalla «En esta prueba es importante saber quién eres…». F8 y veremos que se hace una llamada a printf. Seguimos con F8. En la línea 004010A2 vemos que se hace una llamada a fgets (se solicita por teclado un string al usuario). Tecleamos «euskal» y pulsamos intro para seguir depurando. F8 hasta que nos pida el password. Tecleamos cualquier cosa (12345678, por ejemplo).

Ahora se supone que en algún momento deberá de compararse lo que hemos tecleado nosotros (12345678) con la clave correcta que se supone que deberíamos de teclear. Así que vamos pulsando F8 hasta que veamos el «strcmp» pasar por delante nuestro y justo antes, el string con el que comparar  🙂

(pulsa sobre la imagen para ver la contraseña en la línea 004011B3). Suerte con el nivel 4 😉

Nivel 3: crack the planet

Tras los comentarios del nivel 2, especialmente los del usuario anónimo, con el que he tenido una buena discusión (que me ha dado qué pensar, y ¡en la que me ha convencido! 🙂 coincido en que es mejor que vaya publicando pistas sobre cómo resolver poco a poco, y dar bastante más tiempo para cada prueba. El concurso ya terminó hace tiempo, pero aquellos de vosotros que estáis intentándolo, parece que ciertamente , tener las soluciones os desmotiva. No problem, las siguientes pruebas tendrán la solución explicada – es una opción- , pero con bastante más tiempo entre una y otra. Otra opción es crear un post donde la solución vaya con contraseña (en WordPress se pueden crear página protegidas) Así, sólo el que haya pasado la prueba podrá ver la solución y discutir pasos alternativos con el resto de usuarios. Pero esto tiene el problema de que dejaría fuera a quien más lo necesita… Se admiten sugerencias en los comentarios sobre cómo abordar esto. Incluso se admiten discusiones (pero a ser posible con usuarios no anónimos, para que no me de la sensación de ¡estar discutiendo con alguien sin rostro!)

Al lío: primera pista para el nivel 3. Para poder ejecutar el .exe y ver al menos qué es lo que hace, conviene leerse este post.