Script para generar diccionarios de fuerza bruta

Ultima modificación : miércoles, 10 de diciembre de 2009

Necesitaba abrir un pdf protegido por contraseña. Era un pdf con las notas de mi novia, y el cual el profesor se iba equivocado metiendo la contraseña y la pobre se iba a quedar todas las navidades sin saber la nota, asi que intentamos hacer fuerza bruta sobre el fichero, con exito.

Desarrolle un script en python que generara palabras de una longitud máxima a partir de un cadena que define un alfabeto. En mi ejemplo configuro las variables con estos valores:

LONGITUD = 6
ALFABETO = "abcdefghijklmnopqrstuvwxyz0123456789_-."

Generar todas las combinaciones posibles conlleva no solo considerar las de longitud 6, si no tambien las de longitud 5,4,3,2 e incluso 1. El alfabeto tiene 39 caracteres por tanto todas las combinaciones posibles son:

calculo de combinaciones

cálculo de combinaciones

Contraseñas de longitud mayor que 8 son muy costosas computacionalmente, por ello el script que he realizado me interesa que de mucha información de cuanto queda y cuanto lleva. En concreto 3 cosas:

  • El porcentaje que lleva del total.
  • Tiempo estimado restante (en horas, lo he puesto).
  • Velocidad: en palabras generadas por segundo

Con el dual core de mi portatil a 2.2 Ghz y con el ejemplo que pongo de palabras de hasta 6 caracteres y un alfabeto de 39 caracteres, los tiempos son muy buenos (aunque queda pendiente el uso de paralelización por MPI o algo así):

  • Velocidad media aprox: 610.000 palabras generadas / seg
  • Tiempo total : 1 hora 50 min

A continuación os pasteo el script (abrir un gedit generarDiccionario ):

Seguir leyendo

Convertir PDF a Texto plano en Linux

Convertir texto en pdf es muy facil con el uso de impresoras de PDF o utilizando openoffice por ejemplo. Para la operación inversa tenemos este comando:

  • pdftotext -layout servidor.pdf servidor.c

-layout : Es imprescindible ponerlo, ya que con él guarda la maquetación del pdf original, si no lo poneis se comera todos los saltos de linea, tabuladores y seguramente no sea lo que buscais.
servidor.pdf : Archivo pdf = origen
servidor.c : Archivo texto plano o txt = destino

Aqui pongo este tip, que me ha sido muy util para una práctica que me han dado en pdf, y por copy paste me salía mal. La conversión la hace perfecta excepo en los saltos de página que mete algún caracter utf extraño. Corregirlo no es más que buscar y reemplazar.

GTA IV : «Es agradable comprobar que aún quedan estúpidos que pagan»

Gran deceptción con el GTAIV para PC debido al pobrísimo rendimiento y a la falta de interes de Rockstar por la plataforma PC. He comprado 2 GTAIV y de hecho 1 de ellos sigue precintado, debido al rendimiento que hemos visto con el primero.

La realidad es que Rockstar nos ha tomado el pelo, ellos ven la plataforma PC olvidada y muerta, saben que van a vender en PC pero inviertiendo lo mínimo imprescindible. Sus directivos no tienen gran visión.

Esto lo digo en base a que he leido que se ha encontrado en el libro donde se describen los lugares de interés de Liberty City (en el cyber debe ser), donde dicen que aparece esta frase:

Es agradable comprobar que aún quedan estúpidos que pagan cuando pueden obtener todo el contenido gratis en Internet. La red ha arruinado en gran medida nuestro modelo comercial, y mi casa de vacaciones en Carraways.

Fuente :
http://www.theinquirer.es/2008/12/06/gta-iv-es-agradable-comprobar-que-aun-quedan-estupidos-que-pagan.html

Sockets : Timeout en Send() y Recv()

Bueno he encontrado una forma más fácil de hacer un timeout en los socket(anteriormente usaba la técnica de las alarmas, en total hay 3 técnicas para evitar el cuelgue indefinido), para evitar que se queden colgados en los send() y en los recv().

Tras crear el socket ponemos(para un timeout de 15 segundos por ejemplo):

//Si es TCP
if ((descriptor=socket(AF_INET, SOCK_STREAM, 0))==-1) throw Excepcion(«Error al crear el socket TCP»);
//Si es UDP
//if ((descriptor=socket(AF_INET, SOCK_DGRAM, 0))==-1) throw Excepcion(«Error al crear el socket UDP»);

//Definimos el timeout
struct timeval tv;
tv.tv_sec = 15;
tv.tv_usec = 0;
setsockopt(descriptor, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
setsockopt(descriptor, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));