因为在平常的爆破中,通常的密码字典都是弱口令的合集或者一些简单的排列组合,说是碰运气还是还是捡漏,生成一个全随机的字典会不会更类似与用运气去爆破
1.代码逻辑
一、模块导入
import random
导入随机选择模块,这里只需要这个模块就可以实现,当然还有更多更便捷的方法。
二、字典的建立
grammar_rule='''
密码 = 字母组 | 数字组 | 字母组 数字组 | 数字组 字母组 | 数字组 字母组 数字 | 数字组 字母 数字组 | 数字组 数字 字母组 | 字母组 数字组 字母 | 数字组 符号 字母组 | 字母组 符号 数字组
字母组 = 字母 字母 | 字母 字母 字母 | 字母 字母 字母 字母 | 字母 字母 字母 字母
数字组 = 数字 | 数字 数字 | 数字 数字 数字 | 数字 数字 数字 数字 | 数字 数字 数字 数字 数字 | 数字 数字 数字 数字 数字 | 数字 数字 数字 数字 数字 数字
字母 = a | b | c | d | e | f | e | h | i | j | k | l | m | n | o | p | q | i | s | t | u | v | w | x | y | z
数字 = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
符号 = , | . | ; | - | + | @
'''
这里建立的字典是需要有明确的逻辑关系的,就是从上到下都必须存在对应关系,同时也可以进行更多自己想要字典,专门那些字母或者数字组成,同时也可以限制字数。
三、循环函数
def CH_grammar(rule):
grammar=dict()
for line in rule.split('\n'):
if not line.split():continue #去掉空行
# print(line)#结果等号左边为结果,右边为拓展。
a,b = line.split('=')
bs = b.split('|')
# print(a)
# print(bs)
grammar[a.strip()]= [c.strip() for c in bs]
return grammar
# def get_bs(a,grammar):
# return grammar[a]
# if __name__ == '__main__':
# print(get_bs('句子',CH_grammar(grammar_rule)))
def g(a,grammar):
if a not in grammar:return a
b=random.choice(grammar[a])
return ''.join([g(c,grammar) for c in b.split()])
在写这一部分的时候要按着上面字典的构造来决定替换的符号,总而言之就是整体的逻辑性要跟上。
四、函数入口
if __name__ == '__main__':
for i in range(1000):
with open('弱口令密码.txt','a', encoding='utf8') as z:
text = (g('密码', CH_grammar(grammar_rule)))
z.write(f'\n{text}')
这里决定了你字典有多少组,也就是循坏次数
2.运行结果
生成的字典是和代码在同一个文件夹的
版权声明:本文为qq_50556869原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。