HackIt! 2013

Selection_421HackIt! es el concurso de seguridad informática de la Euskal Encounter en el que compiten más de 80 equipos y gana w0per 😉 El resto de los equipos jugamos en otra liga por intentar quedar en segundo o tercer puesto. Este año en DL conseguimos el objetivo, tras andar como el gato y el ratón con Navarparty. Grandes estos navarros!

Realmente el HackIt! consta de 2 secciones, el propiamente llamado HackIt, +-10 retos donde en general se requieren amplios conocimientos técnicos/ informáticos para pasar más allá de la prueba 4)  y SolveIt, +-8 retos, donde se plantean pruebas con menor componente técnico y más ingredientes de ingenio.

Esta edición del HackIt, como las últimas (2012, 2011, 2010) ha sido organizada por @marcan y está desde hace unos días online. Siempre estaré agradecido a su labor (este año. ademaś, le ha dedicado un toque especial generando banners de «patrocinadores», que servían como ayuda/pista en algún  nivel :-P)  De hecho, es la prueba que me sigue haciendo perder el sueño y dedicar 3 días a «jugar».

Como cada año, al terminar el HackIt! me gusta retomar algunas de las pruebas, para comentarlas con el resto de compañeros, y aprender de los demás. Nuestra forma de solucionar puede no ser la óptima, ni siquiera la forma más ortodoxa. Incluso en una de las pruebas (Trollencio!) fue pura chiripa, como veréis. Por ello, me gustaría que los grupos o individuos que se pasaron dichas pruebas (antes o ahora, post-mortem) comentaran sus impresiones en este post.

Selection_423Comencemos con la primera. Hack It 1: WTF!»#$%&()~ . Analizando el código vemos que se carga un fichero Javascript desde la ruta /hackit/1/static/checkpw.js . ¿Y qué tenemos ahí? Un monstruo como el de la figura de la izquierda. Fíjense en el scroll vertical 🙂 Se trata de código Javascript codificado en un alfabeto con sólo 8 caracteres : ()[]{}!+  Una especie de codificación BrainFuck, pero en Javascript. Útil para intentar saltarse detectores de intrusión, reglas de firewall, etc… porque a ver quién es el majo que interpreta eso 😛

En fin, si abrimos una consola Javascript en Chrome y seguimos el artículo del autor de esta monstruosidad (o belleza, según cómo se mire), empezaremos a entenderlo. La idea es conseguir interpretar cualquier instrucción Javascript usando sólo ()[]{}+-  . Lo primero será saber cómo obtener los caracteres alfanuméricos: a-z0-9, pues con ellos ya tendremos un buen camino recorrido.

Selection_424Si ejecutamos +[] , obtendremos un 0 (casting de un array vacío a integer). Con ![] un false (casting a boolean de un array vacío). Si negamos ese valor !![] obtendremos un true, y al convertirlo a entero +!![], un 1. Con estos 2 números y el operador de suma, podremos obtener cualquier otro dígito (con algunos trucos que muestra el autor, esto se puede simplificar, para no tener ristras enormes cuando necesitamos un numero como 128). ¿Y las letras?  Bueno, empecemos con algo más sencillo. Si esto es un array [] (vacío), y esto devuelve un 0 +[], entonces, ¿qué ocurrirá si intentamos acceder a la primera posición (0) de un array vacío? [][+[]] . Que obtendremos la cadena «undefined». ¿Y si hacemos un casting de un objeto a número? +{}  . Javascript nos dirá que eso no es posible con la cadena «NaN» (not a number).  Accediendo a los caracteres de esas cadenas (indexándolas como arrays de caracteres), tendremos ya unas cuantas letras (u, n, d, e, f, i , a) . Siguiendo este mismo truco el autor explica cómo conseguir todo el alfabeto. Ahora nos hace falta una función que, dado como parámetro un string, evalúe dicho string como si el nombre de una función se tratara. Este trabalenguas no es sino para introducir la función «Function», que hace precisamente eso:

