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