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压缩文件:
- 创建一个文件,取名为:evil
- 对文件右键,选择:Compress… 压缩
- 选择
.zip格式,并设置密码为:secret。点击 Create 创建。
- 现在这个带有口令的 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压缩文件口令暴力破解机的更多相关文章
- Python脚本破解压缩文件口令(zipfile)
环境:Windows python版本2.7.15 Python中操作zip压缩文件的模块是 zipfile . 相关文章:Python中zipfile压缩文件模块的使用 我们破解压缩文件的口令也是用 ...
- 最新Zip压缩文件漏洞,黑客可以触发目录遍历攻击
近日,国内某安全公司研究人员透露了一个关键漏洞的详细信息,该漏洞影响了许多生态系统中的数千个项目,黑客可以利用这些漏洞在目标系统上实现代码执行. 黑客是如何通过Zip压缩文件入侵攻击?被称为“ZipS ...
- 【VC++技术杂谈008】使用zlib解压zip压缩文件
最近因为项目的需要,要对zip压缩文件进行批量解压.在网上查阅了相关的资料后,最终使用zlib开源库实现了该功能.本文将对zlib开源库进行简单介绍,并给出一个使用zlib开源库对zip压缩文件进行解 ...
- java ZIP压缩文件
问题描述: 使用java ZIP压缩文件和目录 问题解决: (1)单个文件压缩 注: 以上是实现单个文件写入压缩包的代码,注意其中主要是在ZipOutStream流对象中创建Z ...
- PHP zip压缩文件及解压
PHP zip压缩文件及解压 利用ZipArchive 类实现 只有有函数.界面大家自己写 ZipArchive(PHP 5.3 + 已自带不需要安装dll) /** * 文件解压 * @param ...
- php实现ZIP压缩文件解压缩
测试使用了两个办法都可以实现: 第一个:需要开启配置php_aip.dll <?php //需开启配置 php_zip.dll //phpinfo(); header("Content ...
- java将文件打包成ZIP压缩文件的工具类实例
package com.lanp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...
- php实现ZIP压缩文件解压缩(转)
测试使用了两个办法都可以实现: 第一个:需要开启配置php_aip.dll <?php //需开启配置 php_zip.dll //phpinfo(); header("Content ...
- PHP生成ZIP压缩文件
PHP生成ZIP压缩文件 /* * 生成zip压缩文件 * $sourceDir:被压缩的文件夹或文件 * $outFileName:输出的压缩文件名称 * */ function createZip ...
随机推荐
- Highcharts中更新series的5种方法
用Highcharts画图时,经常需要更新所画的图表,最常见的就是改变数据以更新图表.在Highcarts中,数据对应的参数是series.这儿就以图1的柱状图为例,列举如何更新series的5种方法 ...
- Spring Boot 简单日志配置
在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件## 默认使用logback logging.level.root=error ...
- Milking Time(DP)
个人心得:一开始自己找状态,是这么理解的,只要前面一个满足就等于此时的值加上d(n-1),否则就是不挖此时的比较d(n-1)和 d(n-2)+cost,不过仔细一想忽略了很多问题,你无法确定n-2和此 ...
- MMS(mongodb监控工具)
今天好几个人问我如何查看mongodb的连接数,在mongo shell中执行: shard1:PRIMARY> db.serverStatus().connections { "cu ...
- JSONP原理及实现跨域方式
今天做页面时,后台给了个接口:https://a.a.com/a/a.json,我页面的上线地址是:http://b.b.com.显而易见,因为浏览器同源策略的限制,通过ajax无法无法取得json的 ...
- Node.js + Express
相关链接: 1.https://www.jianshu.com/p/db4df1938eca 2.前端发起GET请求:http://localhost:3000/api/login?name=admi ...
- 洛谷【P1886】滑动窗口
浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://www.luogu.org/problemnew/show/P1886 ...
- PKU campus 2018 A Wife——差分约束?/dp
题目:http://poj.openjudge.cn/campus2018/A 有正规的差分约束做法,用到矩阵转置等等. 但也有简单(?)的dp做法. 有一个结论(?):一定要么在一天一点也不选,要么 ...
- 应用层-day02
web与HTTP web的应用层协议时超文本传输协议(HyperText Transfer Protocol HTTP) HTTP是由两个程序实现的:一个客户端程序和一个服务器程序. HTTP定义了w ...
- hl7消息中和时间有关的字段的格式
hl7消息中有许多segment(段)包含时间类型的Field.常用的MSH, EVN, PID中的时间字段及其格式为: 1. MSH-7, Date/time Of Message为yyyyMMdd ...