照顾没有接触过Python编程的同学,行文可能会有些啰嗦。

废话少说,我们进入正题。

2.1准备基本材料

在/home/ziptest/目录下,我创建了两个文件,一个test.zip,是一个设置了密码的zip包,密码为456789。

dict.txt文件是一个字典文件,简单的配置了几个密码。

下面我们打开开发工具,开始编写测试代码。

2.2 ZIPFILE

在python中操作zip文件,最简单的方式就是使用zipfile模块,使用该模块可以用来判断一个文件是否是压缩文件,创建、解压文件,获取zip文件的元数据信息。可以使用python的help方法查看该模块的使用方法。

这里我们首先关注下ZipFile类。

该类用来打开,读取,修改,解压zip文件。我们想要操作一个zip文件,第一步就是初始化ZipFile实例。下面我们打开我们准备好的text.zip文件。

import zipfile

zFile = zipfile.ZipFile("/HOME/TEST.ZIP");

我们只传了一个路径参数进去,从帮助文档我们可以看到,后面三个参数都有默认值,这里我们使用默认值就够了。

下面我们关注下ZipFile类的extractall方法。

extractall方法,是把压缩包里面的内容都解压出来,三个参数,path是解压的路径,members是需要解压出来的文件,pwd是密码。

现在我们可以测试下文件解压了。

import zipfile

    zFile = zipfile.ZipFile("/HOME/ZIPTEST/TEST.ZIP");zFile.extractall("/HOME/",pwd="456789");

运行这个脚本。

密码正确的话,会正常解压文件。如果密码不正确会出现什么情况呢?我们在代码中输入一个错误的密码。

import zipfile

    zFile = zipfile.ZipFile("/HOME/ZIPTEST/TEST.ZIP");zFile.extractall(path="/HOME/ZIPTEST",pwd="4567890");

结果如下:

程序会抛出“bad password”的异常。

我们可以通过捕获异常,测试多个密码。

2.3 读取字典文件

在Python中打开文件,使用open方法,这是一个内置方法,查看open的帮助文档,可以看到该方法的参数说明。

open方法返回一个file对象,利用file对象,我们可以读取文件的具体内容。下面我们在代码中测试一下。

import zipfile

    passFile = open('/HOME/ZIPTEST/DICT.TXT');for line in passFile.readlines():password = line.strip('N');print(password);

运行结果如下:

下面我们利用读取到的密码来暴力测试zip文件。

import zipfile

    zFile = zipfile.ZipFile("/HOME/ZIPTEST/TEST.ZIP");passFile = open('/HOME/ZIPTEST/DICT.TXT');for line in passFile.readlines():password = line.strip('N');try:zFile.extractall(path="/HOME/ZIPTEST",pwd=password);print("PASSWORD IS:"+password);exit(0);except:pass;

在上面的代码中,我们使用try—except进行异常捕获,密码不正确的时候,程序跳过继续执行。密码正确的时候打印密码,终止程序。运行结果如下:

到目前为止,我们的脚本已经具备了暴力破解zip文件的功能,大家可以看到只有十几行的代码。下面我们为了提升程序的可用性,重构一下这个脚本,利用函数划分功能。

2.4 重构 用函数划分功能

首先定义一个extractFile函数,该函数接收三个参数,一个zipfile对象,解压的目标路径,密码,如果解密成功则返回密码。

---------------------------------------------------------------------
--注:我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:895817687
---------------------------------------------------------------------def extractFile(toPath,zFile,password):try:zFile.extractall(path=toPath,pwd=password);return password;except Exception,e:return;

下面我们再声明一个main方法。

    def main():zFile = zipfile.ZipFile("/HOME/ZIPTEST/TEST.ZIP");passFile = open('/HOME/ZIP/TEST/DICT.TXT');for line in passFile.readlines():password = line.strip('N');guess = extractFile("/HOME/",zFile,password);if guess:print('SCUCESS'+password);exit(0);

在main方法中,首先初始化了zipfile对象,然后打开字典文件,循环读取密码,传给extractFile方法调用。

分离 了两个方法之后,我们需要在程序的入口处调用main方法,完整代码如下:

import zipfile

    def extractFile(toPath,zFile,password):try:zFile.extractall(path=toPath,pwd=password);print('SCUCESS'+password);return password;except Exception,e:return;def main():zFile = zipfile.ZipFile("/HOME/ZIPTEST/TEST.ZIP");passFile = open('/HOME/ZIPTEST/DICT.TXT');for line in passFile.readlines():password = line.strip('N');guess = extractFile("/HOME/",zFile,password);if guess:print('SCUCESS'+password);exit(0);if __name__=='__MAIN__':main();

这样一来,代码清晰了很多,但是我们更换zip文件和字典文件的时候,还是需要修改代码,很不方便,正常的程序都应该可以传递参数的,ok,下面我们引入optparse库。

2.5 OPTPARSE

Python 有两个内建的模块用于处理命令行参数:

一个是 getopt,《Deep in python》一书中也有提到,只能简单处理 命令行参数;

另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix规范的命令行说明。

首先先引入optparse模块,然后强制添加两个参数,zip文件名和字典文件名。先看代码:

    def main():parser = optparse.OptionParser("usage%prog "+"-f <zipfile> -d <dictFile>");parser.add_option('-f',dest='zname',type='string',help='specify zip file');parser.add_option('-d',dest='dname',type='string',help='specify dict file');(options,args)=parser.parse_args();if(options.zname==None)|(options.dname==None):print parse.usage;exixt(0);else:zname=options.zname;dname=options.dname;zFile = zipfile.ZipFile(zname);passFile = open(dname);for line in passFile.readlines():password = line.strip(' ');guess = extractFile("/home/",zFile,password);if guess:print('scucess'+password);exit(0);

