From ac6066e8edb27815620c75d74d41dcd986b4a44c Mon Sep 17 00:00:00 2001 From: JeanExtreme002 Date: Sun, 29 Sep 2019 22:13:18 -0300 Subject: [PATCH] added bruteforce --- BruteForce.py | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 BruteForce.py diff --git a/BruteForce.py b/BruteForce.py new file mode 100644 index 00000000000..b434eb07d46 --- /dev/null +++ b/BruteForce.py @@ -0,0 +1,102 @@ +from itertools import product + +def findPassword(chars,function,show=50,format_="%s"): + """ + Essa função encontra e retorna uma senha e retorna o número de tentativas. + + Param chars: Dígitos que uma senha pode ter. + + Param function: Função que obrigatóriamente deve ter um parâmetro para + receber um senha. Caso o retorna dessa função seja True, a senha tentada + é considerada a correta. + + Param show: Mostra uma tentativa a cada X tentativas. + + Param format_: Formato em que a senha será impressa. + """ + + password = None + attempts = 0 + size = 1 + stop = False + + while not stop: + + # Obtém todas as combinações possíveis com os dígitos do parâmetro "chars". + for pw in product(chars,repeat=size): + + password = "".join(pw) + + # Imprime a senha que será tentada. + if attempts % show == 0: + print(format_%password) + + # Verifica se a senha é a correta. + if function(password): + stop = True + break + else: + attempts += 1 + size += 1 + + return password,attempts + + +def getChars(): + """ + Método para obter uma lista contendo todas as + letras do alfabeto e números. + """ + chars = [] + + # Acrescenta à lista todas as letras maiúsculas + for id_ in range(ord("A"),ord("Z")+1): + chars.append(chr(id_)) + + # Acrescenta à lista todas as letras minúsculas + for id_ in range(ord("a"),ord("z")+1): + chars.append(chr(id_)) + + # Acrescenta à lista todos os números + for number in range(10): + chars.append(str(number)) + + return chars + + + +# Se este módulo não for importado, o programa será testado. +# Para realizar o teste, o usuário deverá inserir uma senha para ser encontrada. + +if __name__ == "__main__": + + import datetime + import time + + # Pede ao usuário uma senha + pw = input("\n Type a password: ") + print("\n") + + def testFunction(password): + """ + Função que será usada para fazer o teste. + Podemos pensar nela por exemplo como uma função + que tenta se conectar a um site utilizando a + senha passada no parâmetro "password". + """ + global pw + if password == pw: + return True + else: return False + + # Obtém os dígitos que uma senha pode ter + chars = getChars() + + t = time.process_time() + + # Obtém a senha encontrada e o múmero de tentativas + password,attempts = findPassword(chars,testFunction,show=1000,format_=" Trying %s") + + t = datetime.timedelta(seconds=int(time.process_time()-t)) + input("\n\n Password found: {}\n Attempts: {}\n Time: {}\n".format(password,attempts,t)) +