Программа атаки BruteForce в Python не работает
Я разработал взломщик паролей zipfile, который осуществляет атаку методом перебора. Пароль zipfile - 1234. Когда я запускаю программу, она выдает мне эту ошибку:
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
Это код:
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."
Есть идеи?
1 ответ
itertools.combinations_with_replacement()
создает кортежи с отдельными символами, а не со строками:
>>> import itertools
>>> gen = itertools.combinations_with_replacement('1234', 3)
>>> next(gen)
('1', '1', '1')
использование ''.join()
чтобы сформировать их в одну строку:
password = ''.join(password)
Обратите внимание, что первый аргумент zf.extractall()
это путь, а не пароль. Вы пытаетесь извлечь содержимое в путь, названный сгенерированным паролем. Я сомневаюсь, что это то, что вы хотели сделать.
Укажите пароль с помощью pwd
Ключевой аргумент:
zf.extractall(pwd=password)