Advertisement
Guest User

Untitled

a guest
Sep 26th, 2018
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.47 KB | None | 0 0
  1. #! /usr/bin/python3
  2.  
  3. import crypt
  4. import multiprocessing
  5. import time
  6.  
  7. #PASSWORD_FILE = 'crackstation-human-only.txt'
  8. #PASSWORD_FILE = '1mpass.txt'
  9. PASSWORD_FILE = '100000passwords.txt'
  10. SHADOW_FILE = 'shadow'
  11.  
  12. def createList(CPU):
  13.   count = 0
  14.   pDict=[]
  15.   print("Loading Dictionary...", end = "")
  16.   for row in range(CPU):
  17.     pDict += [[]]
  18.   with open(PASSWORD_FILE, 'r', encoding = 'latin-1') as f:
  19.     for line in f:
  20.       pDict[count%CPU].append(line.rstrip())
  21.       count += 1
  22.   print("\rDictionary Loaded     ")
  23.   return pDict
  24.  
  25. def crack(wordBank, procData, progress, found, lock, core):
  26.   salt = procData['salt']
  27.   origHash = procData['origHash']
  28.   for pWord in wordBank:
  29.     progress.value += 1
  30.     if crypt.crypt(pWord, salt) == origHash:
  31.       with lock:
  32.         procData['password'] = pWord
  33.       found.set()
  34.       iFoundIt = True
  35.     if found.is_set():
  36.       break
  37.   found.set()
  38.  
  39. def main():
  40.   CPU = multiprocessing.cpu_count()
  41.   lock = multiprocessing.Lock()
  42.   procData = multiprocessing.Manager()
  43.   procData = procData.dict()
  44.   found = multiprocessing.Event()
  45.   print("Cores Detected: " + str(CPU))
  46.   pList = createList(CPU)
  47.   with open(SHADOW_FILE, 'r') as shadow:
  48.     for line in shadow:
  49.       line = line.split(":")
  50.       procData['origHash'] = line[1]
  51.       if line[1][:1] == "$":
  52.         progress = multiprocessing.Value('i', 0)
  53.         procData['password'] = ""
  54.         procData['done'] = 0
  55.         procData['user'] = line[0]
  56.         line = line[1]
  57.         line = line.split("$")
  58.         procData['salt'] = "$" + line[1] + "$" + line[2]
  59.         print("\nAttempting to crack password for user: " + procData['user'])
  60.         for i in range(CPU):
  61.           p = multiprocessing.Process(target=crack, args=(pList[i], procData, progress, found, lock, i))
  62.           p.start()
  63.         while not found.is_set():
  64.           print("\rStatus: In Progress... " + "[" + str(progress.value) + "/" + str(len(pList[0]*CPU)) + "] - " + str(int(round(progress.value/len(pList[0]*4)*100, 2))) + "%     ",end = "")
  65.           time.sleep(.250)
  66.         time.sleep(.05)
  67.         found.clear()
  68.         if procData['password']:
  69.           print("\rStatus: SUCCESS!                                                        \n")
  70.           print("\tUsername: " + procData['user'])
  71.           print("\tPassword: " + procData['password'])
  72.         else:
  73.           print("\rStatus: Unable to crack password for user: " + procData['user'])
  74.  
  75. if __name__ == '__main__':
  76.   main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement