zoukankan      html  css  js  c++  java
  • Python 黑客 --- 002 入门级 ZIP压缩文件口令暴力破解机

    Python 黑客 入门级实战:ZIP压缩文件口令暴力破解机

    使用的系统:Ubuntu 14.04 LTS
    Python语言版本:Python 2.7.10 V


    编写zip 压缩文件口令破解器需要使用到Python 内自带的一个库:zipfile库。

    Step 1 .
    在终端中输入 python,启动Python交互终端。

    aobosir@ubuntu:~$ python
    Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
    [GCC 4.8.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 

    使用 help() 函数来查看 zipfile 。执行下面的命令来进一步了解 zipfile 这个库。

    >>> help('zipfile')

    输出:(内容太多,这里只截个图,自己看吧。也可以不用看,因为下面我就使用我自己的语言来介绍这个zipfile库如何使用。)

    这里写图片描述

    键盘输入 q 退出 help() 函数。

    Step 2 . 我们先建立一个加密的zip压缩文件:

    1. 创建一个文件,取名为:evil

    这里写图片描述

    1. 对文件右键,选择:Compress… 压缩

    这里写图片描述

    1. 选择 .zip 格式,并设置密码为:secret。点击 Create 创建。

    这里写图片描述

    1. 现在这个带有口令的 zip 文件就创建出来的。现在我们将原来的evil文件删除掉:

    这里写图片描述

    版本1 使用正确的密码对带有口令的zip文件进行解压

    Step 3 .

    在刚刚创建的带有口令的 zip 文件的路径下,新建一个Python脚本文件取名为:1-4-4-zipCrack.py

    这里写图片描述

    现在,使用 zipfile 库来编写一个简单的解压缩文件的程序:

    import zipfile
    zFile = zipfile.ZipFile("evil.zip")
    zFile.extractall(pwd="secret")

    Step 4 .

    接着,运行这个python脚本:

    $ ls
    1-4-4-zipCrack.py  evil.zip
    $ python 1-4-4-zipCrack.py
    $ ls
    1-4-4-zipCrack.py  evil  evil.zip

    解压成功。

    版本2 加入异常处理程序

    Step 5 . 删除刚刚解压出来的文件 evil

    $ rm evil
    $ ls
    1-4-4-zipCrack.py  evil.zip

    Step 6 . 继续完善程序,加入异常处理程序,我们给 extractall(p) 函数的 pwd 参数传入错误的密码:

    import zipfile
    zFile = zipfile.ZipFile("evil.zip")
    try:
        zFile.extractall(pwd="oranges")
    except Exception, e:
        print e
    

    Step 7 . 运行程序

    $ python 1-4-4-zipCrack.py
    ('Bad password for file', <zipfile.ZipInfo object at 0xb742162c>)

    因为口令错误,所以抛出异常。

    版本3 读取一个字典文件,使用字典文件中的所有单词对带有口令的zip文件进行暴力破解

    我们在程序里面读取一个字典文件(下载:dictionary.txt),里面存储的都是常用单词,对每一个单词都测试,是否是Zip文件的口令。

    Step 8 . 升级后的程序,如下

    import zipfile
    zFile = zipfile.ZipFile("evil.zip")
    passFile = open('dictionary.txt')
    
    for line in passFile.readlines():
            password = line.strip('
    ')
            try:
                    zFile.extractall(pwd=password)
                    print '[+] Password = ' + password + '
    '
                    exit(0)
            except Exception, e:
                    print e
    

    Step 9 . 运行脚本:

    $ ls
    1-4-4-zipCrack.py  dictionary.txt  evil.zip
    $ python 1-4-4-zipCrack.py 
    ('Bad password for file', <zipfile.ZipInfo object at 0xb743962c>)
    ('Bad password for file', <zipfile.ZipInfo object at 0xb743962c>)
    ('Bad password for file', <zipfile.ZipInfo object at 0xb743962c>)
    ('Bad password for file', <zipfile.ZipInfo object at 0xb743962c>)
    ('Bad password for file', <zipfile.ZipInfo object at 0xb743962c>)
    [+] Password = secret
    
    $ ls
    1-4-4-zipCrack.py  dictionary.txt  evil  evil.zip

    成功解压

    版本4 整理程序,将部分功能代码模块化

    Step 10 . 整理程序: 用函数将部分功能代码模块化。在程序里面并没有添加任何新的功能。

    import zipfile
    def extractFile(zFile, password):
        try:
            zFile.extractall(pwd=password)
            return password
        except:
            return
    
    def main():
        zFile = zipfile.ZipFile("evil.zip")
        passFile = open('dictionary.txt')
        for line in passFile.readlines():
            password = line.strip('
    ')
            guess = extractFile(zFile, password)
            if guess:
                print '[+] Password = ' + password + '
    '
                exit(0)
    
    if __name__ == '__main__':
        main()
    

    你可以自己运行试试看,这里就不运行了。

    版本5 多线程同时测试字典中的多个口令

    之前的版本,都是逐个测试字典词库中的单词,同一时间只测试一个单词。这次的版本利用线程同时测试字典中的多个单词。

    Step 11 . 删除刚刚解压出来的文件 evil

    $ rm evil
    $ ls
    1-4-4-zipCrack.py  dictionary.txt  evil.zip

    Step 12 .
    升级后的程序

    import zipfile
    from threading import Thread
    def extractFile(zFile, password):
            try:
                    zFile.extractall(pwd=password)
                    print '[+] Found password = ' + password + '
    '
            except:
                    pass
    
    def main():
            zFile = zipfile.ZipFile("evil.zip")
            passFile = open('dictionary.txt')
            for line in passFile.readlines():
                    password = line.strip('
    ')
                    t = Thread(target=extractFile, args = (zFile, password))
                    t.start()
    
    if __name__ == '__main__':
            main()
    

    Step 13 . 运行脚本

    [+] Found password = secret
    

    版本五 (终极版本) 在终端中制定zip文件 和 字典文件 的路径

    Step 14 . 删除刚刚解压出来的文件 evil

    $ ls
    1-4-4-zipCrack.py  dictionary.txt  evil  evil.zip
    $ rm evil
    $ ls
    1-4-4-zipCrack.py  dictionary.txt  evil.zip

    Step 15 . 最终的脚本程序

    #! /usr/bin/python
    # -*- coding: utf-8 -*-
    import zipfile
    import optparse
    from threading import Thread
    def extractFile(zFile, password):
        try:
            zFile.extractall(pwd=password)
            print '[+] Found password = ' + password + '
    '
        except:
            pass
    
    def main():
        parser = optparse.OptionParser("usage: python 1-4-4-zipCrack.py "+
        "-f <zipfile> -d <dictionary>")
        parser.add_option('-f', dest='zname', type='string',
        help='specify zip file')
        parser.add_option('-d', dest='dname', type='string',
        help='specify dictionary file')
        (options, args) = parser.parse_args()
        if (options.zname == None) | (options.dname == None):
            print parser.usage
            exit(0)
        else:
            zname = options.zname
            dname = options.dname
        zFile = zipfile.ZipFile(zname)
        passFile = open(dname)
        for line in passFile.readlines():
            password = line.strip('
    ')
            t = Thread(target=extractFile, args = (zFile, password))
            t.start()
    
    if __name__ == '__main__':
        main()
    

    Step 16 . 运行:

    $ python 1-4-4-zipCrack.py -f evil.zip -d dictionary.txt
    [+] Found password = secret
    

    搞定,大功告成

    讲解代码:

    下面这段程序是 帮助程序

        parser = optparse.OptionParser("usage: python 1-4-4-zipCrack.py "+
        "-f <zipfile> -d <dictionary>")
        parser.add_option('-f', dest='zname', type='string',
        help='specify zip file')
        parser.add_option('-d', dest='dname', type='string',
        help='specify dictionary file')
        (options, args) = parser.parse_args()
        if (options.zname == None) | (options.dname == None):
            print parser.usage
            exit(0)

    使用下面的两个方式执行1-4-4-zipCrack.py 脚本就可以调用上面的if语句下的代码。

    $ python 1-4-4-zipCrack.py 
    python 1-4-4-zipCrack.py -f <zipfile> -d <dictionary>
    $ python 1-4-4-zipCrack.py -h
    Usage: python 1-4-4-zipCrack.py -f <zipfile> -d <dictionary>
    
    Options:
      -h, --help  show this help message and exit
      -f ZNAME    specify zip file
      -d DNAME    specify dictionary file

  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/aobosir/p/5928580.html
Copyright © 2011-2022 走看看