diff --git a/README.md b/README.md index fbd1df7..55b722c 100644 --- a/README.md +++ b/README.md @@ -243,21 +243,27 @@ Tips:支持Win10、Win11、Linux,MacOS暂不支持 ## 更新日志 +### v1.2.5 + +- **[新增]** 支持在破解过程中**暂停**。([#26](https://github.com/baihengaead/wifi-crack-tool/issues/26)) +- **[修复]** 在设备的**WLAN功能关闭**时,**扫描WiFi会抛出意外错误**的问题。([#28](https://github.com/baihengaead/wifi-crack-tool/issues/28)) +- **[修复]** 在自动破解全部WiFi的情况下,连接完成一个WiFi后,所有**按钮的状态会被重置**的问题。 + ### v1.2.4 -- **[新增]** 对WPA3的支持(Linux)。 +- **[新增]** 对**WPA3**的支持(Linux)。 ### v1.2.3 -- **[新增]** 对WPA3的支持(Windows)。 -- **[新增]** 自动获取安全类型的功能(Windows)。 -- **[优化]** SSID的utf-8编码转换(Windows)。 +- **[新增]** 对**WPA3**的支持(Windows)。 +- **[新增]** **自动获取**安全类型的功能(Windows)。 +- **[优化]** SSID的utf-8**编码转换**(Windows)。 ### v1.2.2 -- **[修复]** 在多网卡的情况下意外的提示了 “应用程序的另一个实例已经在运行。” 的问题。([#13](https://github.com/baihengaead/wifi-crack-tool/issues/13)) -- **[修复]** 在部分情况下,进行utf-8编码转换时,出现转换异常的问题。([#13](https://github.com/baihengaead/wifi-crack-tool/issues/13)) -- **[修复]** 在破解中文WiFi后,连接的中文WiFi名称乱码的问题。 +- **[修复]** 在多网卡的情况下**意外的提示**了 “应用程序的另一个实例已经在运行。” 的问题。([#13](https://github.com/baihengaead/wifi-crack-tool/issues/13)) +- **[修复]** 在部分情况下,进行utf-8**编码转换**时,出现转换**异常**的问题。([#13](https://github.com/baihengaead/wifi-crack-tool/issues/13)) +- **[修复]** 在破解中文WiFi后,连接的**中文WiFi名称乱码**的问题。 ### v1.2.1 diff --git a/wifi_crack_tool.py b/wifi_crack_tool.py index 08ce24b..660b2dd 100644 --- a/wifi_crack_tool.py +++ b/wifi_crack_tool.py @@ -2,7 +2,7 @@ """ Author: 白恒aead Repositories: https://github.com/baihengaead/wifi-crack-tool -Version: 1.2.4 +Version: 1.2.5 """ import os,sys,datetime,time,threading,ctypes,json import platform @@ -30,7 +30,7 @@ def __init__(self,mutex): self.icon_path = "images/wificrack.ico" if PyWiFi().interfaces().__len__() <= 1 and mutex is None: - self.showinfo(title=self.windowTitle(), message='应用程序的另一个实例已经在运行。') + self.showinfo(title=self.windowTitle(), message='应用程序的另一个实例已经在运行。\n(p.s.你当前的设备只有一个网卡,不支持多开!)') sys.exit() icon = QIcon() @@ -48,6 +48,7 @@ def __init__(self,mutex): self.ui.cbo_wnic.setDisabled(True) self.ui.btn_refresh_wifi.setDisabled(True) self.ui.btn_start.setDisabled(True) + self.ui.btn_pause_or_resume.setDisabled(True) self.ui.btn_stop.setDisabled(True) self.ui.txt_log_msg_info.setReadOnly(True) @@ -60,6 +61,7 @@ def __init__(self,mutex): self.ui.btn_change_pwd_file.clicked.connect(self.tool.change_pwd_file) self.ui.btn_refresh_wifi.clicked.connect(self.tool.refresh_wifi) self.ui.btn_start.clicked.connect(self.tool.start) + self.ui.btn_pause_or_resume.clicked.connect(self.tool.pause) self.ui.btn_stop.clicked.connect(self.tool.stop) self.ui.dbl_scan_time.valueChanged.connect(self.tool.change_scan_time) self.ui.dbl_connect_time.valueChanged.connect(self.tool.change_connect_time) @@ -223,7 +225,10 @@ def __init__(self,win:MainWindow): # 读取密码字典数据 with open(self.pwd_dict_path, 'r',encoding='utf-8') as json_file: self.pwd_dict_data = json.load(json_file) - + + self.crack_pause_condition = threading.Condition() + self.paused = False + self.run = False self.pwd_file_changed = False @@ -290,15 +295,23 @@ def clear_msg(self): # 重置所有控件状态 def reset_controls_state(self): '''重置状态''' - self.ui.cbo_wifi_name.setEnabled(True) - self.ui.cbo_security_type.setEnabled(True) - self.ui.cbo_wnic.setEnabled(True) - self.ui.dbl_scan_time.setEnabled(True) - self.ui.dbl_connect_time.setEnabled(True) - self.ui.btn_change_pwd_file.setEnabled(True) - self.ui.btn_refresh_wifi.setEnabled(True) - self.ui.btn_start.setEnabled(True) - self.ui.btn_stop.setDisabled(True) + try: + self.ui.cbo_wifi_name.setEnabled(True) + self.ui.cbo_security_type.setEnabled(True) + self.ui.cbo_wnic.setEnabled(True) + self.ui.dbl_scan_time.setEnabled(True) + self.ui.dbl_connect_time.setEnabled(True) + self.ui.btn_change_pwd_file.setEnabled(True) + self.ui.btn_refresh_wifi.setEnabled(True) + self.ui.btn_start.setEnabled(True) + self.ui.btn_pause_or_resume.setDisabled(True) + self.ui.btn_stop.setDisabled(True) + self.ui.btn_pause_or_resume.setText("暂停") + with self.crack_pause_condition: + self.paused = False + self.crack_pause_condition.notify_all() + except Exception as r: + pass # 设置所有控件为运行时的状态 def set_controls_running_state(self): @@ -311,6 +324,21 @@ def set_controls_running_state(self): self.ui.btn_change_pwd_file.setDisabled(True) self.ui.btn_refresh_wifi.setDisabled(True) self.ui.btn_start.setDisabled(True) + self.ui.btn_pause_or_resume.setEnabled(True) + self.ui.btn_stop.setEnabled(True) + + # 设置所有控件为暂停时的状态 + def set_controls_pausing_state(self): + '''暂停状态''' + self.ui.cbo_wifi_name.setDisabled(True) + self.ui.cbo_security_type.setDisabled(True) + self.ui.cbo_wnic.setDisabled(True) + self.ui.dbl_scan_time.setDisabled(True) + self.ui.dbl_connect_time.setDisabled(True) + self.ui.btn_change_pwd_file.setDisabled(True) + self.ui.btn_refresh_wifi.setDisabled(True) + self.ui.btn_start.setDisabled(True) + self.ui.btn_pause_or_resume.setEnabled(True) self.ui.btn_stop.setEnabled(True) # 刷新wifi列表 @@ -328,10 +356,10 @@ def refresh_wifi(self): thread.start() except Exception as r: self.win.showerror(title='错误警告',message='扫描wifi时发生未知错误 %s' %(r)) - self.show_msg('扫描wifi时发生未知错误 %s\n\n' %(r),"red") + self.show_msg('[错误]扫描wifi时发生未知错误 %s\n\n' %(r),"red") self.reset_controls_state() - # 开始暴力破解 + # 开始破解 def start(self): try: if self.config_settings_data['pwd_txt_path']!="" and os.path.exists(self.config_settings_data['pwd_txt_path']): @@ -351,17 +379,39 @@ def start(self): self.start() except Exception as r: self.win.showerror(title='错误警告',message='开始运行时发生未知错误 %s' %(r)) - self.show_msg('开始运行时发生未知错误 %s\n\n' %(r),"red") + self.show_msg('[错误]开始运行时发生未知错误 %s\n\n' %(r),"red") self.reset_controls_state() - # 终止暴力破解 + # 暂停破解 + def pause(self): + try: + with self.crack_pause_condition: + if self.paused: + self.paused = False + self.ui.btn_pause_or_resume.setText("暂停") + self.show_msg("开始继续破解...") + self.crack_pause_condition.notify_all() + else: + self.paused = True + self.ui.btn_pause_or_resume.setText("继续") + self.show_msg("正在尝试暂停破解...") + self.crack_pause_condition.notify_all() + except Exception as r: + self.win.showerror(title='错误警告',message='暂停过程中发生未知错误 %s' %(r)) + self.show_msg('[错误]暂停过程中发生未知错误 %s\n\n' %(r),"red") + self.reset_controls_state() + + # 终止破解 def stop(self): try: self.run = False self.show_msg("正在尝试终止破解...") + with self.crack_pause_condition: + self.paused = False + self.crack_pause_condition.notify_all() except Exception as r: - self.win.showerror(title='错误警告',message='停止时发生未知错误 %s' %(r)) - self.show_msg('停止时发生未知错误 %s\n\n' %(r),"red") + self.win.showerror(title='错误警告',message='停止过程中发生未知错误 %s' %(r)) + self.show_msg('[错误]停止过程中发生未知错误 %s\n\n' %(r),"red") self.reset_controls_state() # 暴力破解wifi密码的类 @@ -374,22 +424,14 @@ def __init__(self,tool:'WifiCrackTool'): self.wifi = PyWiFi() self.wnics = self.wifi.interfaces() self.iface:Interface - self.get_wnic() + self.__get_wnic() self.ssids = [] self.profile_dict = {} '''wifi信息字典''' self.convert_success = False self.is_auto = False - - def coding_convert(self,content:str,encoding:str='utf-8'): - try: - return content.encode('raw_unicode_escape').decode(encoding) - except Exception as r: - self.win.show_msg.send(f"编码转换时发生错误 {r}\n\n","red") - self.win.reset_controls_state.send() - return False - def get_wnic(self): + def __get_wnic(self): '''获取无线网卡''' try: if self.wnics.__len__() > 0: @@ -404,7 +446,7 @@ def get_wnic(self): except Exception as r: self.win.showerror(title='错误警告',message=f'获取无线网卡时发生未知错误 {r}') - self.tool.show_msg(f"获取无线网卡时发生未知错误 {r}\n\n","red") + self.tool.show_msg(f"[错误]获取无线网卡时发生未知错误 {r}\n\n","red") self.tool.reset_controls_state() def search_wifi(self): @@ -443,8 +485,12 @@ def search_wifi(self): if len(self.ssids) > 0: self.win.set_wifi_current_index.send(0) except Exception as r: - self.win.show_error.send('错误警告',f'扫描wifi时发生未知错误 {r}') - self.win.show_msg.send(f"扫描wifi时发生未知错误 {r}\n\n","red") + if r.args[0] == 'NULL pointer access' and self.iface.status() in [const.IFACE_DISCONNECTED,const.IFACE_INACTIVE]: + self.win.show_warning.send('警告',f'你当前设备的WLAN未打开!请打开WLAN后再继续使用。') + self.win.show_msg.send(f"[警告]你当前设备的WLAN未打开!请打开WLAN后再继续使用。\n\n","orange") + else: + self.win.show_error.send('错误警告',f'扫描wifi时发生未知错误 {r}') + self.win.show_msg.send(f"[错误]扫描wifi时发生未知错误 {r}\n\n","red") self.win.reset_controls_state.send() def auto_crack(self): @@ -479,12 +525,12 @@ def auto_crack(self): self.win.show_info.send('自动破解',"自动破解已完成!破解结果已记录到日志中") self.is_auto = False - self.tool.reset_controls_state() + self.win.reset_controls_state.send() except Exception as r: self.win.show_error.send('错误警告','自动破解过程中发生未知错误 %s' %(r)) - self.win.show_msg.send(f"自动破解过程中发生未知错误 {r}\n\n","red") + self.win.show_msg.send(f"[错误]自动破解过程中发生未知错误 {r}\n\n","red") self.is_auto = False - self.tool.reset_controls_state() + self.win.reset_controls_state.send() return False def crack(self,ssid:str): @@ -499,7 +545,7 @@ def crack(self,ssid:str): if self.iface.status() in [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]: # 测试是否已经断开网卡连接 self.win.show_msg.send("现有连接断开成功!\n\n","black") else: - self.win.show_msg.send("现有连接断开失败!\n\n","red") + self.win.show_msg.send("[错误]现有连接断开失败!\n\n","red") return False self.win.show_msg.send(f"正在准备破解WiFi[{ssid}]...\n\n","black") @@ -508,14 +554,21 @@ def crack(self,ssid:str): if len(pwd_dict_list) > 0: self.win.show_msg.send(f"发现密码字典中存在相同SSID:{ssid},开始尝试破解...\n\n","black") for i,pwd_dict in enumerate(pwd_dict_list,1): + # * 暂停线程 + with self.tool.crack_pause_condition: + if self.tool.paused: + self.win.show_msg.send("破解已暂停.\n","orange") + self.tool.crack_pause_condition.wait() + # * 停止线程 if self.tool.run==False: - self.win.show_msg.send("破解已终止.\n","black") + self.win.show_msg.send("破解已终止.\n","red") self.win.reset_controls_state.send() return False pwd = pwd_dict['pwd'] result = self.connect(ssid,pwd,'json',i) if result and not self.is_auto: self.win.show_info.send('破解成功',"连接成功,密码:%s\n(已复制到剪切板)"%(pwd)) + self.win.reset_controls_state.send() return True elif result: return pwd @@ -523,25 +576,32 @@ def crack(self,ssid:str): self.win.show_msg.send(f"开始尝试使用密码本破解WiFi[{ssid}]...\n\n","black") with open(self.tool.config_settings_data['pwd_txt_path'],'r', encoding='utf-8', errors='ignore') as lines: for i,line in enumerate(lines,1): + # * 暂停线程 + with self.tool.crack_pause_condition: + if self.tool.paused: + self.win.show_msg.send("破解已暂停.\n","orange") + self.tool.crack_pause_condition.wait() + # * 停止线程 if self.tool.run==False: - self.win.show_msg.send("破解已终止.\n","black") + self.win.show_msg.send("破解已终止.\n","red") self.win.reset_controls_state.send() return False pwd = line.strip() result = self.connect(ssid,pwd,'txt',i) if result and not self.is_auto: self.win.show_info.send('破解成功',"连接成功,密码:%s\n(已复制到剪切板)"%(pwd)) + self.win.reset_controls_state.send() return True elif result: return pwd if not self.is_auto: self.win.show_info.send('破解失败',"破解失败,已尝试完密码本中所有可能的密码") - self.tool.reset_controls_state() + self.win.reset_controls_state.send() return False except Exception as r: self.win.show_error.send('错误警告','破解过程中发生未知错误 %s' %(r)) - self.win.show_msg.send(f"破解过程中发生未知错误 {r}\n\n","red") - self.tool.reset_controls_state() + self.win.show_msg.send(f"[错误]破解过程中发生未知错误 {r}\n\n","red") + self.win.reset_controls_state.send() return False def connect(self,ssid,pwd,filetype,count): @@ -586,7 +646,6 @@ def connect(self,ssid,pwd,filetype,count): time.sleep(self.tool.config_settings_data['connect_time']) # * 连接需要时间 if self.iface.status() == const.IFACE_CONNECTED: # * 判断是否连接成功 self.win.show_msg.send(f"连接成功,密码:{pwd}\n\n","green") - self.tool.reset_controls_state() pyperclip.copy(pwd); # * 将密码复制到剪切板 if filetype != 'json': self.tool.pwd_dict_data.append({'ssid':ssid,'pwd':pwd}) @@ -601,8 +660,8 @@ def connect(self,ssid,pwd,filetype,count): except Exception as r: self.win.show_error.send('错误警告','连接wifi过程中发生未知错误 %s' %(r)) - self.win.show_msg.send(f"连接wifi过程中发生未知错误 {r}\n\n","red") - self.tool.reset_controls_state() + self.win.show_msg.send(f"[错误]连接wifi过程中发生未知错误 {r}\n\n","red") + self.win.reset_controls_state.send() return False if __name__ == "__main__": diff --git a/wifi_crack_tool_gui.py b/wifi_crack_tool_gui.py index 8490eeb..130bd7d 100644 --- a/wifi_crack_tool_gui.py +++ b/wifi_crack_tool_gui.py @@ -3,7 +3,7 @@ ################################################################################ ## Form generated from reading UI file 'wifi_crack_tool_gui.ui' ## -## Created by: Qt User Interface Compiler version 6.7.2 +## Created by: Qt User Interface Compiler version 6.8.0 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ @@ -54,6 +54,7 @@ def setupUi(self, MainWindow): self.cbo_wifi_name.setSizePolicy(sizePolicy1) self.cbo_wifi_name.setMinimumSize(QSize(201, 22)) self.cbo_wifi_name.setMaximumSize(QSize(201, 22)) + self.cbo_wifi_name.setFocusPolicy(Qt.FocusPolicy.NoFocus) self.cbo_wifi_name.setEditable(True) self.lbl_security_type = QLabel(self.centralwidget) self.lbl_security_type.setObjectName(u"lbl_security_type") @@ -65,6 +66,7 @@ def setupUi(self, MainWindow): self.cbo_security_type.setSizePolicy(sizePolicy1) self.cbo_security_type.setMinimumSize(QSize(201, 22)) self.cbo_security_type.setMaximumSize(QSize(201, 22)) + self.cbo_security_type.setFocusPolicy(Qt.FocusPolicy.NoFocus) self.lbl_wnic = QLabel(self.centralwidget) self.lbl_wnic.setObjectName(u"lbl_wnic") self.lbl_wnic.setGeometry(QRect(50, 70, 71, 20)) @@ -75,6 +77,7 @@ def setupUi(self, MainWindow): self.cbo_wnic.setSizePolicy(sizePolicy1) self.cbo_wnic.setMinimumSize(QSize(201, 22)) self.cbo_wnic.setMaximumSize(QSize(352, 22)) + self.cbo_wnic.setFocusPolicy(Qt.FocusPolicy.NoFocus) self.lbl_using_pwd_file = QLabel(self.centralwidget) self.lbl_using_pwd_file.setObjectName(u"lbl_using_pwd_file") self.lbl_using_pwd_file.setGeometry(QRect(5, 100, 521, 16)) @@ -82,28 +85,13 @@ def setupUi(self, MainWindow): self.txt_log_msg_info = QTextEdit(self.centralwidget) self.txt_log_msg_info.setObjectName(u"txt_log_msg_info") self.txt_log_msg_info.setGeometry(QRect(0, 150, 529, 350)) - self.splitter = QSplitter(self.centralwidget) - self.splitter.setObjectName(u"splitter") - self.splitter.setGeometry(QRect(100, 120, 331, 24)) - self.splitter.setOrientation(Qt.Orientation.Horizontal) - self.btn_change_pwd_file = QPushButton(self.splitter) - self.btn_change_pwd_file.setObjectName(u"btn_change_pwd_file") - self.splitter.addWidget(self.btn_change_pwd_file) - self.btn_refresh_wifi = QPushButton(self.splitter) - self.btn_refresh_wifi.setObjectName(u"btn_refresh_wifi") - self.splitter.addWidget(self.btn_refresh_wifi) - self.btn_start = QPushButton(self.splitter) - self.btn_start.setObjectName(u"btn_start") - self.splitter.addWidget(self.btn_start) - self.btn_stop = QPushButton(self.splitter) - self.btn_stop.setObjectName(u"btn_stop") - self.splitter.addWidget(self.btn_stop) self.lbl_scan_time = QLabel(self.centralwidget) self.lbl_scan_time.setObjectName(u"lbl_scan_time") self.lbl_scan_time.setGeometry(QRect(330, 10, 81, 20)) self.dbl_scan_time = QDoubleSpinBox(self.centralwidget) self.dbl_scan_time.setObjectName(u"dbl_scan_time") self.dbl_scan_time.setGeometry(QRect(410, 10, 62, 22)) + self.dbl_scan_time.setFocusPolicy(Qt.FocusPolicy.NoFocus) self.dbl_scan_time.setDecimals(1) self.dbl_scan_time.setMinimum(0.100000000000000) self.dbl_scan_time.setSingleStep(0.100000000000000) @@ -114,10 +102,30 @@ def setupUi(self, MainWindow): self.dbl_connect_time = QDoubleSpinBox(self.centralwidget) self.dbl_connect_time.setObjectName(u"dbl_connect_time") self.dbl_connect_time.setGeometry(QRect(410, 40, 62, 22)) + self.dbl_connect_time.setFocusPolicy(Qt.FocusPolicy.NoFocus) self.dbl_connect_time.setDecimals(1) self.dbl_connect_time.setMinimum(0.100000000000000) self.dbl_connect_time.setSingleStep(0.100000000000000) self.dbl_connect_time.setValue(3.000000000000000) + self.splitter = QSplitter(self.centralwidget) + self.splitter.setObjectName(u"splitter") + self.splitter.setGeometry(QRect(80, 120, 375, 23)) + self.splitter.setOrientation(Qt.Orientation.Horizontal) + self.btn_change_pwd_file = QPushButton(self.splitter) + self.btn_change_pwd_file.setObjectName(u"btn_change_pwd_file") + self.splitter.addWidget(self.btn_change_pwd_file) + self.btn_refresh_wifi = QPushButton(self.splitter) + self.btn_refresh_wifi.setObjectName(u"btn_refresh_wifi") + self.splitter.addWidget(self.btn_refresh_wifi) + self.btn_start = QPushButton(self.splitter) + self.btn_start.setObjectName(u"btn_start") + self.splitter.addWidget(self.btn_start) + self.btn_pause_or_resume = QPushButton(self.splitter) + self.btn_pause_or_resume.setObjectName(u"btn_pause_or_resume") + self.splitter.addWidget(self.btn_pause_or_resume) + self.btn_stop = QPushButton(self.splitter) + self.btn_stop.setObjectName(u"btn_stop") + self.splitter.addWidget(self.btn_stop) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) @@ -126,16 +134,17 @@ def setupUi(self, MainWindow): # setupUi def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"WiFi\u5bc6\u7801\u66b4\u529b\u7834\u89e3\u5de5\u5177v1.2.4 by \u767d\u6052aead", None)) + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"WiFi\u5bc6\u7801\u66b4\u529b\u7834\u89e3\u5de5\u5177v1.2.5 by \u767d\u6052aead", None)) self.lbl_wifi_name.setText(QCoreApplication.translate("MainWindow", u"WiFi\u540d\u79f0:", None)) self.lbl_security_type.setText(QCoreApplication.translate("MainWindow", u"\u5b89\u5168\u7c7b\u578b:", None)) self.lbl_wnic.setText(QCoreApplication.translate("MainWindow", u"\u65e0\u7ebf\u7f51\u5361:", None)) self.lbl_using_pwd_file.setText(QCoreApplication.translate("MainWindow", u"\u6b63\u5728\u4f7f\u7528\u5bc6\u7801\u672c: ", None)) + self.lbl_scan_time.setText(QCoreApplication.translate("MainWindow", u"\u626b\u63cf\u65f6\u95f4(s):", None)) + self.lbl_connect_time.setText(QCoreApplication.translate("MainWindow", u"\u8fde\u63a5\u95f4\u9694(s):", None)) self.btn_change_pwd_file.setText(QCoreApplication.translate("MainWindow", u"\u66f4\u6362\u5bc6\u7801\u672c", None)) self.btn_refresh_wifi.setText(QCoreApplication.translate("MainWindow", u"\u626b\u63cfWiFi", None)) self.btn_start.setText(QCoreApplication.translate("MainWindow", u"\u5f00\u59cb", None)) + self.btn_pause_or_resume.setText(QCoreApplication.translate("MainWindow", u"\u6682\u505c", None)) self.btn_stop.setText(QCoreApplication.translate("MainWindow", u"\u505c\u6b62", None)) - self.lbl_scan_time.setText(QCoreApplication.translate("MainWindow", u"\u626b\u63cf\u65f6\u95f4(s):", None)) - self.lbl_connect_time.setText(QCoreApplication.translate("MainWindow", u"\u8fde\u63a5\u65f6\u95f4(s):", None)) # retranslateUi diff --git a/wifi_crack_tool_gui.ui b/wifi_crack_tool_gui.ui index 5cec97c..e5ee671 100644 --- a/wifi_crack_tool_gui.ui +++ b/wifi_crack_tool_gui.ui @@ -32,7 +32,7 @@ - WiFi密码暴力破解工具v1.2.4 by 白恒aead + WiFi密码暴力破解工具v1.2.5 by 白恒aead @@ -97,6 +97,9 @@ 22 + + Qt::FocusPolicy::NoFocus + true @@ -141,6 +144,9 @@ 22 + + Qt::FocusPolicy::NoFocus + @@ -182,6 +188,9 @@ 22 + + Qt::FocusPolicy::NoFocus + @@ -209,39 +218,6 @@ - - - - 100 - 120 - 331 - 24 - - - - Qt::Orientation::Horizontal - - - - 更换密码本 - - - - - 扫描WiFi - - - - - 开始 - - - - - 停止 - - - @@ -264,6 +240,9 @@ 22 + + Qt::FocusPolicy::NoFocus + 1 @@ -287,7 +266,7 @@ - 连接时间(s): + 连接间隔(s): @@ -299,6 +278,9 @@ 22 + + Qt::FocusPolicy::NoFocus + 1 @@ -312,6 +294,44 @@ 3.000000000000000 + + + + 80 + 120 + 375 + 23 + + + + Qt::Orientation::Horizontal + + + + 更换密码本 + + + + + 扫描WiFi + + + + + 开始 + + + + + 暂停 + + + + + 停止 + + +