Montando un sistema de descargas oculto ( 1 ): las bases

La idea era mostrar primero un posible escenario de control total de internet, pero se volvió demasiado post-apocalíptico. Na' , imaginaos simplemente que queremos distribuir eh...código fuente, pero sin que nadie se dé cuenta de que su servidor lo aloja. Una opción es utilizar algo conocido como esteganografía, como dice en la Wikipedia:
La esteganografía es la disciplina en la que se estudian y aplican
técnicas que permiten el ocultamiento de mensajes u objetos, dentro
de otros, llamados portadores, de modo que no se perciba su
existencia. Es una mezcla de artes y técnicas que se combinan para
conformar la práctica de ocultar y enviar información sensible en
un portador que pueda pasar desapercibido.

Vamos, que así como la criptografía intenta que los datos no sean recuperables sin una contraseña, la esteganografía apunta a pasar mensajes sin que se interpreten como tales.

Resolviendo dominios .42 en un servidor BIND9 casero (DNS)

Pues nada, veamos como hacer que nuestro DNS casero resuelva direcciones con el TLD .42, si no sabes que es esto, mejor hechale un vistazo al proyecto https:// www.42registry.org/faq-es.php
"42 Registry es, principalmente, una experiencia como otras tantas de
las que abundan en Internet hoy en día. Es una organización sin
ánimo de lucro, orientada a proponer un TLD_(Dominio_de_Primer
Nivel) para agrupar a una comunidad concreta."

Voy a suponer una distro basada en Debian ( Ubuntu, Trisquel ... Debian... ), pero la idea es la misma para todos, solo hay que cambiar un par de cosas (que avisaré cuando se tercie).

Primero instalamos el servidor DNS en la máquina que queremos sudo apt-get install bind9

( Aceptamos lo que sea, y sinó usamos una distro "Debian-based", buscamos el paquete en el repositorio correspondiente )

( Esto se puede leer en el FAQ de 42 ) Abrimos el archivo "/etc/bind/ named.conf" sudo nano /etc/bind/named.conf

El juego de la vida con Processing [ Java ]

