Python 创建黑客字典

本文告诉你什么是黑客字典,如何用python轻松的生成黑客常用的密码字典。

0x00 前提

黑客字典,其实就是一些常用的字符集合,往往包含了大量的刻意生成的字符串组合,用来暴力破解某些密码。我们可以用python,只书写几行代码,就可以迭代生成大量我们需要的字符串组合。

首先简单的介绍下用到的2个库:stringitertools

  • 介绍 string 模块中几个有用的全局变量:
    • string.letters: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    • string.printable:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
        - string.lowercase: `abcdefghijklmnopqrstuvwxyz`
      - string.uppercase: `ABCDEFGHIJKLMNOPQRSTUVWXYZ`

      * **itertools** 是python的循环器库。循环器是对象的容器,包含有多个对象。`itertools.product()` 的结果为笛卡尔积,相当于一个嵌套循环。`itertools.chain()`将多个循环器结合成单个循环器。[更多关于 itertools](https://docs.python.org/2/library/itertools.html)


      ### 0x01 代码
      ```python
      # !/usr/bin/env python
      # coding:utf-8

      import sys
      import string
      import itertools

      def get_strings():
      chars = string.printable[:10]
      strings = []
      for i in xrange(min, max + 1):
      strings.append((itertools.product(chars, repeat=i),))
      return itertools.chain(*strings)


      def make_dict(file, list_str):
      f = open(file, 'a')
      for x in list_str:
      print x
      for y in x:
      f.write("".join(y))
      f.write('\n')
      f.close()
      print 'Done'


      if __name__ == '__main__':
      if len(sys.argv) == 4:
      try:
      min = int(sys.argv[1])
      max = int(sys.argv[2])
      except:
      print "wrong"
      sys.exit(0)

      if min <= max:
      list_str = get_strings()
      file = str(sys.argv[3])
      make_dict(file, list_str)
      sys.exit(0)
      else:
      print "missing some argvs"

0x02 结果

这里我们的脚本文件为dict.py,后面的参数分别为密码的最小长度、密码的最大长度以及保存的字典文件名。上面的例子运行成功后会在脚本文件同级目录下生成一个dict.txt的字典文件,其中包含6位随机纯数字的所有组合。

0%