python安全攻防字典脚本的编写

it2025-01-18  15

使用python编写生成密码字典的脚本需要用到itertools模块

。 3个需要用的函数:

permutation(iterable, r):返回terble中元素所有组合长度为r的项目序列,r省略则默认取iterable中项目的数量。例如itertools.Permutations(‘abc’,3),从“abc" 中按顺序排列组合长度为 3进行输出, 即abc, acb, bac, bca, cab, cba。product(*iterables[, repeat]):可以获得多个循环器的笛卡儿积。例如product(“123”,“abe”),得到的结果是la, 1b, 1c, 2a, 2b, 2c,3a, 3b, 3c。repeat(object[, times]) :这个函数的作用就是重复元素,未指定times则会一直重复。例如repeat(100),即100,100, …

接下来编写一个密码字典的生成脚本,具体步骤如下。 需要的文件:person_information,TopPwd(常用密码) person_information

目标姓名全拼:zhangwei 目标姓名简拼:zw 目标手机号码:12341564567 目标生日:19930916 目标生日(年):1993 目标生日(月/日):0916 目标QQ号:435446654 目标爱人姓名全拼:wangfang 目标爱人姓名简拼:wf 目标爱人手机号码:18945658432 目标爱人的生日:19971011 目标爱人生日(年):1997 目标爱人生日(月/日):1011 # -*- coding: utf-8 -*- import itertools def ReadInformationList(): try: informationFile = open('person_information','r') lines = informationFile.readlines() for line in lines: infolist.append(line.strip().split(':')[1]) #数据处理,获取值 except Exception as e: print(e + "\n") print("Read person_informaiton error!") def CreateNumberList(): #数字元素 words = '0123456789' itertoolsNumberList = itertools.product(words,repeat=3) #利用itertools产生不同的数字排列,数字组合长度为3 for number in itertoolsNumberList: numberList.append("".join(number)) def AddTopPwd(): try: #读取toppwd文件,并存入paaaword字典文件 informationFile = open('TopPwd','r') lines = informationFile.readlines() for line in lines: dictionaryFile.write(line) except Exception as e: print(e + "\n") print("Read TopPwd error!") def CreateSpecialList(): #添加特殊字符模块 specialwords = '`~!@#$%^&*()_+?|/<>,.' for i in specialwords: specialList.append("".join(i)) def Combination(): for a in range(len(infolist)): if (len(infolist[a]) >= 8 ): #个人信息大于8位的直接存储到字典 dictionaryFile.write(infolist[a] + "\n") else: needWords = 8 - len(infolist[a]) #个人信息不足8位的补到8位存储 for b in itertools.permutations("1234567890",needWords): dictionaryFile.write(infolist[a] + ''.join(b) + "\n") for c in range(0,len(infolist)): if (len(infolist[a] + infolist[c]) >= 8): dictionaryFile.write(infolist[a] + infolist[c] + '\n') #将个人元素两两进行拼接,大于8位输入字典 for d in range(0,len(infolist)): for e in range(0, len(specialList)): if (len(infolist[a] + specialList[e] + infolist[d] ) >= 8 ): #特殊字符加到中间 dictionaryFile.write(infolist[a] + infolist[d] + specialList[e] + "\n") #特殊字符加到尾部 dictionaryFile.write(infolist[a] + specialList[e] + infolist[d] + "\n") #加到中间 dictionaryFile.write(specialList[e] + infolist[a] + infolist[d] + "\n") dictionaryFile.close() if __name__ == "__main__": global dictionaryFile # 创建字典文件 dictionaryFile = open('passwords','w') global infolist #用户信息列表 infolist = [] global numberList #数字列表 numberList = [] global specialList specialList = [] ReadInformationList() #读取个人信息文件 CreateNumberList() #创建数字列表 CreateSpecialList() AddTopPwd() #常见密码写入字典 Combination() #主函数 print('\n' + u"字典生成成功!" + "\n" + '\n' + u"字典文件名:passwords")

kali下的crunch字典脚本学习

min 设定最小字符串长度(必选) max 设定最大字符串长度(必选) oprions -b 指定文件输出的大小,避免字典文件过大 -c 指定文件输出的行数,即包含密码的个数 -d 限制相同元素出现的次数 -e 定义停止字符,即到该字符串就停止生成 -f 调用库文件(/etc/share/crunch/charset.lst) -i 改变输出格式,即aaa,aab -> aaa,baa -I 通常与-t联合使用,表明该字符为实义字符 -m 通常与-p搭配 -o 将密码保存到指定文件 -p 指定元素以组合的方式进行 -q 读取密码文件,即读取pass.txt -r 定义重某一字符串重新开始 -s 指定一个开始的字符,即从自己定义的密码xxxx开始 -t 指定密码输出的格式 -u 禁止打印百分比(必须为最后一个选项) -z 压缩生成的字典文件,支持gzip,bzip2,lzma,7z

Crunch特殊字符

1、% 代表数字 2、^ 代表特殊符号 3、@ 代表小写字母 4、, 代表大写字符 特殊字符一般与参数 -t 配合使用

最新回复(0)