Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/python3
- import crypt
- import multiprocessing
- import time
- #PASSWORD_FILE = 'crackstation-human-only.txt'
- #PASSWORD_FILE = '1mpass.txt'
- PASSWORD_FILE = '100000passwords.txt'
- SHADOW_FILE = 'shadow'
- def createList(CPU):
- count = 0
- pDict=[]
- print("Loading Dictionary...", end = "")
- for row in range(CPU):
- pDict += [[]]
- with open(PASSWORD_FILE, 'r', encoding = 'latin-1') as f:
- for line in f:
- pDict[count%CPU].append(line.rstrip())
- count += 1
- print("\rDictionary Loaded ")
- return pDict
- def crack(wordBank, procData, progress, found, lock, core):
- salt = procData['salt']
- origHash = procData['origHash']
- for pWord in wordBank:
- progress.value += 1
- if crypt.crypt(pWord, salt) == origHash:
- with lock:
- procData['password'] = pWord
- found.set()
- iFoundIt = True
- if found.is_set():
- break
- found.set()
- def main():
- CPU = multiprocessing.cpu_count()
- lock = multiprocessing.Lock()
- procData = multiprocessing.Manager()
- procData = procData.dict()
- found = multiprocessing.Event()
- print("Cores Detected: " + str(CPU))
- pList = createList(CPU)
- with open(SHADOW_FILE, 'r') as shadow:
- for line in shadow:
- line = line.split(":")
- procData['origHash'] = line[1]
- if line[1][:1] == "$":
- progress = multiprocessing.Value('i', 0)
- procData['password'] = ""
- procData['done'] = 0
- procData['user'] = line[0]
- line = line[1]
- line = line.split("$")
- procData['salt'] = "$" + line[1] + "$" + line[2]
- print("\nAttempting to crack password for user: " + procData['user'])
- for i in range(CPU):
- p = multiprocessing.Process(target=crack, args=(pList[i], procData, progress, found, lock, i))
- p.start()
- while not found.is_set():
- print("\rStatus: In Progress... " + "[" + str(progress.value) + "/" + str(len(pList[0]*CPU)) + "] - " + str(int(round(progress.value/len(pList[0]*4)*100, 2))) + "% ",end = "")
- time.sleep(.250)
- time.sleep(.05)
- found.clear()
- if procData['password']:
- print("\rStatus: SUCCESS! \n")
- print("\tUsername: " + procData['user'])
- print("\tPassword: " + procData['password'])
- else:
- print("\rStatus: Unable to crack password for user: " + procData['user'])
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement