首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python小课堂17-30行代码破解加密ZIP文件

咪哥杂谈

python小课堂17

30行代码破解加密ZIP文件

本篇文字约为800字,阅读时间约为5分钟。

1

前言

今天来点实战干货,想必之前的小课堂中一直在讲基础也会显得非常枯燥,有了前面的相关知识,即可以实现本章内容。若有不懂得的地方,请回顾python小课堂1-16。

在多数人眼中一直觉得黑客很神秘,实际上当初我学python入门时正是因为那会在学安全相关的东西,机缘巧合得以在360和爱春秋联合组织的网课中学到了不少安全相关的知识。很早以前,python就被公认为黑客届的编程语言之一,自身有着强大的第三方库(也就是包和模块的统称)来使用,并且语言上手度非常容易。废话不多说,今天就来演示下如何手写一段python程序来实现暴力破解压缩文件的密码!重点在于编程的思路!

声明:本章内容仅供学习记录使用,请勿用于商业以及非法用途!

2

暴力破解的实现思路

利用python内置模块zipfile来实现破解文件,zipfile模块有一种函数,其可以实现将压缩文件路径传入,通过函数返回值去调用提取文件的方法,若文件是加密的且密码传入的不正确,程序则会发生异常(也就是程序报错)。通过这样的思想,我们可以通过读取一个字典文件(字典文件就是包含各种弱密码的一个txt文本文件),用for循环读取此文件来实现循环尝试。但是python单线程跑比较大的字典文本会非常耗时,所以此程序采用多线程来实现调用。

PS:线程是计算机中的专有概念,举个例子来说吧,比如咱们平时用到的360杀毒软件,它整体作为一个软件被大家使用,而这样的一个独立软件可以称之为进程,当我们使用360杀毒时,在它正在运行杀毒的过程中,我们还可以用它对电脑进行卸载软件,或者清理垃圾等操作,这样在同一时刻,可以干很多事情,就利用到了多线程。一个进程软件下可以同时干好多事情,而线程就是可以干好多事情的“人”。多线程使得计算机程序的运行效率大大提高,减少了我们平时使用时候的耗时。

3

破解密码效果演示

1. 自己建立一个加密的zip文件,密码自主设定。

我们将一个文本文件进行加密,将其压缩成zip文件。

2. 打开命令行,执行py脚本。

我这里命令行用的是git bash shell,这是一种windows下的类linux命令行,非常好用,兼容所有linux命令,装了git的同学用了都说好!!~

可以看到有个进度条,进度条前面走的数字就是每个行密码都去开一个线程,字典一共200W行,在读取到2W多行时将密码破解出来,接下来手动停止程序即可。

3. 关于zip加密若不正确

这里要说下,正常情况下,一个加密的zip文件,即使你输入错误的密码也是能用压缩文件打开的,只不过相应的文本文件是被加密的。所以,通过手动方式去解压加密zip文件,即使是错误密码也可以提取到原文本文件,只不过是乱码罢了,如下图:

4

代码的实现讲解

1. 命令行函数代码

2. 多线程函数代码

假设我输入了错误的文件名称,可以看到报错!

3. 调用zipfile模块的核心代码

这里的核心代码便是多线程调用时触发的函数。

5

代码中额外的知识点

1. 安装python第三方库(python的强大之处,就是很多好用的第三方库,人为封装写好的包和模块,直接拿来用即可!)

为了我们方便读取文件是看到相关进度,所以这里额外安装了第三方库tqdm,一个非常好用的进度条库。tqdm在阿拉伯语中表示“progress”,而在西班牙语中则是“I love you so much”的缩写。

介绍一个python第三方库的官方网站:https://pypi.org/

这个网站有各个模块官方的安装命令以及文档,比如下图:

在之前的小课堂中,如果你配置好python的环境变量,打开命令行是可以直接进行安装的,只需执行命令即可,如下图:

因为我已经安装过了,所以会这样提示。若没安装过,可以看到有下载的进度条,最后安装完会显示success。

2.optparse、zipfile、tqdm模块的简介

optarse:这是一个python自带的库,通过上面介绍的代码可以和linux命令似的,带参数执行。举个例子,如下图:

zipfile: python自带的库,可以对zip文件进行解压缩,本章实现的重点模块,需要注意的是,在用extractall时,传入的字符串密码进行字节编码的转化。zip_file.extractall(pwd=bytes(password,'utf-8'))

关于解压出来的文件名字会有乱码的情况,请看文章:

https://www.cnblogs.com/limengjie0104/archive/2018/06/17/9192449.html

tqdm:需要安装的第三方库,在可以循环迭代的对象上使用即可。如:

for line in tqdm(f.readlines()):

6

爆破字典的项目

爆破字典的开源项目,其中收录了不少相关的密码,可以star 或者 fork到自己的仓库记录使用。地址如下:

https://github.com/rootphantomer/Blasting_dictionary

本篇文章的完整代码地址如下:

https://github.com/unlimitbladeworks/python-tools/blob/master/hack/zip_hack.py

至此完!

来呀!来呀!关注我吧!!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181125G0RWC300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券