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('\n')
try:
zFile.extractall(pwd=password)
print '[+] Password = ' + password + '\n'
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('\n')
guess = extractFile(zFile, password)
if guess:
print '[+] Password = ' + password + '\n'
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 + '\n'
except:
pass def main():
zFile = zipfile.ZipFile("evil.zip")
passFile = open('dictionary.txt')
for line in passFile.readlines():
password = line.strip('\n')
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 + '\n'
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('\n')
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

Python 黑客 --- 002 入门级 ZIP压缩文件口令暴力破解机的更多相关文章

  1. Python脚本破解压缩文件口令(zipfile)

    环境:Windows python版本2.7.15 Python中操作zip压缩文件的模块是 zipfile . 相关文章:Python中zipfile压缩文件模块的使用 我们破解压缩文件的口令也是用 ...

  2. 最新Zip压缩文件漏洞,黑客可以触发目录遍历攻击

    近日,国内某安全公司研究人员透露了一个关键漏洞的详细信息,该漏洞影响了许多生态系统中的数千个项目,黑客可以利用这些漏洞在目标系统上实现代码执行. 黑客是如何通过Zip压缩文件入侵攻击?被称为“ZipS ...

  3. 【VC++技术杂谈008】使用zlib解压zip压缩文件

    最近因为项目的需要,要对zip压缩文件进行批量解压.在网上查阅了相关的资料后,最终使用zlib开源库实现了该功能.本文将对zlib开源库进行简单介绍,并给出一个使用zlib开源库对zip压缩文件进行解 ...

  4. java ZIP压缩文件

    问题描述:     使用java ZIP压缩文件和目录 问题解决:     (1)单个文件压缩 注:     以上是实现单个文件写入压缩包的代码,注意其中主要是在ZipOutStream流对象中创建Z ...

  5. PHP zip压缩文件及解压

    PHP zip压缩文件及解压 利用ZipArchive 类实现 只有有函数.界面大家自己写 ZipArchive(PHP 5.3 + 已自带不需要安装dll) /** * 文件解压 * @param ...

  6. php实现ZIP压缩文件解压缩

    测试使用了两个办法都可以实现: 第一个:需要开启配置php_aip.dll <?php //需开启配置 php_zip.dll //phpinfo(); header("Content ...

  7. java将文件打包成ZIP压缩文件的工具类实例

    package com.lanp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

  8. php实现ZIP压缩文件解压缩(转)

    测试使用了两个办法都可以实现: 第一个:需要开启配置php_aip.dll <?php //需开启配置 php_zip.dll //phpinfo(); header("Content ...

  9. PHP生成ZIP压缩文件

    PHP生成ZIP压缩文件 /* * 生成zip压缩文件 * $sourceDir:被压缩的文件夹或文件 * $outFileName:输出的压缩文件名称 * */ function createZip ...

随机推荐

  1. 【微信小程序+ES6新特性应用】字符串模板:美元符号$+大括号{}变量的写法

    1.字符串模板简介 ES6新特性中的字符串模板允许使用英文字符抑音符号`(提示:这里我们不能将其理解为单引号)来创建字符串,并且在该字符串中可以包含都[美元符号+大括号]包裹的变量 格式:consol ...

  2. 09-THREE.JS 物体缩放,坐标,旋转,位移,是否可见

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...

  3. deep learning (六)logistic(逻辑斯蒂)回归中L2范数的应用

    zaish上一节讲了线性回归中L2范数的应用,这里继续logistic回归L2范数的应用. 先说一下问题:有一堆二维数据点,这些点的标记有的是1,有的是0.我们的任务就是制作一个分界面区分出来这些点. ...

  4. 20165210 学习基础和C语言基础调查

    20165210 学习基础和C语言基础调查 一.技能学习过程和心得 读了娄老师<做中学>自己还是深有感受的,对于运动.音乐.棋牌都会一点,我觉得做中学可以概括为三点:做,学,学做结合,所谓 ...

  5. pip镜像源

    pip是用国内镜像源 https://pypi.python.org/http://pypi.douban.com/simple/ http://mirrors.aliyun.com/pypi/sim ...

  6. Centos7 安装 MongoDB4.0

    目录 安装包下载 MongoDB安装 启动数据库 补充 小结 诚邀访问我的个人博客:我在马路边 更好的阅读体验点击查看原文:Centos7安装MongoDB4.0 原创博客,转载请注明出处 @ 由于项 ...

  7. 畅通工程(自己写的BFS,但后面想了下并查集更好更快)

    某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...

  8. Node中没搞明白require和import,你会被坑的很惨

    ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...

  9. virtualvm一次插件安装想到的

    在麒麟操作系统visualvm安装插件失败,因为使用的内网,所以在官网下载了插件到本地:因为本地安装的jdk1.6,为了享受jdk1.8,在visualvm文件中增加了对于jdk1.8的引用: exp ...

  10. Python 设计一个简单的计算器

    设计目标 实现加减乘除及拓号优先级解析 用户输入'1 - 2 * ( (6-3 +(-5/5)*(9-2*3/3 + 7/3*7/4*12 +10 * 5/5 )) - (-4*3)/ (12-3*2 ...