menu C7ay
Python在社会工程学密码字典中的应用
376 浏览 | 2021-07-23 | 阅读时间: 约 2 分钟 | 分类: Python | 标签: Python应用
请注意,本文编写于 493 天前,最后修改于 493 天前,其中某些信息可能已经过时。

社会工程学密码字典

密码字典主要有两部分:

  • 常见的默认密码和弱口令
  • 个人信息组成的密码
    通过搜索引擎和目标的社交网络可以了解他的基本信息

假设我们的目标名字叫作张三,单独创建一个文件存放个人信息

实际操作时可以收集目标更多的信息获得正确密码的机率就会更大
选用一个常用的弱口令密码字典,GitHub上有很多

编写密码字典使用python内置的iterable模块,常用的三个函数:

函数名作用
permutation(iterable, r)返回iterable中元素所有组合长度为r的项目序列
product(*iterables[,, repeat])笛卡尔积组合
repeat(object[, times])重复元素
# -*- coding: utf-8 -*-

import itertools

def readinformationList():
    try:
        #读取信息
        informationFile = open('persion_info.txt', 'r')
        lines = informationFile.readlines()
        for line in lines:
            infolist.append(line.strip().split(':')[1])
        # print(infolist)
    except Exception as e:
        print(e + "\n")
        print("Read persion_info error!")


def CreatNumberList():
        # 数字元素
        words = "0123456789"
        #产生不同数字排列,数字组合长度为3
        itertoolsNumberList = itertools.product(words, repeat=3)
        for number in itertoolsNumberList:
            #写入数字列表备用
            numberList.append("".join(number))


def CreatSpecialList():
    #创建特殊字符写入列表
    specialWords = "`~!@#$%^&*()?|/><,."
    for i in specialWords:
        specialList.append("".join(i))


def AddTopPwd():
    try:
        #读取Pwd文件,存入password字典文件
        informationFile = open('pwd.txt','r')
        lines = informationFile.readline()
        for line in lines:
            dictionaryFile.write(line)
    except Exception as e:
        print(e + "\n")
        print("Read pwd error!")

#字典生成算法主体
def Combination():
    for a in range(len(infolist)):
        #把个人信息大于等于8位数的直接输出到字典
        if len(infolist[a]) >= 8:
            dictionaryFile.write(infolist[a] + "\n")
        #小于8位数的个人信息,利用数字补全到8位数输出
        else:
            needWords = 8 - len(infolist[a])
            for b in itertools.permutations("1234567890", needWords):
                dictionaryFile.write(infolist[a] + ''.join(b) + '\n')
        #将个人信息元素两两互相拼接,大于等于8位的输出到字典
        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.txt','w')
    #用户信息列表
    global infolist
    infolist = []
    #数字列表
    global numberList
    numberList = []
    #特殊字符列表
    global specialList
    specialList = []
    #读取个人信息dictionaryFile
    readinformationList()
    #创建数字列表
    CreatNumberList()
    #创建特殊字符列表
    CreatSpecialList()
    #把常见密码写入字典文件
    AddTopPwd()
    #字典生成主体,将个人信息+数字列表+特殊字符列表进行组合加入字典
    Combination()
    print('\n' + u"字典生成成功!" + '\n' + '\n' + u"字典文件名:passwords")


文件夹下生成password密码字典文件

总共有三十三万多条数据,字典部分

知识共享署名-非商业性使用-转载须保留本文的署名

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!