Function(«alert(1)»)()

construirá la función alert() a partir de la cadena pasada como parámetro (en concreto, construirá alert(1) y la ejecutará, mostrando ese 1 en pantalla). Este post en castellano nos ayudó a terminar de entender cómo funcionaba todo, os lo recomiendo. En definitiva, es posible ejecutar en el navegador cualquier función a partir de un churro de caracteres ()[]{}+ .  En su día, el maligno ya nos habló de este experimento, pero no le hice demasiado caso, hasta hoy 🙂

Bien, ¿y cómo pasarnos entonces este primer nivel? Realmente no hace falta entender nada de lo que he explicado hasta ahora 😛 , porque se puede resolver «de chiripa». La cuestión es que si conseguimos ejecutar checkpw.js  en un navegador nos saltará un alert con el password. Ojo! Para que el brainfuck funcione, necesita acceder a la letra «p» de alguna forma, y el artículo indica que ésto es posible si el script se carga desde una localización http://loquesea.com  (la p la sacará del nombre del protocolo, httP ) . Así que no vale con cargar el script con protocolo file:// o directamente desde la consola del navegador, como intentamos mil veces 🙂

Nola instalatu Xuxen zuzentzaile ortografikoa LibreOffice 4-n

Gaur bertan, @asiersar -en txio baten bidez, LibreOffice 4.0-rekin bateragarria den Xuxen zuzentzaile ortografikoaren bertsio berri bat atera dutela ikusi dut. Berez, bertsio berria uztailaren 19tik dago kalean, baina tira, ez nuen inon ikusi honen berri.

Bere instalazioa eta erabilera oso errazak dira. Lehendabizi,  XUXENIV-LO4.oxt fixategia hemendik jaitsi. Ondoren, LibreOffice ireki eta Tresnak / Hedapenen kudeatzailea ireki (Tools / Extensions manager).  Ondoren, «Gehitu..» (Add..) botoian sakatu, jaitsi berri duzun .oxt fixategia hautatu, leihoa itxi eta LibreOffice berrabiarazi.

Extension Manager_403Orain, euskaraz idatzitako testu bat idazterakoan, gogoratu, euskaraz (Basque) dagoela esan behar diozula Writer aplikazioari (defektuz ez baduzu horrela konfiguratu). Adibidez, nire bertsioan besterik ezeko konfigurazioan, ingelera da lehenetsitako hizkuntza. Beraz, testua idatzi, Ctrl-A (dena hautatu) sakatu, eta beheko-aldean dagoen hizkuntzen leihotxoan «Basque» aukeratu.

Workspace 1_404

 

Bukatzeko, gaizki idatzitako hitzak gorriz azpimarratuko dira. Eskubiko botoia sakatu baten gainean eta proposatutako zuzenketen artean bat hautatu. Testu osoa zuzentzea ere badago: F7 tekla sakatu eta zuzenketak egiteko leiho bat irekiko zaizu. Bertan, banan-banan, oso modu erosoan, zuzendu ditzakezu gaizki idatzitako hitz guztiak.

Spelling and Grammar: Basque_406

[LibreOffice] Soporte de español

English Language

Si escribes es castellano y quieres que LibreOffice Writer te ayude a detectar y corregir errores de ortografía y gramática, necesitarás indicarle que tu texto está en ese idioma. Pero si en su día instalaste la versión no localizada sólo tendrás disponible en el menú de idiomas la opción «English (USA)». Y no, cuando pulsas en «More…» no te deja elegir más idiomas, sino que te lleva a la página de configuración de más opciones relacionadas con la página (espaciado entre letras, tipo de letra, background…). Entonces… ¿cómo instalar el soporte de español?

Basta con ejecutar este simple comando:

$ sudo apt-get install libreoffice-l10n-es

