最近在读《python绝技:运用python成为顶级黑客》一书,文中有如何运用Python中zipfile自带的方法破解zip文件。短短的十几行代码就将一个程序实现了。下面给出书中所用的代码:

 # -*- coding:utf- -*-
import zipfile
import threading def extractFile(zFile,password):
'''
破解方法
:param zFile: 需要破解的文件
:param password: 尝试密码
:return:
'''
try:
zFile.extractall(pwd=password)
print("Found Passwd:", password)
return password
except:
pass def main():
'''
主函数
'''
zFile=zipfile.ZipFile('python.zip')
passFile=open('14365003.txt')
for line in passFile.readlines():
password = line.strip('\n')
t = threading.Thread(target=extractFile, args=(zFile, password))
t.start() if __name__=='__main__':
main()

  上文中的python.zip是我的测试文件,而14365003.txt则是字典文件。然而当我运行这段程序时,我压缩的密码是字典文件中的第一行,然而程序跑了十几分钟还没有停下来,我瞬间觉得有些不对劲了。

  仔细看完代码,这段小程序会遍历字典文件中的每一行密码去尝试,然而很令人难过的是,当某一个子线程尝试匹配到正确密码时,程序并不会停止,而是继续完成其他线程,甚至开会继续开启经常直至遍历完整个字典文件。大胆的查看了一下我的字典文件大小,额162MB,原因瞬间找到。

  那么怎么解决呢?去修改字典文件显然是不可能的,毕竟字典文件很可能更大。那么能不能试着在子线程找到正确密码时,由父线程杀死所有线程呢?或者类似于Ctrl+C这样的指令去终止程序执行呢?首先,网上查阅后发现Python一般情况下不允许杀死线程,通常是发送信号来终止。而当去尝试终止程序执行时,也不能成功。

  几经周折,最终想到了一个办法,通过event来通信,当子线程成功执行时,通知父线程不再开启其他线程。最终代码如下:

# -*- coding:utf- -*-
import zipfile
import threading def extractFile(zFile,password):
'''
破解方法
:param zFile: 需要破解的文件
:param password: 尝试密码
:return:
'''
try:
zFile.extractall(pwd=password)
print("Found Passwd:", password)
event.set()
return password
except:
event.wait()
pass def main():
'''
主函数
'''
zFile=zipfile.ZipFile('python.zip')
passFile=open('14365003.txt')
for line in passFile.readlines():
if event.isSet():
print "End"
return
else:
password = line.strip('\n')
t = threading.Thread(target=extractFile, args=(zFile, password))
t.start() if __name__=='__main__':
event=threading.Event()
main()

  测试该程序,这次破解出密码只需要35秒了。

另外还有什么更好的方法吗?希望能告诉我。

用Python写一个zip文件的密码破解程序的更多相关文章

  1. Python的一个解释凯撒密码的程序

    #!/usr/bin/env python # -*- coding: utf-8 -*- ''' { Title:CaserCode Author:naiquan Type:crypto Detai ...

  2. python实践项目十:zipfile模块-将一个文件夹备份到一个 ZIP 文件

    描述:将指定路径下的某文件夹备份到一个zip文件 代码: #!/usr/bin/python # -*- coding: UTF-8 -*- # backupToZip - Copies an ent ...

  3. Python实践练习:将一个文件夹备份到一个 ZIP 文件

    题目 项目要求:假定你正在做一个项目,它的文件保存在 C:\AlsPythonBook 文件夹中.你担心工作会丢失, 所以希望为整个文件夹创建一个 ZIP 文件, 作为"快照" . ...

  4. 十行代码--用python写一个USB病毒 (知乎 DeepWeaver)

    昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到.但是,如果我想, ...

  5. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  6. 【Python】如何基于Python写一个TCP反向连接后门

    首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...

  7. Advanced Archive Password Recovery (ARCHPR) 是一个强大的压缩包密码破解工具,适用于ZIP和RAR档案的高度优化的口令恢复工具。

    RAR压缩文件密码破解工具是一款简单易用的RAR文档和ZIP文档密码破解软件,如果你不小心忘了解压密码或是下载的RAR文件需要密码,那么均可以使用本软件进行暴力破解.不管WinRAR /RAR 的密码 ...

  8. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  9. [py]python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 参考: http://blog.51cto.com/lovelace/1631831 更新功能: 数据库进行数据存入和读取操作 字典配合函数 ...

随机推荐

  1. markdown生成的a标签如何在新页面打开

    原始的超链接语法这样写:[超链接的名字](url) 在新窗口中打开:[超链接的名字](url?_blank) 在本窗口中打开:[超链接的名字](url?_self)默认是在本窗口中打开 但上面的说法貌 ...

  2. Navicat 连接远程服务器mysql 长时间不操作会连接很久

    服务器mysql 配置 本地mysql客户端配置 √ navicat 连接配置 右键连接,编辑连接,高级,保持连接间隔勾选,把240改为30,确定

  3. OpenStack视图

    OpenStack视图 OpenStack视图是个全局资源的概念,统计了OpenStack所纳管资源的总量和使用量,因此OpenStack视图的资源通常又称为物理资源.OpenStack基于该资源使用 ...

  4. did not finish being created even after we waited 189 seconds or 61 attempts. And its status is downloading

    did not finish being created even after we waited 189 seconds or 61 attempts. And its status is down ...

  5. Custom DNS on Ubuntu 18.04LTS server

    1. Edit resolved config file nano /etc/systemd/resolved.conf 2. Replace #DNS into DNS DNS=9.9.9.9 1. ...

  6. Flink的高可用集群环境

    Flink的高可用集群环境 Flink简介 Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布,数据通信以及容错机制等功能. 因现在主要Flink这一块做先关方面的学习, ...

  7. FTP文件上传并支持断点续传(一)—— win10 本地环境 ftp站点构建

    由于之前项目开发是采用是采用的FTP文件上传,就一直想学习,但由于FTP服务器是公司的,为了方便就像把本地变成ftp站点,其实很简单,但也有很多坑 这里简单介绍一下自己遇到的坑 一:开通本地的ftp权 ...

  8. jsonpCallback: xx is not a function

    参考文献: https://www.cnblogs.com/lenghan/p/5777588.html 根据原理解读,发现同一个页面如果多个ajax请求调用的jsonpCallback名字相同的话, ...

  9. myeclipse使用maven整合ssh配置

    最近写项目,由于公司需求,使用myeclispe来开发maven项目,关于maven就不再介绍,无论是jar包管理功能,还是作为版本构建工具,优点自然是很多,下面先贴出所需要的配置文件. maven所 ...

  10. eclipse Tomcat 容器已经启动 但右下角 progress 一直显示100%

    今天在家里 遇到一个问题 先上图 我的默认超时时间 eclipse 默认的 45s   果然 到了时间 依旧是 显示超时 解决方法其实   很简单   我看到网上有人说是tomcat 或者 eclip ...