今天,跟大家分享一个有意思的案例:如何使用Python暴力破解WiFi密码
不废话,直接开始。
如何暴力破解
我们知道,计算机相比人类,最大的优势就是它能够重复性执行一些任务,但它永远不会感觉累(我们假定它一直不断电)。
本节中,我们破解WiFi密码也会利用计算机的这个优点。
先来思考这样一个问题:日常我们登录计算机系统时,如果你的计算机设置了密码,就需要输入密码才能进入系统。这个输入密码的过程就是一个完整的身份验证过程。
计算机有没有欢迎界面,我这里不是很清楚。
但上面流程图中绿色框选部分,不同的系统验证机制不一样。比如,有的系统可能验证到错误3次之后,暂停输入n分钟,这样来阻碍暴力破解进度。
对于这样的系统,暴力破解难度就有点大了。暴力的方式很难破解!
对于登录失败后,没有对登录次数进行验证的系统,我们可以使用暴力破解。
验证登录错误次数的过程其实是我们在系统易用性安全性上面做的取舍。
如果不验证登录次数,对于使用者来讲,可能更方便;但如果验证登录错误次数,有时候将一个合法用户拒之门外,那么,虽然安全性增强了,但系统易用性会大打折扣。
我们知道,设置了密码的WiFi也有这样一个验证身份的机制。本节中的破解WiFi密码,是不是这样情况,我们来试试。
需要干什么
任何时候,都不能忘记我们的目的!我们是要暴力破解。问题来了,我们那什么破解呢?这里,我们需要一个暴力破解的字典!
举个例子,这个过程就像是把密码当作一条我们梦寐以求的鱼儿,这里我们需要一个装满鱼儿的池塘,这里的池塘就是我们的密码字典。现在必须要乐观一点(不乐观又能怎么样?你又不知道你的鱼儿在哪里,万一撞上了呢?),所以,我们假定鱼儿就在池塘里面。
此时,我们挨个儿将池塘里面的鱼儿捞出来。如果鱼儿是我们要找的,那么故事的结局皆大欢喜,我们用找到的密码免费上了网!
如果不是,我们将鱼儿扔掉(为排除干扰,是不是扔远一点比较好,但这不是关键!),继续捞下一条,直到找到对的鱼!对于鱼儿来讲,这样是不是很暴力?
好吧,原来艮在这里!道理讲清楚了,现实往往很残酷!我们要在池塘里面找到心目中那条鱼儿,确实很难!因为我们并不知道这个池塘够不够大……其实,不确定因素还有很多。
现在,我们来解决一个最基本的问题,用什么来捕鱼并进行验证?这里我们需要一个捕鱼和验证鱼儿的工具!
好了,我们开始准备工具吧!
构造池塘:暴力破解字典
Python处理这类问题,很是简单,我们提供一个思路即可,源代码获取方式附后,大家自己敲代码试试!
这里我们就生成了一些密码本字典,当然这里可选的范围太多了,如果想要提高找到的概率,字典越大越好;但这里需要处理矛盾,字典大的话,说明池塘大,我们捞鱼的速度显示成了一个问题。
好了,池塘有了,我们开始捞鱼并验证。
捕鱼并验证:Python用什么来验证WiFi密码?
池塘总算有了。鱼儿是心目中的鱼儿,我们并没有见过它。它唯一的特征是能够和你的硬件进行连接,有一种怦然心动的感觉(假设怦然心动是验证连接成功的指标)。我们先来练习捕鱼的技巧。
捕鱼技巧(逐行读取密码文件并验证)
很简单,逐行读取我们刚才生成的密码字典(池塘中的鱼儿)
这里的wifiConnect(passwd)函数用来验证捞出来的鱼儿是不是我们想要的(密码是否正确)。这一步很关键,需要利用第三方模块pywifi实现。
第三方模块pywifi(操作wifi)
这个模块需要安装
pipinstallpywifi-i国内镜像源
这里安装pywifi成功后,运行程序可能出现下面的错误,直接安装