que a su vez nos instalará también: hunspell-dictionary-es, myspell-dictionary-es, hyphen-es, libreoffice-grammarcheck-es, libreoffice-help-es y mythes-es. Ahora ya podremos detectar y corregir nuestros errores en la lengua de Cervantes 😉

LibreOffice Writer / Spanish support

[LibreOffice] Portada sin número de página

Cuando generas un documento en LibreOffice Writer es muy probable que la primera página sea una portada que no quieres que contenga numeración a pie de página. La página número 1 debería ser la siguiente a la portada… o incluso podrías querer dejar una página en blanco tras la portada y comenzar a numerar en la 3ª página física. ¿Pero cómo se hace esto en LibreOffice?

Portada sin numeración de página

Tras preparar la primera página física (portada), pulsa F11 para ver el gestor de estilos. En el gestor, pulsa el icono de «Estilos de página» tal y como se muestra en la figura de la izquierda. A continuación, verás que hay varios estilos disponibles, entre ellos «First Page» (Primera página). Haz doble click sobre este estilo. Ahora, situado en la página de portada, insertaremos un salto de página seleccionando la opción de menú «Insert / Manual break». Se abrirá un cuadro de diálogo como el de la figura 2. Ahí seleccionaremos «Page break» y en estilo: «Default style». Al hacerlo, podremos ver que nos permite cambiar el número de la página que vamos a introducir tras la portada («Change page number»). En ese campo, pondremos un 1. Al pulsar OK veremos que suceden varias cosas. La primera es que Writer creará una nueva página en blanco tras la portada. La segunda es que según Writer estamos en la «Página 1 3/3». ¿Qué es esto? ¿De dónde sale ese 3/3? Calma 🙂 La cuestión es que las páginas con numeración impar tienen que ser páginas «a la derecha». Pensemos en un libro. Si nos fijamos en la numeración de las páginas, las impares siempre son páginas «derecha» y las pares páginas «izquierda». Lo que ha hecho Writer tiene sentido: si tras la portada creamos una nueva página con numeración «1», ésta tiene que ser página derecha, por lo que Writer tiene que crear una página intermedia para que le cuadren las cuentas (de ahí el «Página 1 3/3»). Figura 2Veremos también que LibreOffice marca con una línea azul discontinua el salto manual de página. Ya sólo nos queda insertar el pie de página (Insert / Footer / Default style) en la página que acabamos de crear y, finalmente, el propio número de página (Insert / Fields / Page Number)

Figura 3

Página física 2 = lógica 1

Generar una presentación a partir de un directorio de imágenes

Llevo tiempo pensando que debía compartir un pequeño script en PHP que creé para crear un ODP (presentación Impress) a partir de un directorio de imágenes. Es interesante, por ejemplo, cuando has capturado multitud de imágenes de pantalla para explicar a alguien cómo realizar cierta función en una aplicación web o en una aplicación de escritorio. Esas imágenes no hace falta que sean preciosas, editadas, ni nada por el estilo. Son simples pantallazos que te gustaría poner uno detrás de otro en una presentación (una captura en cada diapositiva) para luego poder anotarlas rápidamente.

Hasta tener este script tenía que ir imagen por imagen, pulsando en Insertar / Imagen, seleccionar la que quería, y ponerla en la diapositiva. Generar nueva diapositiva, volver a Insertar / Imagen, elegir la siguiente, etc. Cuando había 2 o 3, no problem, pero cuando tenía más de 10 pantallazos siempre acababa diciendo, «esto hay que automatizarlo…» . Pues bien, el script, programado en PHP, lo he dejado en GitHub por si le interesa a alguien más.

Una vez clonado, el funcionamiento del script es muy sencillo:

 
php -q slideck.php directorio_de_imagenes

Donde directorio_de_imagenes es la ruta a la carpeta donde tengas las capturas de pantalla. El script generará en el mismo directorio desde el que se ejecute un archivo slideck.odp, es decir, una presentación Impress, con una diapositiva por cada imagen de la carpeta.

Enjoy it!