0

I am trying to guess the paswords from the etc/shadow file(it has 43 user/passwords). And I have been given some hints about the passwords:

  • Length is between 4 and 8 characters
  • There can be only 2 numbers and only at the end
  • Capital letters only in the beginning

So I started just with a small group composed by 4 character with 2 digits in it. But it takes so much time to process:

import crypt
import string
import itertools
import datetime

dir = "shadow3"
file = open(dir, 'r').readlines() #Read all the 43 hashes

username = []
hashed = []
c = 0
cc = 0

for x in file: #Split the hash and the username
    usr, hshd, wtf, iss, this, thing, here, doing, example = x.split(':')
    username.append(usr)
    hashed.append(hshd)
#GRUPO1 4 caracteres 2 numeros
letters = string.ascii_lowercase
digits = string.digits
grupo1=[]
group1=itertools.product(letters,repeat=2)
group1b=itertools.product(digits,repeat=2)
for x in itertools.product(group1,group1b):  #Join the possible iterations
  string=''.join([''.join(k) for k in x])
  grupo1.append(string)
print(len(grupo1))
for y in grupo1:#Get the one of the iterations and try it 
  prueba=y
  for x in hashed: #Verify if that iteration is the password to any of the 43 users
    rehashed = crypt.crypt(prueba, x)
    if rehashed == x: #Password is found
        print('La contraseña del usuario ' + username[c] + ' es ' + prueba)
        cc = 1
    c = c + 1
if cc == 0: #after all iterations password is not found
    print('Lo sentimos "' + prueba + '" no es la contraseña de ningun usuario')

How can I improve the efficiency of this? I have a GTX 1070 if it helps for any kind of GPU processing.

1
  • 1
    If your code works without errors, Code Review might be a better place to ask on. Stack Overflow soecializes in not-working code. Commented Nov 23, 2018 at 16:24

2 Answers 2

1

I believe your code has errors. Your problem could be re-modelled so that it could be faster:

Generate all combination of possible passwords, based on your criteria - Length is between 4 and 8 characters - There can be only 2 numbers and only at the end - Capital letters only in the beginning

Generate crypt() on each of the combinations Compare passwords vs the crypted values.

Sign up to request clarification or add additional context in comments.

Comments

0

Luckily, Python comes with a profiler to help solve this kind of problem. Look at the cProfile documentation.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.