Skip to content

Commit ac6066e

Browse files
added bruteforce
1 parent 30e51e5 commit ac6066e

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

BruteForce.py

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
from itertools import product
2+
3+
def findPassword(chars,function,show=50,format_="%s"):
4+
"""
5+
Essa função encontra e retorna uma senha e retorna o número de tentativas.
6+
7+
Param chars: Dígitos que uma senha pode ter.
8+
9+
Param function: Função que obrigatóriamente deve ter um parâmetro para
10+
receber um senha. Caso o retorna dessa função seja True, a senha tentada
11+
é considerada a correta.
12+
13+
Param show: Mostra uma tentativa a cada X tentativas.
14+
15+
Param format_: Formato em que a senha será impressa.
16+
"""
17+
18+
password = None
19+
attempts = 0
20+
size = 1
21+
stop = False
22+
23+
while not stop:
24+
25+
# Obtém todas as combinações possíveis com os dígitos do parâmetro "chars".
26+
for pw in product(chars,repeat=size):
27+
28+
password = "".join(pw)
29+
30+
# Imprime a senha que será tentada.
31+
if attempts % show == 0:
32+
print(format_%password)
33+
34+
# Verifica se a senha é a correta.
35+
if function(password):
36+
stop = True
37+
break
38+
else:
39+
attempts += 1
40+
size += 1
41+
42+
return password,attempts
43+
44+
45+
def getChars():
46+
"""
47+
Método para obter uma lista contendo todas as
48+
letras do alfabeto e números.
49+
"""
50+
chars = []
51+
52+
# Acrescenta à lista todas as letras maiúsculas
53+
for id_ in range(ord("A"),ord("Z")+1):
54+
chars.append(chr(id_))
55+
56+
# Acrescenta à lista todas as letras minúsculas
57+
for id_ in range(ord("a"),ord("z")+1):
58+
chars.append(chr(id_))
59+
60+
# Acrescenta à lista todos os números
61+
for number in range(10):
62+
chars.append(str(number))
63+
64+
return chars
65+
66+
67+
68+
# Se este módulo não for importado, o programa será testado.
69+
# Para realizar o teste, o usuário deverá inserir uma senha para ser encontrada.
70+
71+
if __name__ == "__main__":
72+
73+
import datetime
74+
import time
75+
76+
# Pede ao usuário uma senha
77+
pw = input("\n Type a password: ")
78+
print("\n")
79+
80+
def testFunction(password):
81+
"""
82+
Função que será usada para fazer o teste.
83+
Podemos pensar nela por exemplo como uma função
84+
que tenta se conectar a um site utilizando a
85+
senha passada no parâmetro "password".
86+
"""
87+
global pw
88+
if password == pw:
89+
return True
90+
else: return False
91+
92+
# Obtém os dígitos que uma senha pode ter
93+
chars = getChars()
94+
95+
t = time.process_time()
96+
97+
# Obtém a senha encontrada e o múmero de tentativas
98+
password,attempts = findPassword(chars,testFunction,show=1000,format_=" Trying %s")
99+
100+
t = datetime.timedelta(seconds=int(time.process_time()-t))
101+
input("\n\n Password found: {}\n Attempts: {}\n Time: {}\n".format(password,attempts,t))
102+

0 commit comments

Comments
 (0)