Pues nada, ahí va una implementación del juego_de_la_vida_de_Conway ( ejemplo clásico de automata celular ) hecho con processing [ http://pastebin.com/ MS6ACY4k ]

Lo único que hay que hacer para usar Processing es descargarlo y ejecutarlo.

Nota: en gnome parece que hace logout al user si no se quitan los efectos de ventanas ( Systema > Preferencias > Apariencia > Efectos visuales )

Una vez ejecutado solo hay que pegar el código en el editor y darle a "play".

Haz click en una "célula" para invertir su estado y pulsa un botón del teclado para reanudar/detener la simulación.

GUI's en python con [ GTK | QT4 ] y [XML | HTML... ]

Hoy traigo una librería que aún no está acabada, pero puede que interese a la gente que no le guste complicarse lo más mínimo con las interfaces, pero que aún así le interese hacer unas GUI para los script [ guiml.zip ].

La idea es simple, le pasas un pedazo de HTML a la "librería" y esta selecciona el Toolkit disponible (por ahora solo soporta Gtk y Qt4, cuando le heche el guante a algo que tenga tk instalado lo añado ) hace una GUI basandose en eso, por ejemplo, para

...') #----- Cuando llega a una funcion: Cuando llega a la funcion le manda un diccionario y el nombre del botón pulsado, por ejemplo, si ejecutara una funcion llamada prueba(dic, btn) (el argumento es necesario), se extraerian las variables asi: def prueba( dic, btn ): respuesta = dic['resp'] El nombre de las variables dentro del diccionario son los "name" de la etiqueta en cuestión. #----- Notas: [-] Aún no pilla texto formateado Tags aceptados: [+] Title                    

La curva del dragón con Logo

Nada, que después de encontrarse uno con que alguien se las arreglo para hacer este fractal con redcode [ http://impomatic.blogspot.com/2011/01/dragon-curve-in-redcode.html ] (para quitarse el sombrero, vaya :P !) no se puede menos que intentarlo en otro lenguaje, y a falta de poder tirar de los gráficos de tortuga el python por cosas de la vida, la siguiente opción es logo.

Realmente no tiene mucha complicación, la wikipedia nos da la_fórmula_lista para_programar, simplemente hay que hacer:

===============================================================================

G = B ^ (B >> 1)

===============================================================================

(El ^ es XOR y el>>1 es mover todos los bits una posición a la derecha). Y después hacer AND de este "G" y el NOT del anterior, así puede quedar por ejemplo en Logo:

=============================================================================== to ge :g :gz

ifelse (bitand (bitnot :g) :gz) > 0 [

   rt 90

] [

   lt 90

]

end

Historias desde los confines de random()

Pues eso, hoy toca un script al estilo de cierto juego analógico, ese en el que hay que escribir una frase en un trozo de papel sabiendo sólo con que palabra empezar (última palabra que escribió la persona anterior) y pasarsela a la siguiente hasta que vuelva a la primera.

Lo que hace el script [ randomstories.zip ] es tomar un número cualquiera de palabras de una página de wikipedia, y repetir el proceso haciendo que la primera palabra encaje con la última hasta alcanzar el tamaño máximo del mensaje. El archivo que hay que ejecutar es randomstories.py .

El código es bastante lento... unos 10 min para 140 caracteres ( jeje, las probabilidades de encontrar una cierta palabra entre el océano de Wikimedia son bastante remotas, así que se detiene si no encuentra la palabra en 100 páginas ) y los parámetros hay que cambiarlos en el código fuente en las primeras líneas de "randomstories.py", pero se ve claramente (los otros solo se encargan de manejar las web).

Rompiendo captchas

Por cosas de la vida, últimamente ando trasteando con las arañas, crawleando cosas varias... y al final era inevitable toparse con los CAPTCHAs, así que se me ha presentado la ocasión de intentar vencerlos, por ahora esto es lo poco que he conseguido [ captcha_baker.py ], lo poco que hace el propio script es leer los pixels de la primera línea y pasar a blanco los que estén cerca de estos, y a negro el resto. Después corta las letras por las columnas en blanco.

El valor de la "cercanía" es modificable (de hecho la idea viene del parámetro "umbral" de la selección de color de GIMP).

Depende de Image Magick para convertir las imágenes a BMP, Python_Image Library para recortar las letras y tesseract-ocr para reconocer las letras.

No funciona demasiado bien, pero estoy bastante contento con el resultado para ser una primera prueba.

Los parámetros son:

===============================================================================

./captcha_baker.py []

Acelerenado `route`, `netstat` y parecidos [tip]

Los comandos de red como route, netstat, e incluso programas como nmap tienen la constumbre de intentar convertir las IP's en nombres de red después de realizar su función principal. Por muy útil que sea a veces, en otros momentos es excesivamente pesado, por ejemplo si utilizamos:

===============================================================================

netstat

Para descubrir las conexiones activas, después de obtenerlas intentará convertir las IP en nombres de red, y en muchos normales no resultará en nada útil (seguramente acabe mostrando las IP o nombres genéricos).

Estos mismos comandos suelen aceptar el flag -n que evita esa resolución, el cambio salta a la vista:

Hasta otra

Escaneando un servidor FTP

Para hacer una araña que explore un servidor FTP se puede aprovechar el_ftplib de_python... solo tiene un impedimento, que cuando se pide la lista de archivos en un directorio se devuelve por stdout, lo que es bastante molesto para algo como esto.

La solución más sencilla es substituir la salida estándar ( sys.stdout ) por un objeto que almacene los datos, el único método que hace falta en el objeto es objeto.write(string) , el que se usa para mostrar strings por la pantalla, esto puede servir:

class catcher():

def clean(self):

  self.trap = ""

def readlines(self):

  return self.trap.split("\n")

def readline(self):

  l = self.readlines()

  res = l.pop(0)

  self.trap = "\n".join(l).strip()

  return res

def init(self):

  self.clean()

def write(self, s):

  self.trap += s

Después de dar el cambiazo por stdout y  de que recoja los string, este queda en catcher.trap, además se pueden utilizar los siguientes métodos:

Leyendo las cookies y logins de Firefox con Python y SQLite

Aprovecho la oportunidad para decir Felices navidad! / Bo nadal! / Merry christmas!

Ahora sí... recordemos que Firefox guardaba alguna información en forma de bases de datos SQLite (interesantes por el hecho de que no requiere un demonio externo, sino que toda la información lo maneja la librería sobre un archivo), veamos como hacer un script que nos muestre las cookies para dominios concretos.

Las cookies se guardan en el archivo "cookies.sqlite" en la carpeta del perfil del programa, un "file" confirma que es una base de datos sqlite3, se puede abrir con

=============================================================================== sqlite3 cookies.sqlite ===============================================================================

Veamos que tablas tiene

=============================================================================== sqlite> .table moz_cookies sqlite> ===============================================================================

Newer posts Older posts