对于我来说,武术的非凡之处在于它的简单。简单是最美的,而武术也没有什么特别之处;以无法为有法,以有限为无限,是为武术最高境界。
Unix 密码破解器需要使用 Python 标准库中的 crypt 模块的 crypt() 函数,只需传入密码和盐就能返回对应的哈希密码值。
PS: 需要注意的是:crypt 模块只能在 xNIX 系统中才能使用,在 Windows 系统中会报错。
程序分为两部分,一部分是打开字典,另一部分是哈希匹配密码
① 匹配哈希密码
crypt 模块
#!/usr/bin/python3
#encoding='utf-8'
import crypt
result = crypt.crypt('zhutou','HX')
print(result)
结果
可以发现,返回的结果的前两位就是盐值(HX)
root@kali:~/桌面/script/unix密码破解器# python3 temp.py
HXs5YE43ZU2tA
② 哈希匹配密码
密码文件
zhutou1:nsnobfisnbfo
zhutou2:nsbfisnbfo
zhutou3:nsnobfsnbfo
zhutou4:nsnobfisnbf
zhutou5:nsnobisnbfo
打开密码文件,读取密码
with open('temp.txt','r') as f:
lines = f.readlines()
for line in lines:
user = line.split(':')[0] #以分号作为隔离
passwd = line.split(':')[1].strip()
print(passwd)
结果
nsnobfisnbfo
nsbfisnbfo
nsnobfsnbfo
nsnobfisnbf
nsnobisnbfo
Process finished with exit code 0
③ 整合
定义一个 testPass() 函数提取字典文件中的值加密后和密码比对,正确则输出
字典文件 dictionary.txt
root@kali:~/桌面/script/unix密码破解器# cat dictionary.txt
zhutou9
zhutou8
zhutou3
zhutou7
zhutou6
最终代码
#!/usr/bin/python3
#encoding='utf-8'
import crypt
def testPass(cryptPass):
salt = cryptPass[0:2] # 获取盐值
with open('dictionary.txt','r') as f:
lines = f.readlines()
for line in lines:
line = line.strip() # 去除换行符
cryptWord = crypt.crypt(line,salt)
if cryptWord == cryptPass:
print('Found Passwd: ', line)
return
print('Password not found!') # 如果在 for 循环不能找到密码就输出并退出
def main():
with open('password.txt','r') as f:
lines = f.readlines()
for line in lines:
user = line.split(':')[0]
passwd = line.split(':')[1].strip()
print('Cracking Password For: ',user)
testPass(passwd)
if __name__=='__main__':
main()
结果
root@kali:~/桌面/script/unix密码破解器# python3 temp.py
Cracking Password For: zhutou1
Password not found!
Cracking Password For: zhutou2
Password not found!
Cracking Password For: zhutou3
Found Passwd: zhutou3
Cracking Password For: zhutou4
Password not found!
Cracking Password For: zhutou5
Password not found!
Cracking Password For: zhutou6
Found Passwd: zhutou6
Cracking Password For: zhutou7
Found Passwd: zhutou7
猪头
2020.4.7