首先初始化一个OptionParser对象,然后添加两个选项——“-f”和“-d”。之后在程序运行的时候通过parse_args方法获取输入的参数,如果参数为空,则打印使用方法,退出程序。

下面使用终端来测试这个程序。

无参数情况下:

输入参数:

2.6 小结
这个程序本身并没有什么难点,但是通过这个入门案例,我们可以体验Python编程的基本方法,如何查看帮助文档,如何引入模块,初始化对象,操作zip文件,打开本地文件,命令行参数设置。

Python黑客入门:暴力破解zip,零基础也可以学会!相关推荐

  1. Python学习入门3:编程零基础应当如何开始学习Python?

    零基础学编程,用python入门是个不错的选择,虽然国内基本上还是以c语言作为入门开发语言,但在国外,已经有比较多的学校使用python作为入门编程语言. 具体怎么选择你的第一门编程语言可以看下图: ...

  2. 如何在python中制作超级玛丽_教你利用Python写一款超级玛丽,零基础也能学会,超级装逼...

    PS注意:很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃.为此小编建了个Python全栈免费答疑.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还 ...

  3. Python黑客入门:暴力破解zip,零基础也可以学会

    照顾没有接触过Python编程的同学,行文可能会有些啰嗦. 废话少说,我们进入正题. 2.1 准备基本材料 在/home/ziptest/目录下,我创建了两个文件,一个test.zip,是一个设置了密 ...

  4. Python攻防-暴力破解ZIP加密文件的密码

    文章目录 前言 Python语法 自定义迭代器 Python多线程 Python脚本 单线程数字爆破 单线程字符爆破 多线程字典爆破 总结 前言 本文继续记录学习下 Python 的有趣应用:借助 P ...

  5. Python:暴力破解zip!

    照顾没有接触过Python编程的同学,行文可能会有些啰嗦. 废话少说,我们进入正题. 2.1准备基本材料 在/home/ziptest/目录下,我创建了两个文件,一个test.zip,是一个设置了密码 ...

  6. Python 暴力破解zip文件密码(相对简单的密码)

               Python 暴力破解zip文件密码(相对简单的密码) 密码的使用范围很广,首先,我们要明确密码的作用,其次要明白密码的类型. 密码的作用是进行权限的限制,判断用户的合法性,(不 ...

  7. 10个python入门小游戏,零基础打通关,就能掌握编程基础

    前言 不会python就不能用python开发入门级的小游戏? 当然不是,我收集了十个python入门小游戏的源码和教程,并且即使你没有python基础,只要跟着这十个小游戏的开发详细教程去做,以及有 ...

  8. python暴力破解Zip文件,就是不讲道理

    本次实验将带领大家用Python的zipfile模块实现Zip文件的暴力破解,涉及的知识点包括:zipfile.argparse的用法等等. 一.实验说明 1. 实验简介 我们在网上好不容易下载到一个 ...

  9. 「github资料」40个Python可视化图表案例(附零基础学习资料)

    前言 数据可视化是数据科学中关键的一步.(文末为大家准备了学习资料) 在以图形方式表现某些数据时,Python能够提供很大的帮助. 不过有些小伙伴也会遇到不少问题,比如选择何种图表,以及如何制作,代码 ...

最新文章

  1. SpringBoot使用AOP
  2. linux摄像头 sdl,Linux音视频(SDL与YUV)
  3. VMware 虚拟化编程(14) — VDDK 的高级传输模式详解
  4. Python将数据插入到数据库时遇到单引号插入错误的问题
  5. 为什么软件测试需要变革?
  6. redis的安装(Linux)和基本使用
  7. [Unity脚本运行时更新]C#5新特性
  8. GitHub和Microsoft TFS对比有什么优势
  9. C4D结合AE制作酷炫MG光影动画心得
  10. 软件测试的基本理论与方法
  11. 企业微信接口下载微盘文件
  12. 音量控制 单片机c 语言,(封贴)请大神代写音响音量控制程序(有偿代写)单片机加TDA7313控制...
  13. 重庆大学大数据与软件学院阿里云大数据实训总结报告
  14. VMware Workstation 14 Pro 安装 Windows Server 2008 R2(完)
  15. Transmission搭建BT下载服务器
  16. Jetpack Compose 无限加载列表(滚到底部自动加载更多)
  17. Matlab中的正态分布概率函数
  18. 数据库导入表时出错:Importing tables....errors detected(see log page)
  19. vue中使用threejs的一些问题,THREE上没有OrbitControls
  20. 一文讲懂npm link

热门文章

  1. Nosql数据库的四大分类
  2. python伪装浏览器什么意思_用python2和python3伪装浏览器爬取网页
  3. 2021努力拼搏,致敬为梦想而拼搏的人
  4. Python——pip批量安装和卸载package
  5. Graph Without Long Directed Paths
  6. python 批量创建变量_Python批量生成和调用变量
  7. 在Linux系统下防火墙开放所需要访问的端口号
  8. 用jedis访问Redis进行对象存取示例
  9. 深入理解lombok
  10. Pig 0.12.1安装和使用