VirtualSlug un bot de Real Time Battle

Pues por aqui, en la lanparty FicOnLan, se organizo un torneo de Real Time Battle, que es un juego que consiste en programar un robot (en cualquier lenguaje, la informacion se pasa por la entrada y salida estándar) para que luche contra otros, esto fue lo que presente:

[ VirtualSlug.tar.gz ]

Por supuesto, quedo de ultimo, funciono incluso peor que los robots que se quedaban quietos xD... parece ser que ir de frente al medio de la batalla no es tan buena idea cuando no es un uno contra uno :)

Teneis mucha informacion del tema en [ http://rtb.belay.es/ ] o en [ http:// realtimebattle.sourceforge.net/ ]

Tambien hubo un concurso de programacion... pero la verdad es que no me gusto lo que consegui, cuando lo pula un poco (cuando consiga hacer una deteccion de colisiones decente) lo subo

Hasta ahora!

Otra de scripts greasemonkey [SY relinker]

Hoy, andando por SeriesYonkis acabe mosqueado por tener que dar muchas vueltas para conseguir los links (a megaupload en este caso), la verdad es que la web es bastante eficiente, todo muy claro, pero una vez que encuentras lo que necesitas, hay que pasar por la pagina medio vacia que solo tiene el link para enviarte a donde hay esta la descarga :(

Conclusion: un script y andado...

El script en cuestion esta aqui: http://userscripts.org/scripts/source/ 76470.user.js

De todas formas, los de userscripts se lo curraron, asi que hay mas informacion del script (poca cosa, codigo fuente en bonito y tal...) aqui: http:// userscripts.org/scripts/show/76470

Por si a alguien le pica la curiosidad por saber como hacen los de SeriesYonkis para "ocultar" los links, el metodo es bastante sencillo:

  • Obtienen el valor ASCII de cada letra que cambia (con megaupload, que es para donde funciona este script, es lo que va despues del ?d= )
  • Le hacen XOR con 0xFE
  • Y le hacen un UrlEncoding()

Pensando en paralelo

Edit (3 meses despues...): Que fallo mas tonto!, me olvide de colgar la implementación de la lista enlazada :(, está aquí [llist.c]

Entre los paradigmas de programacion en paralelo, destacan el multiproceso (varios procesos, un hilo para cada uno), y el multihilo (un solo proceso, varios hilos de ejecucion), la principal diferencia es que si un programa es multiproceso, la memoria (la RAM) no es compartida, esto hace que no haya que preocuparse de cuando se accede a los datos, o se modifican, para evitar que otras instancias del programa fallen, pero hace obligatorio el uso de IPC (Comunicacion Entre Procesos) para coordinar el programa.

Asi, con el multihilo el IPC se puede reemplazar por cosas como variables globales, ademas por no necesitar una region de memoria propia, es bastante mas ligero, aun asi, elijas el modelo que elijas, siempre tendras el mismo problema, que se puede resumir en

Bgame (un minijuego de 510 bytes)

Bgame es un juego hecho para probar un concepto, meter un juego en el bootsector de un disquete, y que el PC pueda cargar directamente (sin pasar por un SO)

El resultado es bastante cutre, en parte por la limitacion de 510 bytes ( 512- 2 para el numero magico), que es parte del reto, y en parte por la poca destreza del programador (yop), pero funciona, y sirve de practica sobre ensamblador en modo real, asi que cumplio su funcion :)}

Esta completamente escrito en ensamblador de 16 bits (no hay mas opciones, si tiene que funcionar sin un SO y en ese espacio)... aqui teneis el codigo fuente [bgame.asm] (con los comentarios en ingles), o con los comentarios traducidos [bgame_es.asm] , el makefile [Makefile] y la imagen del disquete generado [bgame.img] y todo en un ZIP [bgame.zip]

La idea es utilizar una maquina virtual, como virtual_box, y cargar la imagen del disquete.

[How to] OpenSSL en C/C++

Pues como parece que la documentacion de OpenSSL no es precisamente la mejor he pensado en hacer una guia rapida, aqui la teneis.

Pero, antes de empezar, que es OpenSSL ? OpenSSL es una implementacion libre (bajo una licencia apache-like) de los protocolos SSL y TLS. Implementa las funciones basicas de criptografia y provee varias funciones utiles.

Instalacion: Esto no tiene gran misterio, instala libssl-dev desde tu repositorio de paquetes y ya está. * Hola mundo ***

Las librerias que se van a utilizar son:

* openssl/bio.h

* openssl/ssl.h
*
* openssl/err.h
*

El hola mundo sería algo asi:

include

// Cabeceras OpenSSL

include

include

include

int main(int argc,char ** argv){

// Iniciando OpenSSL

SSL_load_error_strings();

ERR_load_BIO_strings();

OpenSSL_add_all_algorithms();

printf("Hola, mundo de OpenSSL\n");

return 0;

}

Hay que linkarlo con libssl (por ejemplo, compilando con el comando gcc helloworld.c -lssl -o hello_world

). El resultado es bastante obvio: Hola, mundo de OpenSSL

Esteganografia en python: modulo de BMP acabado

Pues nada, el modulo de bmp esta acabado, es decir, soporta:
* BMP de 24 Bits (8R,8G,8B)
* BMP de 32 Bits (8R,8G,8B,8X), sin compresion
* BMP de 32 Bits (8R,8G,8B,8X), con compresion (bit field) No esta previsto añadir cosas, pues eso es lo mas que soporta BMP,  las imagenes con menor profundidad ya ni se considera soportarlas, porque la esteganografia seria muy evidente.

pyStego_bmp01.zip

Lo proximo sera añadir soporte para GIF,JPEG o PNG (y APNG?) y soportar todos estos formatos antes de pasar a otro de datos (audio o video)

Hasta ahora!

plowshare, compartiendo archivos en Gnu/Linux

Plowshare es un downloader/uploader en línea de comandos (si esto es un problema para alguien, lo solucionamos ahora  ;) para algunas de las paginas de comparticion de archivos. Funciona en los sistemas Gnu/Linux, BSD, Mac OS X (con algunos parches) y windows (utilizando Cygwin)

Instalacion:      Archlinux: yaourt -Sy plowshare      Gentoo: emerge -av plowshare

Debian/Ubuntu: Hay que instalarlo a mano, para esto hacemos sudo apt-get install curl recode imagemagick tesseract-ocr-eng spidermonkey-bin aview  perlmagick gocr wget http://plowshare.googlecode.com/files/plowshare_0.9.2-1_all.deb sudo dpkg -i plowshare_0.9.2-1_all.deb

Comandos (repito, si prefieres, tienes mas abajo el codigo para hacer un interfaz) :  Para subir un archivo:

plowup [<-a|-b>

Esteganografia en python

Llevo bastante tiempo dandole vueltas a la idea de hacer una libreria de esteganografia en python, para poder usarla como base para una aplicacion completa... pues me he decidido a empezar, y estos son los primeros resultados:

baseops.py

bmp.py

El primero es simplemente un conjunto de funciones que creo que pueden ser de utilidad en los distintos modulos (extraer el LSB de un byte, descomponer un char en bits, leer un numero de un archivo...)

El segundo es lo que va comenzando a ser el modulo de esteganografia con BMP, por ahora esta bastante limitado, solo soporta imagenes de al menos 24bits de profundidad (esto seguramente no cambie, pues aceptar profundidades menores solo hace que la implementacion no sea tan sencilla, añadiendo una utilidad minima). Ademas, por ahora no soporta ningun tipo de compresion, aunque la idea seria implementar compresion/descompresion usando Bit Field (que se utiliza en imagenes de 32 bits)

Actualizando el Jamendo OGG redirector

Pues resulta que el script de greasemonkey que se encargaba de redirigir las descargas de MP3 a las OGG funcionaba... pero solo si se estaba utilizando noScript, cosa que no tuve en cuenta (perdon) :P

Ya esta el codigo arreglado (solo hubo que añadir un substr() y listo), y funciona usando noScript o no ;)

Podeis descargarlo [aqui]

Y aqui esta el codigo_fuente (para quien no le apetezca buscarlo por la pagina)

Y ya esta, perdon por las molestias

Introduccion a la criptografia, con Python: MD5 (III)

Siguendo con el tema, en esta parte veremos como funciona la funcion de hash MD5:

¿Que es una funcion HASH?
En informática, Hash se refiere a una función o método para
generar claves o llaves que representen de manera casi unívoca a un
documento, registro, archivo, etc., resumir o identificar un dato a
través de la probabilidad, utilizando una función hash o algoritmo
hash. Un hash es el resultado de dicha función o algoritmo.
[Wikipedia]

Es decir, es una funcion de un solo sentido (a partir del resultado no se puede recuperar el original) que identifica un "objeto" con precision, si cambia un byte, cambia todo el resultado.

Esto se suele utilizar (por ejemplo) para comprobar que las descargas se realizaron correctamente, comparando el hash del archivo original y el del archivo descargado, si son iguales, todo fue bien :)

Newer posts Older posts