Autor Tema: Alguien se defiende en codigo python ?¿  (Leído 5203 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14471
Alguien se defiende en codigo python ?¿
« en: 12-04-2015, 04:32 (Domingo) »
Creo que una vez ya lo comente , pero sigue sin resolver.

Puede ser bastante desagradable.


el generador de diccionarios ,  "generadordiccio" , ...tiene el parametro LONGITUD , para definir pero lo que hace es

generar desde 0 caracteres hasta el tope que le pongamos en LONGITUD

si por ejemplo , pones longitud 8 , caracteres 123

pues empieza generando de 8

11111111
11111112
11111113


PERO , cuando se acaban las cobninaciones de 8 , sigue generando ,todas las de longitud 7  ...  6  ...5

creando un diccionario , mas grande de la cuenta , ademas metiendo muchas keys que no valen (menos de 8 no valen en wpa/wpa2)  ,   si es un ordenador lento , puede traducirse en horas de soplar al aire ..por que no valdra de nada.


LONGITUD 8 , es el menor de los dramas ...

imagina que haces de longitud 10 , pues cuando acaba las combinaciones de longitud 10 , tambien va a generar las de longitud 9 , 8 ,7 .6 ....

es un bug , relativamente gordo.


podeis probar a generar un txt de longitud 8  con caracteres 1234 , asi sera pequeño y podreis verlo con ele ditor de texto ...  pues mirad al final del dicc ... y vereis lo que digo.


dejo el code, por si alguien sabe como reparar eso ...


__________________________________________________________________________________________________________

Código: [Seleccionar]
#!/usr/bin/python
#
# :: Invasion Tux
# :: Ultima modificacion : miercoles, 14 de enero de 2009
# :: Script realizado por makiolo (makiolo@gmail.com) (Licencia Creative Commons con reconocimiento)
# :: Ultima version : http://blogricardo.wordpress.com/2008/12/28/script-para-generar-diccionarios-de-fuerza-bruta/
# :: Dependencias : python
#

import sys, math
from time import time, localtime, strftime

########################### CONFIGURACION #########################

LONGITUD = 8
ALFABETO = "abcde"

####################################################################

########################## FUNCIONES ###############################
def getVariacionesConRepeticion(ALFABETO , LONGITUD):
  sumatorio = 0
  for i in range(LONGITUD):
    producto = 1
    for j in range(i+1):
      producto = producto * len(ALFABETO)
    sumatorio = sumatorio + producto
  return sumatorio

def eventoPalabraGenerada(palabra):
  print palabra

####################################################################

##################### VARS AUXILIARES ##############################
DEBUG = True
VERBOSE = True
variacionesConRepeticion = getVariacionesConRepeticion(ALFABETO , LONGITUD)
inicioReloj = time()
cont = 0
progreso = 0
####################################################################

while LONGITUD > 0:
  try:
    contadores = []                                                     # ponemos los contadores a 0
    for i in range(LONGITUD):
      contadores.append(0)

    fin = False
    while not fin:
      if DEBUG == True:
        palabra=[] # Creas una lista vacia (y liberas de paso)
        for i in range(LONGITUD):
          palabra.append(ALFABETO[contadores[i]]) # Vas metiendo al final letra a letra
        eventoPalabraGenerada("".join(palabra)) # Envias a tu callback tada la lista unida

      if VERBOSE == True:
        if (cont % 600000 == 0) and (cont != 0):
          progreso = cont*100.0/variacionesConRepeticion                # porcentaje hasta ahora
          progreso = round(progreso , 2)
          finReloj = time() - inicioReloj                               # finReloj es lo que esta tardando el calculo
          velocidad = cont / finReloj                                   # palabras procesadas por segundo
          velocidad = round(velocidad , 2)
          estimado = finReloj * variacionesConRepeticion / cont         # es lo que se estima en realizar todo el proceso
          restante = estimado - finReloj                                # es lo que se estima en realizar lo restante
          restante = restante / 60 / 60                                 # lo pasamos a horas
          restante = round(restante , 2)
          sys.stderr.write(str(progreso)+"% - Quedan "+str(restante)+" horas. La velocidad es de "+str(velocidad)+" palabras/seg\n")

      cont = cont + 1
      actual = LONGITUD - 1                                             # Pongo actual a la derecha del todo
      contadores[actual] = contadores[actual] + 1                       # Sumo 1 a las unidades

      while(contadores[actual] == len(ALFABETO)) and not fin:           # Propago el carry
        if(actual == 0):
          fin = True                                                    # FIN
        else:
          contadores[actual] = 0                                        # reinicia el actual contador
          actual = actual - 1                                           # avanza a la izquierda
          contadores[actual] = contadores[actual] + 1                   # y le sumo 1

    LONGITUD = LONGITUD - 1                                             # combinaciones para uno menos

  except KeyboardInterrupt:
    sys.stderr.write("Interrumpido por el usuario\n")
    fin = True                                                          # Fuerzo las condiciones de salida
    LONGITUD = 0

if VERBOSE == True:
  sys.stderr.write("Terminado al "+str(progreso)+"% - Realizadas "+str(cont)+" combinaciones de "+str(variacionesConRepeticion)+"\n")





Desconectado geminis_demon

  • Colaborador
  • *
  • Mensajes: 2383
  • Prácticas precisas precisan práctica
Re: Alguien se defiende en codigo python ?¿
« Respuesta #1 en: 12-04-2015, 04:43 (Domingo) »
Yo es que directamente quitaría ese script de la iso, me parece muy precario eso de tener que editar el script para configurar la longitud, caractreres y demás..

En sus tiempos vino bien, pero ahora todo lo que se puede hacer con ese script se puede hacer con crunch y de una forma mas cómoda y efectiva.

La luz cree que viaja más rápido que cualquier otra cosa, pero se equivoca; da lo mismo lo rápido que pueda viajar, porque al final, la luz descubre que la oscuridad ha llegado antes que ella, y la está esperando.

Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14471
Re: Alguien se defiende en codigo python ?¿
« Respuesta #2 en: 12-04-2015, 04:47 (Domingo) »
Reposteo para un comment personal

esto aun tengo que verificarlo ...pero ,

diccionario generado con generadordiccio.py  al pasarlo , las keys , se leen mas lentas que con diccionarios generados con otras tools.


en un test rapido ,

generadordiccio , su txt  pasaba por mi maquina de pruebas a    156.000 k/s
mismo diccionario generado con wg4crack o wg.pl   pasaba a      175.000 k/s

no se cuando , pero creo que hare un test/comparativa  de generadores de diccionario , por que me ha llamado bastante la atencion ese dato.

la prueba la hice con ficheros de texto en el hdd , uesto que si jugara con pipes , esta claro que la velocidad podria variar mucho , dependiendo de como de rapido sea el generador, pero como digo , los dicos estaban hechos , misma longitud mismo chart.


me di cuenta de lo del generador diccio , por que hashcat al final siempre ponia 9% keys REJECTED

osea rechazadas , y claro , ... cuando empiezan a entrar keys de longitud 7 , las rechaza todas.  ;D

Fr3dY

  • Visitante
Re: Alguien se defiende en codigo python ?¿
« Respuesta #3 en: 12-04-2015, 09:59 (Domingo) »
¿Has probado si la última versión disponible en https://blogricardo.wordpress.com/2008/12/28/script-para-generar-diccionarios-de-fuerza-bruta/ se comporta igual? Es de diciembre de 2009 (el código que has posteado es del 14 de enero).

Edito: según el propio autor, es el comportamiento esperado: "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"
Esta tarde puede que tenga un rato, a ver si miro esto y alguna cosa pendiente que tengo.



Saludos
« Última modificación: 12-04-2015, 10:02 (Domingo) por Fr3dY »

vk496

  • Visitante
Re: Alguien se defiende en codigo python ?¿
« Respuesta #4 en: 12-04-2015, 13:02 (Domingo) »
Creo que es sencillo. Donde pone

while LONGITUD > 0:

Pues deberías cambiar el 0 por un 7

Así te aseguras que salga del bucle cuando empiece a generar palabras inferiores a 8 caracteres.

Viendo el código por encima, veo algún que otro bucle dentro de otro. Esto implica que tenga que hacerse mas cosas, y por ende, mas lento.

Si saco tiempo, intentaré mirar algo a ver si se puede mejorar

Salu2


Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14471
Re: Alguien se defiende en codigo python ?¿
« Respuesta #5 en: 12-04-2015, 20:27 (Domingo) »
Creo que es sencillo. Donde pone

while LONGITUD > 0:

Pues deberías cambiar el 0 por un 7

Así te aseguras que salga del bucle cuando empiece a generar palabras inferiores a 8 caracteres.

Viendo el código por encima, veo algún que otro bucle dentro de otro. Esto implica que tenga que hacerse mas cosas, y por ende, mas lento.

Si saco tiempo, intentaré mirar algo a ver si se puede mejorar

Salu2



NO , no lo he probado , pero la logica me da la razon.

No quiere que deje de generar las de menos de 7 ,

si no que tanto inicio como fin , se ajusten a LONGITUD

si pongo longitud 9 , quiero solo keys de longiud  9 , , si mete tambien de 8 , el diccionario sera mas grande y no se ajustara a lo que quiero LONGITUD


Inicio y Fin , = LONGITUD  , ni mas ni menos.

si estoy en un escenario donde se sabe por ejemplo  ONO , tiene muchos routers de longitud 10 numerica en la key  ¿para que quiero generar las de longitud 8 y 9 ?  ... el diccionario va a ser mas grande, con lo que mas tiempo en generarlo , mas espacio al guardarlo y mucho mas tiempo al pasarlo.