天天看点

【Python脚本进阶】1.3、第一个脚本:UNIX口令破解机

目录

​​一、简介:​​

​​1.1、概述:​​

​​1.2、crypt:​​

​​二、示例:​​

​​2.1、示例1:​​

​​2.2、示例2:​​

​​思路:​​

​​main()函数​​

​​testPass()函数​​

​​2.3、注:​​

​​split():​​

​​2.4、总结:​​

一、简介:

1.1、概述:

编写UNIX口令破解机时,需使用UNIX计算口令hash的crypt()算法

The crypt module is not supported on Windows(Windows不支持crypt模块)

1.2、crypt:

crypt.crypt(word, salt=None)

验证 Unix 口令的函数

启动Python 解释器,Python 标准库中已自带有crypt 库。要计算一个加密的UNIX 口令hash, 只需调用函数crypt.crypt(), 并将口令和salt作为参数传递给它。该函数会以字符串形式返回口令的hash

【Python脚本进阶】1.3、第一个脚本:UNIX口令破解机
【Python脚本进阶】1.3、第一个脚本:UNIX口令破解机

二、示例:

2.1、示例1:

明文是单词egg 和salt 就是开头的两个字节是HX

使用crypt()函数快速计算口令的hash。将库导入之后, 我们将口令“ egg" 与salt"HX"传递给函数。该函数返回口令的hash一一字符串为“ HX9LLTdc/jiDE" 。

​>>> import crypt >>> crypt.crypt("egg","HX") 'HX9LLTdc/jiDE'​

【Python脚本进阶】1.3、第一个脚本:UNIX口令破解机

2.2、示例2:

思路:

可以编写一个程序来遍历整个字典, 将每一个单词加上指定的salt 的计算结果都与加密的口令hash 做比较

首先要创建两个函数: main 和testpass。根据各自特定的作用, 将程序分隔成相互独立的函数,便于重用代码,易于阅读。

main()函数

用main 函数打开加密口令文件” password.txt", 并逐行读取口令文件中的内容。每一行中的用户名和口令hash 都是分隔开的。对每个口令hash, main 函数都调用testPass()函数, 尝试用字典中的单词破解它。

testPass()函数

testPass()函数会以参数形式获得加密的口令hash, 并在找到密码或搜遍字典无果后返回。要注意的是, 该函数首先将加密的口令hash 的前两个字符视为salt, 并提取出来。然后, 它打开字典并遍历字典中的每个单词, 用每个单词和salt 计算一个新的加密口令hash。

如果计算结果与我们加密口令hash 匹配, 函数会打印一条消息显示找到密码, 并返回。否

则, 它会在词库中继续对每个单词进行测试。

​​import crypt
def testPass(cryptPass):
    salt = cryptPass[0:2]
dictFile = open ('dictionary.txt', 'r')
for word in dictFile.readlines():
        word = word.strip( '\n' )
        cryptWord = crypt.crypt(word, salt)
        if cryptWord==cryptPass:
            print("Found Password: " + word + "\n")
        print("Password Not Found.\n")
        



def main():
    passFile = open('passwords. txt')
    for line in passFile.readlines():
        if ":" in line:
            user = line.split(':')[0]
            cryptPass = line.split(':')[1].strip(' ')
            print("Cracking Password For: " + user)
            testPass(cryptPass)

if __name__ == '__main__':
    main()​​      
【Python脚本进阶】1.3、第一个脚本:UNIX口令破解机

2.3、注:

split():

简介:

通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串

语法:

str.split(str="", num=string.count(str)).

str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。

num -- 分割次数。默认为 -1, 即分隔所有。

返回分割后的字符串列表。

2.4、总结: