您的位置:首页 > 编程语言 > Python开发

Python 黑客 --- 002 入门级 ZIP压缩文件口令暴力破解机

2016-09-02 18:58 387 查看

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息