本文是一个技术探索的文章,与真正的破解方法还有很大的差距。请广大网友不要利用本文内容从事任何危害网络安全的行为。如果有违法行为发生,与本人无关。现在开始进入正题。在网络上找到了很多针对wifi破解的工具,但它们大多是针对Linux平台的,而且不支持在虚拟机上安装Linux。由于很多笔记本电脑无法识别内置网卡,所以必须将系统刻录到U盘中,然后通过U盘启动。但是我现在非常困难,甚至没有一条内裤,更别提U盘了。因此,我决定自己编写一个程序,并且必须使用Java语言编写,因为我需要在Windows上运行它。
一、准备工作
首先,您需要一台可以连接到wifi的电脑,然后您的电脑必须支持Java环境,最后您周围必须有无线网络。好了,废话不多说,让我们开始吧。我在网上找到了一些在Windows下使用cmd命令进行无线网络操作的相关命令,如下所示:
首先,我们需要编写一个配置文件,以便稍后使用。我们可以先看看配置文件的样子,导出配置文件来查看。打开命令行,输入以下命令。在本文中,我们主要会使用前四个命令,其他命令可以作为扩展。
导出配置文件后,请注意,配置文件默认导出到cmd执行的当前路径,如下所示:
我导出的文件位于C:UsersAdmin目录下,可以看到文件都是以wifi.xml的方式命名,例如TP-LINK_5410.xml。随便打开一个文件,我们可以看到xml文件的具体内容,但其中有一些内容是我们不需要的,我们只需要下面这样的内容:
二、扫描WIFI
其中SSIDNAME是我们将要使用的wifi名称,AUTHTYPE是wifi的加密方式,PASSWORD是我们将要暴力破解的密码变量。
好了,背景介绍差不多了,现在可以开始了。首先,我们要扫描附近的WIFI,返回所有WIFI的信息,包括SSID、加密方式和信号强度(如果信号太弱,我们就不进行破解了,因为破解也没有什么用)。扫描实际上就是执行一个CMD命令,所以我们先封装一个CMD执行器。
然后,我们扫描周围的wifi信息并返回相关信息。
三、生成配置文件
好了,接下来我们可以开始针对每个不同的SSID生成不同的配置文件了,生成文件的整个过程就是根据每个不同的密码生成一个配置文件。大致的代码如下:
需要哪些密码可以自己在网上找一些字典来使用,建议的顺序是常用弱口令、字典攻击、随机密码(到了随机密码这一步,意义也不大了)。这里提供一个常见弱口令的下载链接。为了加快文件生成的速度,我使用了多线程。根据个人实际经验,如果只有几千到几万个密码,实际上多线程和单线程并没有太大区别,真正的区别在于后面尝试连接的时候。
四、遍历校验配置文件
接下来是最耗时的一步,逐个密码进行校验。关键代码如下:
这里有两个问题需要解释:
- 为什么需要sleep(50)?因为在连接后,电脑不会立即反应过来,此时进行ping操作,即使密码正确,也无法成功ping通。所以需要加入sleep。我在破解时使用的是sleep(1000),还没有测试过50行是否可行。
- 为什么需要ping网站?因为在第二步连接时,无论连接是否成功,都会出现”已成功完成xx连接”的字样。所以只能通过ping来校验,但我相信一定可以进行优化。
在这一步中,我使用了多线程进行验证。有人问为什么要使用多线程,明明验证方法都是synchronized的。我想说的是,如果只使用单线程,之间总会有间隙,所以为了压榨那一点点时间,我使用了多线程。
五、连接成功
好了,至此,我已经将我的全部经验传授给你了,你可以说自己有三年的经验了。不好意思,说错了,至此,整个流程大致就完成了,接下来运行你的程序吧,等待密码破解。
我在我家周围发现了三个信号看起来还不错的wifi。使用这个程序运行了40多秒,成功破解了一个wifi的密码为12345678。耶,终于可以使用了。然后根据密码,将家里的路由器设置为桥接模式,家里到处都有网络了。
六、或者放弃
或者,你也可以放弃。经过一个晚上的愉快使用后,第二天早上我发现网络断了,原来那个wifi不存在了,但到了中午又出现了。我猜想是商家关门了,所以断电了,网络也就没有了。
于是,我尝试破解了两个信号看起来比较好的网络,但都以失败告终!因为密码字典不够强大。我下载了几个密码字典生成器,但都无法使用。算了,先将就使用现在的网络,等我有时间了,再写一个密码字典生成器来破解。
PS:本文的代码已经托管到GitHub上,如果有兴趣,欢迎浏览。
本文纯属技术探索,与真正的破解方法还有很大的差距,请广大网友不要利用本文内容从事任何危害网络安全的行为。如果有违法行为发生,与本人无关。