You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.1 KiB
96 lines
3.1 KiB
#!/usr/bin/python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import multiprocessing
|
|
import sys
|
|
import time
|
|
|
|
tabChar = list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ")
|
|
|
|
class ProcessBrurteForce(multiprocessing.Process):
|
|
def __init__(self,queue, idx, nbInstence,password, clef, limite, verbose):
|
|
super().__init__()
|
|
self.queue = queue
|
|
self.idx = idx
|
|
self.nbInstence = nbInstence
|
|
|
|
#la queue contien 3 valeur :int useCase = 0, boolean found, list passTrouve
|
|
#la queue contien 5 valeur :int useCase = 1, nbMots, time secondes , list motEnCours nom du thread
|
|
#useCase = 0, on remonte les information contenant le mot Trouvé ou non
|
|
#useCase = 1, on remonte des information sur les performances
|
|
#gestion du temps
|
|
self.nbMot = 0
|
|
self.procTime = time.time()
|
|
self.verbose = verbose
|
|
|
|
self.password = password
|
|
self.clef = clef
|
|
self.limite = limite
|
|
self.tabPass = list("a")
|
|
self.isFound = False
|
|
return
|
|
|
|
def testSpeed(self):
|
|
self.nbMot = self.nbMot+1
|
|
if (time.time() - self.procTime) > 5 :
|
|
self.queue.put([1,self.nbMot,time.time() - self.procTime, "".join(self.tabPass),multiprocessing.current_process().name])
|
|
self.nbMot = 0
|
|
self.procTime = time.time()
|
|
|
|
def run(self):
|
|
#print(multiprocessing.current_process().name + "\tStart")
|
|
found , passTrouve = self.checkChar(0)
|
|
if not found:
|
|
|
|
while not found and len(self.tabPass) < self.limite:
|
|
indexMin = round((len(tabChar)/self.nbInstence)*self.idx)
|
|
indexMax = round(indexMin + (len(tabChar)/self.nbInstence))
|
|
self.tabPass = self.tabPass + list(tabChar[indexMin])
|
|
if( self.idx == self.nbInstence - 1 ):
|
|
indexMax = len(tabChar)
|
|
for i in range(indexMin,indexMax):
|
|
self.tabPass[len(self.tabPass)-1] = tabChar[i]
|
|
found,passTrouve =self.recursiveFunction(len(self.tabPass)-2)
|
|
if found == True:
|
|
#la queue contien 2 valeur : boolean found, list passTrouve
|
|
#la queue contien 4 valeur : nbMots, time secondes , list motEnCours nom du thread
|
|
self.queue.put([0,found, passTrouve])
|
|
return None
|
|
|
|
print(multiprocessing.current_process().name + "\tStop")
|
|
#la queue contien 2 valeur : boolean found, list passTrouve
|
|
#la queue contien 4 valeur : nbMots, time secondes , list motEnCours nom du thread
|
|
self.queue.put([0,found, passTrouve])
|
|
return None
|
|
|
|
def recursiveFunction(self,index):
|
|
found , passTrouve = self.checkChar(index)
|
|
if index > 0 and not found:
|
|
for char in tabChar :
|
|
self.tabPass[index] = char
|
|
found, passTrouve =self.recursiveFunction(index-1)
|
|
if found == True :
|
|
passTrouve = "".join(self.tabPass)
|
|
return found, passTrouve
|
|
|
|
return found, passTrouve
|
|
|
|
#Cette fonction permet de replacer le dernier caractère de la Chaine
|
|
def checkChar(self,index):
|
|
found = False
|
|
passTrouve = ""
|
|
for char in tabChar:
|
|
if self.verbose:
|
|
self.testSpeed()
|
|
self.tabPass[index] = char
|
|
if "".join(self.tabPass) == self.password:
|
|
found=True
|
|
passTrouve = "".join(self.tabPass)
|
|
return found, passTrouve
|
|
#print("".join(self.tabPass))
|
|
return found, passTrouve
|
|
|
|
|
|
#si le fichier est lancé seul
|
|
if __name__ == '__main__' :
|
|
sys.exit() |