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.
rizzlehash/ProcessBruteForce.py

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()