2016-06-01 14 views
-2

Ich habe einen Zipfile-Passwort-Cracker entwickelt, der einen Brute-Force-Angriff ausführt. Das Passwort des zipfile ist 1234. Wann immer ich das Programm es gibt mir diesen Fehler laufen:BruteForce-Angriffsprogramm in Python funktioniert nicht

Traceback (most recent call last): 
    File "C:\Users\Kartikey\Desktop\cracking\bruteforce\bruteforce.py", line 51, in <module> 
    zf.extractall(password) 
    File "C:\Python27\lib\zipfile.py", line 1040, in extractall 
    self.extract(zipinfo, path, pwd) 
    File "C:\Python27\lib\zipfile.py", line 1028, in extract 
    return self._extract_member(member, path, pwd) 
    File "C:\Python27\lib\zipfile.py", line 1069, in _extract_member 
    targetpath = os.path.join(targetpath, arcname) 
    File "C:\Python27\lib\ntpath.py", line 84, in join 
    result_path = result_path + '\\' 
TypeError: can only concatenate tuple (not "str") to tuple 

Dies ist der Code:

from zipfile import ZipFile 
import itertools 
#--------------------------------------CHARECTER SET-------------------------------------- 
pincharsonlynums = '1234'  
passcharswithnonumsnocap = 'abcdefghijklmnopqrstuvwxyz' 
passcharswithnumsbtnocap = 'abcdefghijklmnopqrstuvwxyz1234567890' 
passcharswithnumsandcap = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' 
count = 1 

passwdlength = 0 

#--------------------------------------CONFIGURATION-------------------------------------- 
print "\n1. What charecter set do you want to use?" 
print "1 - 1234567890" 
print "2 - abcdefghijklmnopqrstuvwxyz" 
print "3 - abcdefghijklmnopqrstuvwxyz1234567890" 
print "4 - abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" 

#charsetchoise = input("Your choise (1/2/3/4): ") 

passwdlength = input("\n2. Enter the max length of the password you want to generate: ") 

#zipfile = input("\n3. Enter the name of the zipfile with path: ") 


#--------------------------------------START CRACKING-------------------------------------- 

while (count != 0): 
    gen = itertools.combinations_with_replacement(pincharsonlynums,passwdlength) #1 
    for password in gen:              #2 
     with ZipFile('downloads.zip') as zf: 
      # try: 
       zf.extractall(password) 
      # except: 
       # print "Failed." 

Irgendwelche Ideen?

Antwort

3

itertools.combinations_with_replacement() produziert Tupel mit einzelnen Zeichen, nicht Strings:

>>> import itertools 
>>> gen = itertools.combinations_with_replacement('1234', 3) 
>>> next(gen) 
('1', '1', '1') 

Verwenden ''.join() diese in eine Kette zu bilden:

password = ''.join(password) 

ist jedoch zu beachten, dass das erste Argument zf.extractall() ist ein Pfad, kein Passwort. Sie versuchen, den Inhalt in den Pfad zu extrahieren, der durch das generierte Kennwort angegeben wird. Ich bezweifle, dass Sie das tun wollten.

ein Passwort mit dem Argument pwd Stichwort angeben:

zf.extractall(pwd=password) 
+0

nun einen anderen Fehler erhalte ich, meine Änderungen –

+1

@KartikeyKushwaha sehen: ändern Sie bitte Ihre Frage nicht zu fragen, was ein neues Problem. Das wäre ein Thema für einen neuen Beitrag. Ihr Passwort ist falsch, fangen Sie diese Ausnahme ab und versuchen Sie eine neue. –

+0

@machineyearning: Ich weiß, du meinst es gut, aber deine Formulierung ist nicht ganz korrekt. Einen Fehler zu posten und der entsprechende Code ist ** ausgezeichnet **. Ja, mehr Forschung wäre hilfreich gewesen, aber viele Anfänger wissen nicht, wie man das macht. Das ist keine so schlechte Frage. –