1
0
mirror of https://github.com/Z4nzu/hackingtool.git synced 2025-11-23 21:44:50 +02:00

Feat/rich UI menu lovely (#567)

This commit is contained in:
Modark
2025-10-14 02:02:18 -04:00
committed by GitHub
parent c43f290df5
commit 7df27d8383
47 changed files with 2794 additions and 581 deletions

View File

@@ -26,7 +26,7 @@ jobs:
cache: 'pip'
- run: pip install --upgrade pip
- run: pwd && ls -hal
- run: sudo ./install.sh 1
- run: sudo ./install.py 1
- run: pwd && ls -hal
# Typing "1" will allow us to manually enter the filepath to hackingtool.
# Provide the filepath ${HOME}/work/hackingtool/hackingtool

View File

@@ -204,11 +204,11 @@
- [Crivo](https://github.com/GMDSantana/crivo)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A00.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A0.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A1.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A2.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A4.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/AA.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/AAA.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/AAAA.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/AAAAA.png)
## Installation For Linux <img src="https://konpa.github.io/devicon/devicon.git/icons/linux/linux-original.svg" alt="linux" width="25" height="25"/></p><p align="center">
@@ -233,7 +233,7 @@
## Step : 4 Run hackingtool
sudo bash install.sh
sudo python install.py
## Step : 5 For installing tools in directory

View File

@@ -23,11 +23,11 @@
# Hackingtool Menu 🧰
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A00.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A0.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A1.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A2.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A4.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/A.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/AA.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/AAA.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/AAAA.png)
![](https://github.com/Z4nzu/hackingtool/blob/master/images/AAAAA.png)
## Installation guide for Linux <img src="https://konpa.github.io/devicon/devicon.git/icons/linux/linux-original.svg" alt="linux" width="25" height="25"/></p><p align="center">
@@ -41,7 +41,7 @@
sudo pip3 install -r requirements.txt
bash install.sh
python install.py
sudo hackingtool

134
core.py
View File

@@ -1,11 +1,21 @@
from rich.console import Console
from rich.panel import Panel
from rich.table import Table
from rich import box
from rich.traceback import install
from rich.theme import Theme
import os
import sys
import webbrowser
from platform import system
from traceback import print_exc
from typing import Callable
from typing import List
from typing import Tuple
from typing import Callable, List, Tuple
# Enable rich tracebacks
install()
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
def clear_screen():
@@ -24,57 +34,57 @@ def validate_input(ip, val_range):
class HackingTool(object):
# About the HackingTool
TITLE: str = "" # used to show info in the menu
TITLE: str = ""
DESCRIPTION: str = ""
INSTALL_COMMANDS: List[str] = []
INSTALLATION_DIR: str = ""
UNINSTALL_COMMANDS: List[str] = []
RUN_COMMANDS: List[str] = []
OPTIONS: List[Tuple[str, Callable]] = []
PROJECT_URL: str = ""
def __init__(self, options = None, installable: bool = True,
runnable: bool = True):
def __init__(self, options=None, installable=True, runnable=True):
options = options or []
if isinstance(options, list):
self.OPTIONS = []
if installable:
self.OPTIONS.append(('Install', self.install))
self.OPTIONS.append(("Install", self.install))
if runnable:
self.OPTIONS.append(('Run', self.run))
self.OPTIONS.append(("Run", self.run))
self.OPTIONS.extend(options)
else:
raise Exception(
"options must be a list of (option_name, option_fn) tuples")
raise Exception("options must be a list of (option_name, option_fn) tuples")
def show_info(self):
desc = self.DESCRIPTION
desc = f"[cyan]{self.DESCRIPTION}[/cyan]"
if self.PROJECT_URL:
desc += '\n\t[*] '
desc += self.PROJECT_URL
os.system(f'echo "{desc}"|boxes -d boy | lolcat')
desc += f"\n[green]🔗 {self.PROJECT_URL}[/green]"
console.print(Panel(desc, title=f"[bold purple]{self.TITLE}[/bold purple]", border_style="purple", box=box.DOUBLE))
def show_options(self, parent = None):
def show_options(self, parent=None):
clear_screen()
self.show_info()
table = Table(title="Options", box=box.SIMPLE_HEAVY)
table.add_column("No.", style="bold cyan", justify="center")
table.add_column("Action", style="bold yellow")
for index, option in enumerate(self.OPTIONS):
print(f"[{index + 1}] {option[0]}")
table.add_row(str(index + 1), option[0])
if self.PROJECT_URL:
print(f"[{98}] Open project page")
print(f"[{99}] Back to {parent.TITLE if parent is not None else 'Exit'}")
option_index = input("Select an option : ").strip()
table.add_row("98", "Open Project Page")
table.add_row("99", f"Back to {parent.TITLE if parent else 'Exit'}")
console.print(table)
option_index = input("\n[?] Select an option: ").strip()
try:
option_index = int(option_index)
if option_index - 1 in range(len(self.OPTIONS)):
ret_code = self.OPTIONS[option_index - 1][1]()
if ret_code != 99:
input("\n\nPress ENTER to continue:").strip()
input("\nPress [Enter] to continue...")
elif option_index == 98:
self.show_project_page()
elif option_index == 99:
@@ -82,95 +92,101 @@ class HackingTool(object):
sys.exit()
return 99
except (TypeError, ValueError):
print("Please enter a valid option")
input("\n\nPress ENTER to continue:").strip()
console.print("[red]⚠ Please enter a valid option.[/red]")
input("\nPress [Enter] to continue...")
except Exception:
print_exc()
input("\n\nPress ENTER to continue:").strip()
return self.show_options(parent = parent)
console.print_exception(show_locals=True)
input("\nPress [Enter] to continue...")
return self.show_options(parent=parent)
def before_install(self):
pass
def before_install(self): pass
def install(self):
self.before_install()
if isinstance(self.INSTALL_COMMANDS, (list, tuple)):
for INSTALL_COMMAND in self.INSTALL_COMMANDS:
console.print(f"[yellow]→ {INSTALL_COMMAND}[/yellow]")
os.system(INSTALL_COMMAND)
self.after_install()
def after_install(self):
print("Successfully installed!")
console.print("[green]✔ Successfully installed![/green]")
def before_uninstall(self) -> bool:
""" Ask for confirmation from the user and return """
return True
def uninstall(self):
if self.before_uninstall():
if isinstance(self.UNINSTALL_COMMANDS, (list, tuple)):
for UNINSTALL_COMMAND in self.UNINSTALL_COMMANDS:
console.print(f"[red]→ {UNINSTALL_COMMAND}[/red]")
os.system(UNINSTALL_COMMAND)
self.after_uninstall()
def after_uninstall(self):
pass
def after_uninstall(self): pass
def before_run(self):
pass
def before_run(self): pass
def run(self):
self.before_run()
if isinstance(self.RUN_COMMANDS, (list, tuple)):
for RUN_COMMAND in self.RUN_COMMANDS:
console.print(f"[cyan]⚙ Running:[/cyan] [bold]{RUN_COMMAND}[/bold]")
os.system(RUN_COMMAND)
self.after_run()
def after_run(self):
pass
def after_run(self): pass
def is_installed(self, dir_to_check = None):
print("Unimplemented: DO NOT USE")
def is_installed(self, dir_to_check=None):
console.print("[yellow]⚠ Unimplemented: DO NOT USE[/yellow]")
return "?"
def show_project_page(self):
console.print(f"[blue]🌐 Opening project page: {self.PROJECT_URL}[/blue]")
webbrowser.open_new_tab(self.PROJECT_URL)
class HackingToolsCollection(object):
TITLE: str = "" # used to show info in the menu
TITLE: str = ""
DESCRIPTION: str = ""
TOOLS = [] # type: List[Any[HackingTool, HackingToolsCollection]]
TOOLS: List = []
def __init__(self):
pass
def show_info(self):
os.system("figlet -f standard -c {} | lolcat".format(self.TITLE))
# os.system(f'echo "{self.DESCRIPTION}"|boxes -d boy | lolcat')
# print(self.DESCRIPTION)
console.rule(f"[bold purple]{self.TITLE}[/bold purple]", style="purple")
console.print(f"[italic cyan]{self.DESCRIPTION}[/italic cyan]\n")
def show_options(self, parent = None):
def show_options(self, parent=None):
clear_screen()
self.show_info()
table = Table(title="Available Tools", box=box.MINIMAL_DOUBLE_HEAD)
table.add_column("No.", justify="center", style="bold cyan")
table.add_column("Tool Name", style="bold yellow")
for index, tool in enumerate(self.TOOLS):
print(f"[{index} {tool.TITLE}")
print(f"[{99}] Back to {parent.TITLE if parent is not None else 'Exit'}")
tool_index = input("Choose a tool to proceed: ").strip()
table.add_row(str(index), tool.TITLE)
table.add_row("99", f"Back to {parent.TITLE if parent else 'Exit'}")
console.print(table)
tool_index = input("\n[?] Choose a tool: ").strip()
try:
tool_index = int(tool_index)
if tool_index in range(len(self.TOOLS)):
ret_code = self.TOOLS[tool_index].show_options(parent = self)
ret_code = self.TOOLS[tool_index].show_options(parent=self)
if ret_code != 99:
input("\n\nPress ENTER to continue:").strip()
input("\nPress [Enter] to continue...")
elif tool_index == 99:
if parent is None:
sys.exit()
return 99
except (TypeError, ValueError):
print("Please enter a valid option")
input("\n\nPress ENTER to continue:").strip()
console.print("[red]⚠ Please enter a valid option.[/red]")
input("\nPress [Enter] to continue...")
except Exception:
print_exc()
input("\n\nPress ENTER to continue:").strip()
return self.show_options(parent = parent)
console.print_exception(show_locals=True)
input("\nPress [Enter] to continue...")
return self.show_options(parent=parent)

View File

@@ -1,9 +1,16 @@
# coding=utf-8
import re
from rich.console import Console
from rich.theme import Theme
from core import HackingTool
from core import HackingToolsCollection
from hackingtool import all_tools
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
def sanitize_anchor(s):
return re.sub(r"\W", "-", s.lower())
@@ -48,4 +55,4 @@ def generate_readme():
if __name__ == '__main__':
generate_readme()
generate_readme()

View File

@@ -1,11 +1,22 @@
#!/usr/bin/env python3
# Version 1.1.0
# Version 1.1.0 (rich UI - purple theme)
import os
import sys
import webbrowser
from platform import system
from time import sleep
from rich.console import Console
from rich.panel import Panel
from rich.table import Table
from rich.prompt import Prompt, IntPrompt, Confirm
from rich.align import Align
from rich.text import Text
from rich import box
from rich.columns import Columns
from rich.rule import Rule
from rich.padding import Padding
from core import HackingToolsCollection
from tools.anonsurf import AnonSurfTools
from tools.ddos import DDOSTools
@@ -26,7 +37,9 @@ from tools.wireless_attack_tools import WirelessAttackTools
from tools.wordlist_generator import WordlistGeneratorTools
from tools.xss_attack import XSSAttackTools
logo = """\033[33m
console = Console()
ASCII_LOGO = r"""
▄█ █▄ ▄████████ ▄████████ ▄█ ▄█▄ ▄█ ███▄▄▄▄ ▄██████▄ ███ ▄██████▄ ▄██████▄ ▄█
███ ███ ███ ███ ███ ███ ███ ▄███▀ ███ ███▀▀▀██▄ ███ ███ ▀█████████▄ ███ ███ ███ ███ ███
███ ███ ███ ███ ███ █▀ ███▐██▀ ███▌ ███ ███ ███ █▀ ▀███▀▀██ ███ ███ ███ ███ ███
@@ -35,11 +48,29 @@ logo = """\033[33m
███ ███ ███ ███ ███ █▄ ███▐██▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
███ ███ ███ ███ ███ ███ ███ ▀███▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███▌ ▄
███ █▀ ███ █▀ ████████▀ ███ ▀█▀ █▀ ▀█ █▀ ████████▀ ▄████▀ ▀██████▀ ▀██████▀ █████▄▄██
▀ ▀
\033[34m[✔] https://github.com/Z4nzu/hackingtool [✔]
\033[34m[✔] Version 1.1.0 [✔]
\033[91m[X] Please Don't Use For illegal Activity [X]
\033[97m """
▀ ▀
"""
tool_definitions = [
("Anonymously Hiding Tools", "🛡️"),
("Information gathering tools", "🔍"),
("Wordlist Generator", "📚"),
("Wireless attack tools", "📶"),
("SQL Injection Tools", "🧩"),
("Phishing attack tools", "🎣"),
("Web Attack tools", "🌐"),
("Post exploitation tools", "🔧"),
("Forensic tools", "🕵️"),
("Payload creation tools", "📦"),
("Exploit framework", "🧰"),
("Reverse engineering tools", "🔁"),
("DDOS Attack Tools", ""),
("Remote Administrator Tools (RAT)", "🖥️"),
("XSS Attack Tools", "💥"),
("Steganograhy tools", "🖼️"),
("Other tools", ""),
("Update or Uninstall | Hackingtool", "♻️"),
]
all_tools = [
AnonSurfTools(),
@@ -68,55 +99,129 @@ class AllTools(HackingToolsCollection):
TOOLS = all_tools
def show_info(self):
print(logo + '\033[0m \033[97m')
header = Text()
header.append(ASCII_LOGO, style="bold magenta")
header.append("\n\n",)
footer = Text.assemble(
(" https://github.com/Z4nzu/hackingtool ", "bold bright_black"),
(" | ",),
("Version 1.1.0", "bold green"),
)
warning = Text(" Please Don't Use For illegal Activity ", style="bold red")
panel = Panel(
Align.center(header + Text("\n") + footer + Text("\n") + warning),
box=box.DOUBLE,
padding=(1, 2),
border_style="magenta"
)
console.print(panel)
def build_menu():
table = Table.grid(expand=True)
table.add_column("idx", width=6, justify="right")
table.add_column("name", justify="left")
for idx, (title, icon) in enumerate(tool_definitions):
if idx == 17:
label = "[bold magenta]99[/bold magenta]"
name = f"[bold magenta]{icon} {title}[/bold magenta]"
else:
label = f"[bold magenta]{idx}[/bold magenta]"
name = f"[white]{icon}[/white] [magenta]{title}[/magenta]"
table.add_row(label, name)
top_panel = Panel(
Align.center(Text("HackingTool — Main Menu", style="bold white on magenta"), vertical="middle"),
style="magenta",
padding=(0, 1),
box=box.ROUNDED
)
menu_panel = Panel.fit(
table,
title="[bold magenta]Select a tool[/bold magenta]",
border_style="bright_magenta",
box=box.SQUARE
)
footer = Align.center(Text("Choose number and press Enter — 99 to exit", style="italic bright_black"))
console.print(top_panel)
console.print(menu_panel)
console.print(Rule(style="bright_black"))
console.print(footer)
console.print("")
def choose_path():
fpath = os.path.expanduser("~/hackingtoolpath.txt")
if not os.path.exists(fpath):
os.system("clear" if system() == "Linux" else "cls")
build_menu()
console.print(Panel("Setup path for tool installations", border_style="magenta"))
choice = Prompt.ask("[magenta]Set Path[/magenta]", choices=["1", "2"], default="2")
if choice == "1":
inpath = Prompt.ask("[magenta]Enter Path (with Directory Name)[/magenta]")
with open(fpath, "w") as f:
f.write(inpath)
console.print(f"[green]Successfully Set Path to:[/green] {inpath}")
else:
autopath = "/home/hackingtool/"
with open(fpath, "w") as f:
f.write(autopath)
console.print(f"[green]Your Default Path Is:[/green] {autopath}")
sleep(1)
return fpath
def interact_menu():
while True:
try:
build_menu()
choice = IntPrompt.ask("[magenta]Choose a tool to proceed[/magenta]", default=0)
if choice == 99:
console.print(Panel("[bold white on magenta]Goodbye — Come Back Safely[/bold white on magenta]"))
break
if 0 <= choice < len(all_tools):
tool = all_tools[choice]
name = tool_definitions[choice][0]
console.print(Panel(f"[bold magenta]{tool_definitions[choice][1]} Selected:[/bold magenta] [white]{name}"))
try:
fn = getattr(tool, "show_options", None)
if callable(fn):
fn()
else:
console.print(f"[yellow]Tool '{name}' has no interactive menu (show_options).[/yellow]")
except Exception as e:
console.print(Panel(f"[red]Error while opening {name}[/red]\n{e}", border_style="red"))
if not Confirm.ask("[magenta]Return to main menu?[/magenta]", default=True):
console.print(Panel("[bold white on magenta]Exiting...[/bold white on magenta]"))
break
else:
console.print("[red]Invalid selection. Pick a number from the menu.[/red]")
except KeyboardInterrupt:
console.print("\n[bold red]Interrupted by user — exiting[/bold red]")
break
def main():
try:
if system() == "Linux":
fpath = choose_path()
with open(fpath) as f:
archive = f.readline().strip()
os.makedirs(archive, exist_ok=True)
os.chdir(archive)
AllTools().show_info()
interact_menu()
elif system() == "Windows":
console.print(Panel("[bold red]Please run this tool on a Debian/Linux system for best results[/bold red]"))
if Confirm.ask("Open guidance link in your browser?", default=True):
webbrowser.open_new_tab("https://tinyurl.com/y522modc")
sleep(2)
else:
console.print("[yellow]Please Check Your System or Open New Issue ...[/yellow]")
except KeyboardInterrupt:
console.print("\n[bold red]Exiting ..!!![/bold red]")
sleep(1)
if __name__ == "__main__":
try:
if system() == 'Linux':
fpath = os.path.expanduser("~/hackingtoolpath.txt")
if not os.path.exists(fpath):
os.system('clear')
# run.menu()
print("""
[@] Set Path (All your tools will be installed in that directory)
[1] Manual
[2] Default
""")
choice = input("Z4nzu =>> ").strip()
if choice == "1":
inpath = input("Enter Path (with Directory Name) >> ").strip()
with open(fpath, "w") as f:
f.write(inpath)
print("Successfully Set Path to: {}".format(inpath))
elif choice == "2":
autopath = "/home/hackingtool/"
with open(fpath, "w") as f:
f.write(autopath)
print("Your Default Path Is: {}".format(autopath))
sleep(3)
else:
print("Try Again..!!")
sys.exit(0)
with open(fpath) as f:
archive = f.readline()
os.makedirs(archive, exist_ok=True)
os.chdir(archive)
AllTools().show_options()
# If not Linux and probably Windows
elif system() == "Windows":
print(
r"\033[91m Please Run This Tool On A Debian System For Best Results\e[00m"
)
sleep(2)
webbrowser.open_new_tab("https://tinyurl.com/y522modc")
else:
print("Please Check Your System or Open New Issue ...")
except KeyboardInterrupt:
print("\nExiting ..!!!")
sleep(2)
main()

BIN
images/A.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

BIN
images/AA.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
images/AAA.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB

BIN
images/AAAA.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 KiB

BIN
images/AAAAA.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

207
install.py Executable file
View File

@@ -0,0 +1,207 @@
#!/usr/bin/env python3
# install_hackingtool.py (rich-based installer UI)
import os
import sys
import shutil
import subprocess
from pathlib import Path
from rich.console import Console
from rich.panel import Panel
from rich.prompt import Prompt, Confirm, IntPrompt
from rich.table import Table
from rich.align import Align
from rich.progress import Progress, SpinnerColumn, TextColumn
from rich.text import Text
from rich import box
from random import choice
console = Console()
REPO_URL = "https://github.com/Z4nzu/hackingtool.git"
INSTALL_DIR = Path("/usr/share/hackingtool")
BIN_PATH = Path("/usr/bin/hackingtool")
VENV_DIR_NAME = "venv"
REQUIREMENTS = "requirements.txt"
def check_root():
if os.geteuid() != 0:
console.print(Panel("[red]This installer must be run as root. Use: sudo python3 install_hackingtool.py[/red]"))
sys.exit(1)
def run_cmd(cmd, check=True, capture=False, env=None):
return subprocess.run(cmd, shell=True, check=check, capture_output=capture, text=True, env=env)
def colorful_logo():
logos = ["magenta", "bright_magenta", "cyan", "blue", "green", "yellow"]
style = choice(logos)
logo_lines = r"""
▄█ █▄ ▄████████ ▄████████ ▄█ ▄█▄ ▄█ ███▄▄▄▄ ▄██████▄ ███ ▄██████▄ ▄██████▄ ▄█
███ ███ ███ ███ ███ ███ ███ ▄███▀ ███ ███▀▀▀██▄ ███ ███ ▀█████████▄ ███ ███ ███ ███ ███
███ ███ ███ ███ ███ █▀ ███▐██▀ ███▌ ███ ███ ███ █▀ ▀███▀▀██ ███ ███ ███ ███ ███
▄███▄▄▄▄███▄▄ ███ ███ ███ ▄█████▀ ███▌ ███ ███ ▄███ ███ ▀ ███ ███ ███ ███ ███
▀▀███▀▀▀▀███▀ ▀███████████ ███ ▀▀█████▄ ███▌ ███ ███ ▀▀███ ████▄ ███ ███ ███ ███ ███ ███
███ ███ ███ ███ ███ █▄ ███▐██▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
███ ███ ███ ███ ███ ███ ███ ▀███▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███▌ ▄
███ █▀ ███ █▀ ████████▀ ███ ▀█▀ █▀ ▀█ █▀ ████████▀ ▄████▀ ▀██████▀ ▀██████▀ █████▄▄██
▀ ▀
"""
panel = Panel(Text(logo_lines, style=style), box=box.DOUBLE, border_style=style)
console.print(panel)
console.print(f"[bold {style}]https://github.com/Z4nzu/hackingtool[/bold {style}]\n")
def choose_distro():
console.print(Panel("[bold magenta]Select installation target[/bold magenta]\n\n[1] Kali / Parrot (apt)\n[2] Arch (pacman)\n[0] Exit", border_style="bright_magenta"))
choice = IntPrompt.ask("Choice", choices=["0", "1", "2"], default=1)
return choice
def check_internet():
console.print("[yellow]* Checking internet connectivity...[/yellow]")
try:
run_cmd("curl -sSf --max-time 10 https://www.google.com > /dev/null", check=True)
console.print("[green][✔] Internet connection OK[/green]")
return True
except Exception:
try:
run_cmd("curl -sSf --max-time 10 https://github.com > /dev/null", check=True)
console.print("[green][✔] Internet connection OK[/green]")
return True
except Exception:
console.print("[red][✘] Internet connection not available[/red]")
return False
def system_update_and_install(choice):
if choice == 1:
console.print("[yellow]* Running apt update/upgrade...[/yellow]")
try:
run_cmd("apt update -y && apt upgrade -y")
except subprocess.CalledProcessError as e:
console.print(f"[red][!][/red] apt update/upgrade failed (non-fatal). Continuing installation. Error: {e}")
console.print("[yellow]* Installing required packages (apt)...[/yellow]")
try:
run_cmd("apt-get install -y git python3-pip python3-venv figlet boxes php curl xdotool wget")
except subprocess.CalledProcessError as e:
console.print(f"[red][!][/red] apt-get install failed (non-fatal). You may need to install some packages manually. Error: {e}")
elif choice == 2:
console.print("[yellow]* Running pacman update...[/yellow]")
try:
run_cmd("pacman -Syu --noconfirm")
except subprocess.CalledProcessError as e:
console.print(f"[red][!][/red] pacman update failed (non-fatal). Continuing installation. Error: {e}")
console.print("[yellow]* Installing required packages (pacman)...[/yellow]")
try:
run_cmd("pacman -S --noconfirm git python-pip")
except subprocess.CalledProcessError as e:
console.print(f"[red][!][/red] pacman install failed (non-fatal). You may need to install some packages manually. Error: {e}")
else:
console.print("[red]Invalid package manager choice[/red]")
def prepare_install_dir():
if INSTALL_DIR.exists():
console.print(f"[red]The directory {INSTALL_DIR} already exists.[/red]")
if Confirm.ask("Replace it? This will remove the existing directory", default=False):
run_cmd(f"rm -rf {str(INSTALL_DIR)}")
else:
console.print("[red]Installation aborted by user.[/red]")
sys.exit(1)
INSTALL_DIR.mkdir(parents=True, exist_ok=True)
def git_clone():
console.print("[yellow]* Cloning hackingtool repository...[/yellow]")
try:
run_cmd(f"git clone {REPO_URL} {str(INSTALL_DIR)}")
console.print("[green][✔] Repository cloned[/green]")
return True
except Exception as e:
console.print(f"[red][✘] Failed to clone repository: {e}[/red]")
return False
def create_venv_and_install(choice):
venv_path = INSTALL_DIR / VENV_DIR_NAME
console.print("[yellow]* Creating virtual environment...[/yellow]")
run_cmd(f"python3 -m venv {str(venv_path)}")
activate = venv_path / "bin" / "activate"
pip = str(venv_path / "bin" / "pip")
if (INSTALL_DIR / REQUIREMENTS).exists():
console.print("[yellow]* Installing Python requirements...[/yellow]")
run_cmd(f"{pip} install -r {str(INSTALL_DIR / REQUIREMENTS)}")
else:
console.print("[yellow]requirements.txt not found, skipping pip install.[/yellow]")
if choice == 1:
run_cmd("apt install figlet -y")
elif choice == 2:
# try pacman and fallback to AUR instructions
try:
run_cmd("pacman -S --noconfirm figlet")
except Exception:
console.print("[yellow]figlet not available in pacman automatically. Consider installing from AUR.[/yellow]")
def create_launcher():
console.print("[yellow]* Creating launcher script...[/yellow]")
launcher = INSTALL_DIR / "hackingtool.sh"
with open(launcher, "w") as f:
f.write("#!/bin/bash\n")
f.write(f"source {str(INSTALL_DIR / VENV_DIR_NAME)}/bin/activate\n")
f.write(f"python3 {str(INSTALL_DIR / 'hackingtool.py')} \"$@\"\n")
os.chmod(launcher, 0o755)
# move to /usr/bin/hackingtool
if BIN_PATH.exists():
BIN_PATH.unlink()
shutil.move(str(launcher), str(BIN_PATH))
console.print(f"[green][✔] Launcher installed at {str(BIN_PATH)}[/green]")
def final_messages():
panel = Panel(
"[bold magenta]Installation complete[/bold magenta]\n\nType [bold cyan]hackingtool[/bold cyan] in terminal to start.",
border_style="magenta",
)
console.print(panel)
def main():
check_root()
console.clear()
colorful_logo()
choice = choose_distro()
if choice == 0:
console.print("[red]Exiting...[/red]")
sys.exit(0)
if not check_internet():
sys.exit(1)
with Progress(SpinnerColumn(), TextColumn("[progress.description]{task.description}")) as progress:
progress.add_task(description="Preparing system...", total=None)
system_update_and_install(choice)
prepare_install_dir()
ok = git_clone()
if not ok:
sys.exit(1)
with Progress(SpinnerColumn(), TextColumn("[progress.description]{task.description}")) as progress:
progress.add_task(description="Setting up virtualenv & requirements...", total=None)
create_venv_and_install(choice)
create_launcher()
final_messages()
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
console.print("\n[red]Installation interrupted by user[/red]")
sys.exit(1)
except subprocess.CalledProcessError as e:
console.print(f"[red]Command failed: {e}[/red]")
sys.exit(1)

View File

@@ -1,160 +0,0 @@
#!/bin/bash
set -e
clear
RED='\e[1;31m'
GREEN='\e[1;32m'
YELLOW='\e[1;33m'
BLUE='\e[1;34m'
CYAN='\e[1;36m'
WHITE='\e[1;37m'
ORANGE='\e[1;93m'
NC='\e[0m'
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}This script must be run as root"
exit 1
fi
COLOR_NUM=$((RANDOM % 7))
# Assign a color variable based on the random number
case $COLOR_NUM in
0) COLOR=$RED;;
1) COLOR=$GREEN;;
2) COLOR=$YELLOW;;
3) COLOR=$BLUE;;
4) COLOR=$CYAN;;
5) COLOR=$ORANGE;;
*) COLOR=$WHITE;;
esac
echo -e "${COLOR}"
echo ""
echo " ▄█ █▄ ▄████████ ▄████████ ▄█ ▄█▄ ▄█ ███▄▄▄▄ ▄██████▄ ███ ▄██████▄ ▄██████▄ ▄█ ";
echo " ███ ███ ███ ███ ███ ███ ███ ▄███▀ ███ ███▀▀▀██▄ ███ ███ ▀█████████▄ ███ ███ ███ ███ ███ ";
echo " ███ ███ ███ ███ ███ █▀ ███▐██▀ ███▌ ███ ███ ███ █▀ ▀███▀▀██ ███ ███ ███ ███ ███ ";
echo " ▄███▄▄▄▄███▄▄ ███ ███ ███ ▄█████▀ ███▌ ███ ███ ▄███ ███ ▀ ███ ███ ███ ███ ███ ";
echo "▀▀███▀▀▀▀███▀ ▀███████████ ███ ▀▀█████▄ ███▌ ███ ███ ▀▀███ ████▄ ███ ███ ███ ███ ███ ███ ";
echo " ███ ███ ███ ███ ███ █▄ ███▐██▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ";
echo " ███ ███ ███ ███ ███ ███ ███ ▀███▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███▌ ▄ ";
echo " ███ █▀ ███ █▀ ████████▀ ███ ▀█▀ █▀ ▀█ █▀ ████████▀ ▄████▀ ▀██████▀ ▀██████▀ █████▄▄██ ";
echo " ▀ ▀ ";
echo -e "${BLUE} https://github.com/Z4nzu/hackingtool ${NC}"
echo -e "${RED} [!] This Tool Must Run As ROOT [!]${NC}\n"
echo -e "${CYAN} Select Best Option : \n"
echo -e "${WHITE} [1] Kali Linux / Parrot-Os (apt)"
echo -e "${WHITE} [2] Arch Linux (pacman)" # added arch linux support because of feature request #231
echo -e "${WHITE} [0] Exit "
echo -e "${COLOR}┌──($USER$HOST)-[$(pwd)]"
choice=$1
if [[ ! $choice =~ ^[1-2]+$ ]]; then
read -p "└─$>>" choice
fi
# Define installation directories
install_dir="/usr/share/hackingtool"
bin_dir="/usr/bin"
# Check if the user chose a valid option and perform the installation steps
if [[ $choice =~ ^[1-2]+$ ]]; then
echo -e "${YELLOW}[*] Checking Internet Connection ..${NC}"
echo "";
if curl -s -m 10 https://www.google.com > /dev/null || curl -s -m 10 https://www.github.com > /dev/null; then
echo -e "${GREEN}[✔] Internet connection is OK [✔]${NC}"
echo "";
echo -e "${YELLOW}[*] Updating package list ..."
# Perform installation steps based on the user's choice
if [[ $choice == 1 ]]; then
sudo apt update -y && sudo apt upgrade -y
sudo apt-get install -y git python3-pip figlet boxes php curl xdotool wget -y ;
elif [[ $choice == 2 ]]; then
sudo pacman -Suy -y
sudo pacman -S python-pip -y
else
exit
fi
echo "";
echo -e "${YELLOW}[*] Checking directories...${NC}"
if [[ -d "$install_dir" ]]; then
echo -e -n "${RED}[!] The directory $install_dir already exists. Do you want to replace it? [y/n]: ${NC}"
read input
if [[ $input == "y" ]] || [[ $input == "Y" ]]; then
echo -e "${YELLOW}[*]Removing existing module.. ${NC}"
sudo rm -rf "$install_dir"
else
echo -e "${RED}[✘]Installation Not Required[✘] ${NC}"
exit
fi
fi
echo "";
echo -e "${YELLOW}[✔] Downloading hackingtool...${NC}"
if sudo git clone https://github.com/Z4nzu/hackingtool.git $install_dir; then
# Install virtual environment
echo -e "${YELLOW}[*] Installing Virtual Environment...${NC}"
if [[ $choice == 1 ]]; then
sudo apt install python3-venv -y
elif [[ $choice == 2 ]]; then
echo "Python 3.3+ comes with a module called venv.";
fi
echo "";
# Create a virtual environment for the tool
echo -e "${YELLOW}[*] Creating virtual environment..."
sudo python3 -m venv $install_dir/venv
source $install_dir/venv/bin/activate
# Install requirements
echo -e "${GREEN}[✔] Virtual Environment successfully [✔]${NC}";
echo "";
echo -e "${YELLOW}[*] Installing requirements...${NC}"
if [[ $choice == 1 ]]; then
pip3 install -r $install_dir/requirements.txt
sudo apt install figlet -y
elif [[ $choice == 2 ]]; then
pip3 install -r $install_dir/requirements.txt
sudo -u $SUDO_USER git clone https://aur.archlinux.org/boxes.git && cd boxes
sudo -u $SUDO_USER makepkg -si
sudo pacman -S figlet -y
fi
# Create a shell script to launch the tool
echo -e "${YELLOW}[*] Creating a shell script to launch the tool..."
# echo '#!/bin/bash' > hackingtool.sh
echo '#!/bin/bash' > $install_dir/hackingtool.sh
echo "source $install_dir/venv/bin/activate" >> $install_dir/hackingtool.sh
echo "python3 $install_dir/hackingtool.py \$@" >> $install_dir/hackingtool.sh
chmod +x $install_dir/hackingtool.sh
sudo mv $install_dir/hackingtool.sh $bin_dir/hackingtool
echo -e "${GREEN}[✔] Script created successfully [✔]"
else
echo -e "${RED}[✘] Failed to download Hackingtool [✘]"
exit 1
fi
else
echo -e "${RED}[✘] Internet connection is not available [✘]${NC}"
exit 1
fi
if [ -d $install_dir ]; then
echo "";
echo -e "${GREEN}[✔] Successfully Installed [✔]";
echo "";
echo "";
echo -e "${ORANGE}[+]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+]"
echo "[+] [+]"
echo -e "${ORANGE}[+] ✔✔✔ Now Just Type In Terminal (hackingtool) ✔✔✔ [+]"
echo "[+] [+]"
echo -e "${ORANGE}[+]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+]"
else
echo -e "${RED}[✘] Installation Failed !!! [✘]";
exit 1
fi
elif [[ $choice == 0 ]]; then
echo -e "${RED}[✘] Exiting tool [✘]"
exit 1
else
echo -e "${RED}[!] Select Valid Option [!]"
fi

View File

@@ -1,4 +1,5 @@
boxes
flask
lolcat
requests
requests
rich

View File

@@ -1,25 +1,38 @@
# coding=utf-8
import os
from rich.console import Console
from rich.panel import Panel
from rich.prompt import Prompt
from rich.text import Text
from rich.table import Table
from core import HackingTool
from core import HackingToolsCollection
console = Console()
P_COLOR = "magenta"
class AnonymouslySurf(HackingTool):
TITLE = "Anonymously Surf"
DESCRIPTION = "It automatically overwrites the RAM when\n" \
"the system is shutting down and also change Ip."
DESCRIPTION = (
"It automatically overwrites the RAM when\n"
"the system is shutting down and also change Ip."
)
INSTALL_COMMANDS = [
"sudo git clone https://github.com/Und3rf10w/kali-anonsurf.git",
"cd kali-anonsurf && sudo ./installer.sh && cd .. && sudo rm -r kali-anonsurf"
"cd kali-anonsurf && sudo ./installer.sh && cd .. && sudo rm -r kali-anonsurf",
]
RUN_COMMANDS = ["sudo anonsurf start"]
PROJECT_URL = "https://github.com/Und3rf10w/kali-anonsurf"
def __init__(self):
super(AnonymouslySurf, self).__init__([('Stop', self.stop)])
super(AnonymouslySurf, self).__init__([("Stop", self.stop)])
def stop(self):
console.print(Panel(Text(self.TITLE, justify="center"), style=f"bold {P_COLOR}"))
console.print("Stopping Anonsurf...", style=f"bold {P_COLOR}")
os.system("sudo anonsurf stop")
@@ -28,13 +41,16 @@ class Multitor(HackingTool):
DESCRIPTION = "How to stay in multi places at the same time"
INSTALL_COMMANDS = [
"sudo git clone https://github.com/trimstray/multitor.git",
"cd multitor;sudo bash setup.sh install"
"cd multitor;sudo bash setup.sh install",
]
RUN_COMMANDS = [
"multitor --init 2 --user debian-tor --socks-port 9000 --control-port 9900 --proxy privoxy --haproxy"
]
RUN_COMMANDS = ["multitor --init 2 --user debian-tor --socks-port 9000 --control-port 9900 --proxy privoxy --haproxy"]
PROJECT_URL = "https://github.com/trimstray/multitor"
def __init__(self):
super(Multitor, self).__init__(runnable = False)
# keep original behavior (non-runnable) while still initializing
super(Multitor, self).__init__(runnable=False)
class AnonSurfTools(HackingToolsCollection):
@@ -42,5 +58,72 @@ class AnonSurfTools(HackingToolsCollection):
DESCRIPTION = ""
TOOLS = [
AnonymouslySurf(),
Multitor()
Multitor(),
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Anonymously Hiding Tools", show_lines=True, expand=True)
table.add_column("Title", style="magenta", no_wrap=True)
table.add_column("Description", style="magenta")
table.add_column("Project URL", style="magenta", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc).strip().replace("\n", " "), str(url))
panel = Panel(table, title=f"[{P_COLOR}]Available Tools[/ {P_COLOR}]", border_style=P_COLOR)
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
console.print(Panel.fit(
"[bold magenta]Anonymously Hiding Tools Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style=P_COLOR
))
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# delegate if collection-style interface exists
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# otherwise, if the tool has actions or a run method, prefer those
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = AnonSurfTools()
tools.pretty_print()
tools.show_options()

View File

@@ -2,9 +2,18 @@
import os
import subprocess
from rich.console import Console
from rich.prompt import Prompt
from rich.panel import Panel
from rich.text import Text
from rich.table import Table
from core import HackingTool
from core import HackingToolsCollection
console = Console()
P_COLOR = "magenta" # primary purple/magenta theme for styling
class ddos(HackingTool):
TITLE = "ddos"
@@ -21,12 +30,13 @@ class ddos(HackingTool):
PROJECT_URL = "https://github.com/the-deepnet/ddos.git"
def run(self):
method = input("Enter Method >> ")
url = input("Enter URL >> ")
threads = input("Enter Threads >> ")
proxylist = input(" Enter ProxyList >> ")
multiple = input(" Enter Multiple >> ")
timer = input(" Enter Timer >> ")
console.print(Panel(Text(self.TITLE, justify="center"), style=f"bold {P_COLOR}"))
method = Prompt.ask("Enter Method >>")
url = Prompt.ask("Enter URL >>")
threads = Prompt.ask("Enter Threads >>")
proxylist = Prompt.ask("Enter ProxyList >>")
multiple = Prompt.ask("Enter Multiple >>")
timer = Prompt.ask("Enter Timer >>")
os.system("cd ddos;")
subprocess.run(
[
@@ -52,7 +62,8 @@ class SlowLoris(HackingTool):
INSTALL_COMMANDS = ["sudo pip3 install slowloris"]
def run(self):
target_site = input("Enter Target Site:- ")
console.print(Panel(Text(self.TITLE, justify="center"), style=f"bold {P_COLOR}"))
target_site = Prompt.ask("Enter Target Site:-")
subprocess.run(["slowloris", target_site])
@@ -70,9 +81,10 @@ class Asyncrone(HackingTool):
PROJECT_URL = "https://github.com/fatihsnsy/aSYNcrone"
def run(self):
source_port = input("Enter Source Port >> ")
target_ip = input("Enter Target IP >> ")
target_port = input("Enter Target port >> ")
console.print(Panel(Text(self.TITLE, justify="center"), style=f"bold {P_COLOR}"))
source_port = Prompt.ask("Enter Source Port >>")
target_ip = Prompt.ask("Enter Target IP >>")
target_port = Prompt.ask("Enter Target port >>")
os.system("cd aSYNcrone;")
subprocess.run(
["sudo", "./aSYNcrone", source_port, target_ip, target_port, 1000]
@@ -108,8 +120,9 @@ class GoldenEye(HackingTool):
PROJECT_URL = "https://github.com/jseidl/GoldenEye"
def run(self):
console.print(Panel(Text(self.TITLE, justify="center"), style=f"bold {P_COLOR}"))
os.system("cd GoldenEye ;sudo ./goldeneye.py")
print("\033[96m Go to Directory \n [*] USAGE: ./goldeneye.py <url> [OPTIONS]")
console.print("Go to Directory\n[*] USAGE: ./goldeneye.py <url> [OPTIONS]")
class Saphyra(HackingTool):
@@ -125,13 +138,81 @@ class Saphyra(HackingTool):
PROJECT_URL = "https://github.com/anonymous24x7/Saphyra-DDoS"
def run(self):
url = input("Enter url>>> ")
console.print(Panel(Text(self.TITLE, justify="center"), style=f"bold {P_COLOR}"))
url = Prompt.ask("Enter url>>>")
try:
os.system("python saphyra.py " + url)
except Exception:
print("Enter a valid url.")
console.print("Enter a valid url.", style="bold red")
class DDOSTools(HackingToolsCollection):
TITLE = "DDOS Attack Tools"
TOOLS = [SlowLoris(), Asyncrone(), UFONet(), GoldenEye(), Saphyra()]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="DDOS Attack Tools", show_lines=True, expand=True)
table.add_column("Title", style="magenta", no_wrap=True)
table.add_column("Description", style="magenta")
table.add_column("Project URL", style="magenta", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc).strip().replace("\n", " "), str(url))
panel = Panel(table, title=f"[{P_COLOR}]Available Tools[/ {P_COLOR}]", border_style=P_COLOR)
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
console.print(Panel.fit(
"[bold magenta]DDOS Attack Tools Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style=P_COLOR
))
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# If tool exposes show_options (collection-style), delegate to it
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# Otherwise, if runnable, call its run method
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = DDOSTools()
tools.pretty_print()
tools.show_options()

View File

@@ -3,6 +3,15 @@ from core import HackingTool
from core import HackingToolsCollection
from tools.webattack import Web2Attack
from rich.console import Console
from rich.table import Table
from rich.panel import Panel
from rich.text import Text
from rich.prompt import Prompt
console = Console()
PURPLE_STYLE = "bold magenta"
class RouterSploit(HackingTool):
TITLE = "RouterSploit"
@@ -42,7 +51,7 @@ class Commix(HackingTool):
PROJECT_URL = "https://github.com/commixproject/commix"
def __init__(self):
super(Commix, self).__init__(runnable = False)
super(Commix, self).__init__(runnable=False)
class ExploitFrameworkTools(HackingToolsCollection):
@@ -53,3 +62,91 @@ class ExploitFrameworkTools(HackingToolsCollection):
Commix(),
Web2Attack()
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Exploit framework", show_lines=True, expand=True)
table.add_column("Title", style="magenta", no_wrap=True)
table.add_column("Description", style="magenta")
table.add_column("Project URL", style="magenta", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc).strip().replace("\n", " "), str(url))
panel = Panel(table, title=f"[magenta]Available Tools[/magenta]", border_style=PURPLE_STYLE)
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
console.print(Panel.fit(
"[bold magenta]Exploit Framework Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style=PURPLE_STYLE
))
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# If tool exposes show_options (collection-style), delegate to it
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# Otherwise, if runnable, call its run method
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
# --- Optional helper: pretty-print the tools list into a magenta-styled table.
# This helper is non-invasive and does not change tool logic.
def render_tools_table(tools, title: str | None = None):
"""
Render a list of HackingTool instances (or objects with TITLE/DESCRIPTION/PROJECT_URL)
as a rich table in magenta style.
"""
tbl = Table(title=title or "Tools", show_lines=False, header_style=PURPLE_STYLE)
tbl.add_column("Name", style=PURPLE_STYLE, no_wrap=True)
tbl.add_column("Description")
tbl.add_column("Project URL", overflow="fold")
for t in tools:
name = getattr(t, "TITLE", "<unknown>")
desc = getattr(t, "DESCRIPTION", "")
url = getattr(t, "PROJECT_URL", "")
tbl.add_row(name, desc, url)
console.print(Panel(tbl, border_style=PURPLE_STYLE, title=Text(title or "Toolset", style=PURPLE_STYLE)))
if __name__ == "__main__":
tools = ExploitFrameworkTools()
tools.pretty_print()
tools.show_options()

View File

@@ -1,6 +1,5 @@
# coding=utf-8
import os
import sys
# Fetching parent directory for importing core.py
@@ -11,6 +10,15 @@ sys.path.append(parent_dir)
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.panel import Panel
from rich.text import Text
from rich.table import Table
from rich.prompt import Prompt
console = Console()
PURPLE_STYLE = "bold magenta"
class Autopsy(HackingTool):
TITLE = "Autopsy"
@@ -21,7 +29,7 @@ class Autopsy(HackingTool):
RUN_COMMANDS = ["sudo autopsy"]
def __init__(self):
super(Autopsy, self).__init__(installable = False)
super(Autopsy, self).__init__(installable=False)
class Wireshark(HackingTool):
@@ -32,7 +40,7 @@ class Wireshark(HackingTool):
RUN_COMMANDS = ["sudo wireshark"]
def __init__(self):
super(Wireshark, self).__init__(installable = False)
super(Wireshark, self).__init__(installable=False)
class BulkExtractor(HackingTool):
@@ -44,23 +52,24 @@ class BulkExtractor(HackingTool):
super(BulkExtractor, self).__init__([
('GUI Mode (Download required)', self.gui_mode),
('CLI Mode', self.cli_mode)
], installable = False, runnable = False)
], installable=False, runnable=False)
def gui_mode(self):
os.system(
"sudo git clone https://github.com/simsong/bulk_extractor.git")
console.print(Panel(Text(self.TITLE, justify="center"), style=PURPLE_STYLE))
console.print("[bold magenta]Cloning repository and attempting to run GUI...[/]")
os.system("sudo git clone https://github.com/simsong/bulk_extractor.git")
os.system("ls src/ && cd .. && cd java_gui && ./BEViewer")
print(
"If you getting error after clone go to /java_gui/src/ And Compile .Jar file && run ./BEViewer")
print(
"Please Visit For More Details About Installation >> https://github.com/simsong/bulk_extractor")
console.print(
"[magenta]If you get an error after clone go to /java_gui/src/ and compile the .jar file && run ./BEViewer[/]")
console.print(
"[magenta]Please visit for more details about installation: https://github.com/simsong/bulk_extractor[/]")
def cli_mode(self):
console.print(Panel(Text(self.TITLE + " - CLI Mode", justify="center"), style=PURPLE_STYLE))
os.system("sudo apt install bulk-extractor")
print("bulk_extractor and options")
console.print("[magenta]Showing bulk_extractor help and options:[/]")
os.system("bulk_extractor -h")
os.system(
'echo "bulk_extractor [options] imagefile" | boxes -d headline | lolcat')
os.system('echo "bulk_extractor [options] imagefile" | boxes -d headline | lolcat')
class Guymager(HackingTool):
@@ -70,6 +79,9 @@ class Guymager(HackingTool):
RUN_COMMANDS = ["sudo guymager"]
PROJECT_URL = "https://guymager.sourceforge.io/"
def __init__(self):
super(Guymager, self).__init__(installable=False)
class Toolsley(HackingTool):
TITLE = "Toolsley"
@@ -84,7 +96,7 @@ class Toolsley(HackingTool):
PROJECT_URL = "https://www.toolsley.com/"
def __init__(self):
super(Toolsley, self).__init__(installable = False, runnable = False)
super(Toolsley, self).__init__(installable=False, runnable=False)
class ForensicTools(HackingToolsCollection):
@@ -96,3 +108,72 @@ class ForensicTools(HackingToolsCollection):
Guymager(),
Toolsley()
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Forensic Tools", show_lines=True, expand=True)
table.add_column("Title", style=PURPLE_STYLE, no_wrap=True)
table.add_column("Description", style=PURPLE_STYLE)
table.add_column("Project URL", style=PURPLE_STYLE, no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc).replace("\n", " "), str(url))
console.print(Panel(table, title=f"[magenta]Available Tools[/magenta]", border_style=PURPLE_STYLE))
def show_options(self, parent=None):
console.print("\n")
console.print(Panel.fit(
"[bold magenta]Forensic Tools Collection[/bold magenta]\n"
"Select a tool to run or view options.",
border_style=PURPLE_STYLE
))
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# delegate to collection-like tools if available
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# if tool exposes actions (like BulkExtractor) and has a menu, try to show it
elif hasattr(selected, "show_actions"):
selected.show_actions(parent=self)
# otherwise try to call run if present
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = ForensicTools()
tools.pretty_print()
tools.show_options()

View File

@@ -3,11 +3,21 @@ import os
import socket
import subprocess
import webbrowser
import sys
from core import HackingTool
from core import HackingToolsCollection
from core import clear_screen
from rich.console import Console
from rich.panel import Panel
from rich.text import Text
from rich.prompt import Prompt
from rich.table import Table
console = Console()
PURPLE_STYLE = "bold magenta"
class NMAP(HackingTool):
TITLE = "Network Map (nmap)"
@@ -19,7 +29,7 @@ class NMAP(HackingTool):
PROJECT_URL = "https://github.com/nmap/nmap"
def __init__(self):
super(NMAP, self).__init__(runnable = False)
super(NMAP, self).__init__(runnable=False)
class Dracnmap(HackingTool):
@@ -33,19 +43,17 @@ class Dracnmap(HackingTool):
RUN_COMMANDS = ["cd Dracnmap;sudo ./dracnmap-v2.2.sh"]
PROJECT_URL = "https://github.com/Screetsec/Dracnmap"
# def __init__(self):
# super(Dracnmap, self).__init__(runnable = False)
class PortScan(HackingTool):
TITLE = "Port scanning"
def __init__(self):
super(PortScan, self).__init__(installable = False)
super(PortScan, self).__init__(installable=False)
def run(self):
clear_screen()
target = input('Select a Target IP: ')
console.print(Panel(Text(self.TITLE, justify="center"), style=PURPLE_STYLE))
target = Prompt.ask("[bold]Select a Target IP[/]", default="", show_default=False)
subprocess.run(["sudo", "nmap", "-O", "-Pn", target])
@@ -53,13 +61,14 @@ class Host2IP(HackingTool):
TITLE = "Host to IP "
def __init__(self):
super(Host2IP, self).__init__(installable = False)
super(Host2IP, self).__init__(installable=False)
def run(self):
clear_screen()
host = input("Enter host name (e.g. www.google.com):- ")
console.print(Panel(Text(self.TITLE, justify="center"), style=PURPLE_STYLE))
host = Prompt.ask("Enter host name (e.g. www.google.com):- ")
ips = socket.gethostbyname(host)
print(ips)
console.print(f"[{PURPLE_STYLE}]{host} -> {ips}[/]")
class XeroSploit(HackingTool):
@@ -96,9 +105,6 @@ class ReconSpider(HackingTool):
RUN_COMMANDS = ["cd reconspider;python3 reconspider.py"]
PROJECT_URL = "https://github.com/bhavsec/reconspider"
# def __init__(self):
# super(ReconSpider, self).__init__(runnable = False)
class IsItDown(HackingTool):
TITLE = "IsItDown (Check Website Down/Up)"
@@ -106,9 +112,10 @@ class IsItDown(HackingTool):
def __init__(self):
super(IsItDown, self).__init__(
[('Open', self.open)], installable = False, runnable = False)
[('Open', self.open)], installable=False, runnable=False)
def open(self):
console.print(Panel("Opening isitdownrightnow.com", style=PURPLE_STYLE))
webbrowser.open_new_tab("https://www.isitdownrightnow.com/")
@@ -142,7 +149,8 @@ class Striker(HackingTool):
PROJECT_URL = "https://github.com/s0md3v/Striker"
def run(self):
site = input("Enter Site Name (example.com) >> ")
console.print(Panel(Text(self.TITLE, justify="center"), style=PURPLE_STYLE))
site = Prompt.ask("Enter Site Name (example.com) >> ")
os.chdir("Striker")
subprocess.run(["sudo", "python3", "striker.py", site])
@@ -160,7 +168,7 @@ class SecretFinder(HackingTool):
PROJECT_URL = "https://github.com/m4ll0k/SecretFinder"
def __init__(self):
super(SecretFinder, self).__init__(runnable = False)
super(SecretFinder, self).__init__(runnable=False)
class Shodan(HackingTool):
@@ -172,7 +180,7 @@ class Shodan(HackingTool):
PROJECT_URL = "https://github.com/m4ll0k/Shodanfy.py"
def __init__(self):
super(Shodan, self).__init__(runnable = False)
super(Shodan, self).__init__(runnable=False)
class PortScannerRanger(HackingTool):
@@ -185,7 +193,8 @@ class PortScannerRanger(HackingTool):
PROJECT_URL = "https://github.com/floriankunushevci/rang3r"
def run(self):
ip = input("Enter Ip >> ")
console.print(Panel(Text(self.TITLE, justify="center"), style=PURPLE_STYLE))
ip = Prompt.ask("Enter Ip >> ")
os.chdir("rang3r")
subprocess.run(["sudo", "python", "rang3r.py", "--ip", ip])
@@ -195,12 +204,14 @@ class Breacher(HackingTool):
DESCRIPTION = "An advanced multithreaded admin panel finder written in python."
INSTALL_COMMANDS = ["git clone https://github.com/s0md3v/Breacher.git"]
PROJECT_URL = "https://github.com/s0md3v/Breacher"
def run(self):
domain = input("Enter domain (example.com) >> ")
console.print(Panel(Text(self.TITLE, justify="center"), style=PURPLE_STYLE))
domain = Prompt.ask("Enter domain (example.com) >> ")
os.chdir("Breacher")
subprocess.run(["python3", "breacher.py", "-u", domain])
class InformationGatheringTools(HackingToolsCollection):
TITLE = "Information gathering tools"
TOOLS = [
@@ -220,3 +231,72 @@ class InformationGatheringTools(HackingToolsCollection):
PortScannerRanger(),
Breacher()
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Information Gathering Tools", show_lines=True, expand=True)
table.add_column("Title", style=PURPLE_STYLE, no_wrap=True)
table.add_column("Description", style=PURPLE_STYLE)
table.add_column("Project URL", style=PURPLE_STYLE, no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc).replace("\n", " "), str(url))
console.print(Panel(table, title=f"[magenta]Available Tools[/magenta]", border_style=PURPLE_STYLE))
def show_options(self, parent=None):
console.print("\n")
console.print(Panel.fit(
"[bold magenta]Information Gathering Collection[/bold magenta]\n"
"Select a tool to view/run it or return to the previous menu.",
border_style=PURPLE_STYLE
))
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# delegate to collection-style tools if available
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# if tool exposes actions/menu, try to call it
elif hasattr(selected, "show_actions"):
selected.show_actions(parent=self)
# otherwise try to call run if present
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = InformationGatheringTools()
tools.pretty_print()
tools.show_options()

View File

@@ -15,6 +15,15 @@ from tools.others.socialmedia_finder import SocialMediaFinderTools
from tools.others.web_crawling import WebCrawlingTools
from tools.others.wifi_jamming import WifiJammingTools
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class HatCloud(HackingTool):
TITLE = "HatCloud(Bypass CloudFlare for IP)"
@@ -44,3 +53,69 @@ class OtherTools(HackingToolsCollection):
WebCrawlingTools(),
MixTools()
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Other Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc).strip().replace("\n", " "), str(url))
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Other Tools Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# If tool exposes show_options (collection-style), delegate to it
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# Otherwise, if runnable, call its run method
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = OtherTools()
tools.pretty_print()
tools.show_options()

View File

@@ -2,6 +2,16 @@
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
from rich import box
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class Keydroid(HackingTool):
TITLE = "Keydroid"
@@ -65,3 +75,62 @@ class AndroidAttackTools(HackingToolsCollection):
Droidcam(),
EvilApp()
]
def pretty_print(self):
table = Table(title="Android Attack Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Android Attack Tools Collection[/bold magenta]\n"
"Select a tool to view details or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to view/run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "show_info"):
selected.show_info()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = AndroidAttackTools()
tools.pretty_print()
tools.show_options()

View File

@@ -2,6 +2,15 @@
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class KnockMail(HackingTool):
TITLE = "Knockmail"
@@ -17,4 +26,62 @@ class KnockMail(HackingTool):
class EmailVerifyTools(HackingToolsCollection):
TITLE = "Email Verify tools"
TOOLS = [KnockMail()]
def pretty_print(self):
table = Table(title="Email Verify Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Email Verify Tools Collection[/bold magenta]\n"
"Select a tool to view details or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to view/run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "show_info"):
selected.show_info()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = EmailVerifyTools()
tools.pretty_print()
tools.show_options()

View File

@@ -2,6 +2,16 @@
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
from rich import box
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class HashBuster(HackingTool):
TITLE = "Hash Buster"
@@ -19,3 +29,62 @@ class HashBuster(HackingTool):
class HashCrackingTools(HackingToolsCollection):
TITLE = "Hash cracking tools"
TOOLS = [HashBuster()]
def pretty_print(self):
table = Table(title="Hash Cracking Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Hash Cracking Tools Collection[/bold magenta]\n"
"Select a tool to view details or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to view/run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "show_info"):
selected.show_info()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = HashCrackingTools()
tools.pretty_print()
tools.show_options()

View File

@@ -2,6 +2,16 @@
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
from rich import box
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class EvilURL(HackingTool):
TITLE = "EvilURL"
@@ -15,3 +25,62 @@ class EvilURL(HackingTool):
class IDNHomographAttackTools(HackingToolsCollection):
TITLE = "IDN Homograph Attack"
TOOLS = [EvilURL()]
def pretty_print(self):
table = Table(title="IDN Homograph Attack Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]IDN Homograph Attack Collection[/bold magenta]\n"
"Select a tool to view details or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to view/run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "show_info"):
selected.show_info()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = IDNHomographAttackTools()
tools.pretty_print()
tools.show_options()

View File

@@ -2,6 +2,16 @@
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
from rich import box
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class TerminalMultiplexer(HackingTool):
TITLE = "Terminal Multiplexer"
@@ -37,3 +47,61 @@ class MixTools(HackingToolsCollection):
Crivo()
]
def pretty_print(self):
table = Table(title="Mix Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Mix Tools Collection[/bold magenta]\n"
"Select a tool to view details or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to view/run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "show_info"):
selected.show_info()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = MixTools()
tools.pretty_print()
tools.show_options()

View File

@@ -2,6 +2,16 @@
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
from rich import box
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class DebInject(HackingTool):
TITLE = "Debinject"
@@ -23,9 +33,6 @@ class Pixload(HackingTool):
PROJECT_URL = "https://github.com/chinarulezzz/pixload"
def __init__(self):
# super(Pixload, self).__init__([
# ('How To Use', self.show_project_page)
# ], runnable = False)
super(Pixload, self).__init__(runnable = False)
@@ -35,3 +42,62 @@ class PayloadInjectorTools(HackingToolsCollection):
DebInject(),
Pixload()
]
def pretty_print(self):
table = Table(title="Payload Injector Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Payload Injector Collection[/bold magenta]\n"
"Select a tool to view details or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to view/run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "show_info"):
selected.show_info()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = PayloadInjectorTools()
tools.pretty_print()
tools.show_options()

View File

@@ -6,6 +6,16 @@ import subprocess
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
from rich import box
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class InstaBrute(HackingTool):
TITLE = "Instagram Attack"
@@ -49,7 +59,6 @@ class Faceshell(HackingTool):
def run(self):
name = input("Enter Username >> ")
wordlist = input("Enter Wordlist >> ")
# Ignore a FileNotFoundError if we are already in the Brute_Force directory
with contextlib.suppress(FileNotFoundError):
os.chdir("Brute_Force")
subprocess.run(
@@ -75,3 +84,62 @@ class SocialMediaBruteforceTools(HackingToolsCollection):
Faceshell(),
AppCheck()
]
def pretty_print(self):
table = Table(title="Social Media Bruteforce Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Social Media Bruteforce Collection[/bold magenta]\n"
"Select a tool to view details or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to view/run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "show_info"):
selected.show_info()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = SocialMediaBruteforceTools()
tools.pretty_print()
tools.show_options()

View File

@@ -5,6 +5,16 @@ import subprocess
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
from rich import box
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class FacialFind(HackingTool):
TITLE = "Find SocialMedia By Facial Recognation System"
@@ -85,3 +95,62 @@ class SocialMediaFinderTools(HackingToolsCollection):
Sherlock(),
SocialScan()
]
def pretty_print(self):
table = Table(title="Social Media Finder Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Social Media Finder Collection[/bold magenta]\n"
"Select a tool to view details or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to view/run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "show_info"):
selected.show_info()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = SocialMediaFinderTools()
tools.pretty_print()
tools.show_options()

View File

@@ -2,6 +2,16 @@
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
from rich import box
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class GoSpider(HackingTool):
TITLE = "Gospider"
@@ -16,3 +26,62 @@ class GoSpider(HackingTool):
class WebCrawlingTools(HackingToolsCollection):
TITLE = "Web crawling"
TOOLS = [GoSpider()]
def pretty_print(self):
table = Table(title="Web Crawling Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Web Crawling Tools Collection[/bold magenta]\n"
"Select a tool to view details or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to view/run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "show_info"):
selected.show_info()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = WebCrawlingTools()
tools.pretty_print()
tools.show_options()

View File

@@ -2,6 +2,16 @@
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
from rich import box
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class WifiJammerNG(HackingTool):
TITLE = "WifiJammer-NG"
@@ -35,3 +45,62 @@ class WifiJammingTools(HackingToolsCollection):
WifiJammerNG(),
KawaiiDeauther()
]
def pretty_print(self):
table = Table(title="Wifi Jamming Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Wifi Jamming Tools Collection[/bold magenta]\n"
"Select a tool to view details or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to view/run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "show_info"):
selected.show_info()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = WifiJammingTools()
tools.pretty_print()
tools.show_options()

View File

@@ -1,13 +1,23 @@
# coding=utf-8
import os
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class TheFatRat(HackingTool):
TITLE = "The FatRat"
DESCRIPTION = "TheFatRat Provides An Easy way to create Backdoors and \n" \
"Payload which can bypass most anti-virus"
DESCRIPTION = "TheFatRat Provides An Easy way to create Backdoors and Payloads " \
"which can bypass most anti-virus"
INSTALL_COMMANDS = [
"sudo git clone https://github.com/Screetsec/TheFatRat.git",
"cd TheFatRat && sudo chmod +x setup.sh"
@@ -22,8 +32,7 @@ class TheFatRat(HackingTool):
])
def update(self):
os.system(
"cd TheFatRat && bash update && chmod +x setup.sh && bash setup.sh")
os.system("cd TheFatRat && bash update && chmod +x setup.sh && bash setup.sh")
def troubleshoot(self):
os.system("cd TheFatRat && sudo chmod +x chk_tools && ./chk_tools")
@@ -31,9 +40,8 @@ class TheFatRat(HackingTool):
class Brutal(HackingTool):
TITLE = "Brutal"
DESCRIPTION = "Brutal is a toolkit to quickly create various payload," \
"powershell attack,\nvirus attack and launch listener for " \
"a Human Interface Device"
DESCRIPTION = "Brutal is a toolkit to quickly create various payloads, powershell attacks, " \
"virus attacks and launch listener for a Human Interface Device"
INSTALL_COMMANDS = [
"sudo git clone https://github.com/Screetsec/Brutal.git",
"cd Brutal && sudo chmod +x Brutal.sh"
@@ -43,22 +51,22 @@ class Brutal(HackingTool):
def show_info(self):
super(Brutal, self).show_info()
print("""
[!] Requirement
>> Arduino Software (I used v1.6.7)
>> TeensyDuino
>> Linux udev rules
>> Copy and paste the PaensyLib folder inside your Arduino libraries
[!] Kindly Visit below link for Installation for Arduino
>> https://github.com/Screetsec/Brutal/wiki/Install-Requirements
""")
console.print("""
[!] Requirement
>> Arduino Software (I used v1.6.7)
>> TeensyDuino
>> Linux udev rules
>> Copy and paste the PaensyLib folder inside your Arduino libraries
[!] Visit for Installation for Arduino:
>> https://github.com/Screetsec/Brutal/wiki/Install-Requirements
""")
class Stitch(HackingTool):
TITLE = "Stitch"
DESCRIPTION = "Stitch is Cross Platform Python Remote Administrator Tool\n\t" \
"[!] Refer Below Link For Wins & MAc Os"
DESCRIPTION = "Stitch is Cross Platform Python Remote Administrator Tool\n" \
"[!] Refer Below Link For Wins & Mac OS"
INSTALL_COMMANDS = [
"sudo git clone https://github.com/nathanlopez/Stitch.git",
"cd Stitch && sudo pip install -r lnx_requirements.txt"
@@ -69,10 +77,8 @@ class Stitch(HackingTool):
class MSFVenom(HackingTool):
TITLE = "MSFvenom Payload Creator"
DESCRIPTION = "MSFvenom Payload Creator (MSFPC) is a wrapper to generate \n" \
"multiple types of payloads, based on users choice.\n" \
"The idea is to be as simple as possible (only requiring " \
"one input) \nto produce their payload."
DESCRIPTION = "MSFvenom Payload Creator (MSFPC) is a wrapper to generate multiple types of payloads, " \
"based on user choice. Simplifies payload creation."
INSTALL_COMMANDS = [
"sudo git clone https://github.com/g0tmi1k/msfpc.git",
"cd msfpc;sudo chmod +x msfpc.sh"
@@ -83,9 +89,7 @@ class MSFVenom(HackingTool):
class Venom(HackingTool):
TITLE = "Venom Shellcode Generator"
DESCRIPTION = "venom 1.0.11 (malicious_server) was build to take " \
"advantage of \n apache2 webserver to deliver payloads " \
"(LAN) using a fake webpage written in html"
DESCRIPTION = "Venom 1.0.11 (malicious_server) exploits apache2 webserver to deliver LAN payloads via fake webpages."
INSTALL_COMMANDS = [
"sudo git clone https://github.com/r00t-3xp10it/venom.git",
"sudo chmod -R 775 venom*/ && cd venom*/ && cd aux && sudo bash setup.sh",
@@ -97,8 +101,7 @@ class Venom(HackingTool):
class Spycam(HackingTool):
TITLE = "Spycam"
DESCRIPTION = "Script to generate a Win32 payload that takes the webcam " \
"image every 1 minute and send it to the attacker"
DESCRIPTION = "Generates a Win32 payload that captures webcam images every 1 minute and sends them to the attacker."
INSTALL_COMMANDS = [
"sudo git clone https://github.com/indexnotfound404/spycam.git",
"cd spycam && bash install.sh && chmod +x spycam"
@@ -109,19 +112,20 @@ class Spycam(HackingTool):
class MobDroid(HackingTool):
TITLE = "Mob-Droid"
DESCRIPTION = "Mob-Droid helps you to generate metasploit payloads in " \
"easy way\n without typing long commands and save your time"
DESCRIPTION = "Generates metasploit payloads easily without typing long commands."
INSTALL_COMMANDS = [
"git clone https://github.com/kinghacker0/mob-droid.git"]
"git clone https://github.com/kinghacker0/mob-droid.git"
]
RUN_COMMANDS = ["cd mob-droid;sudo python mob-droid.py"]
PROJECT_URL = "https://github.com/kinghacker0/Mob-Droid"
class Enigma(HackingTool):
TITLE = "Enigma"
DESCRIPTION = "Enigma is a Multiplatform payload dropper"
DESCRIPTION = "Enigma is a Multiplatform payload dropper."
INSTALL_COMMANDS = [
"sudo git clone https://github.com/UndeadSec/Enigma.git"]
"sudo git clone https://github.com/UndeadSec/Enigma.git"
]
RUN_COMMANDS = ["cd Enigma;sudo python enigma.py"]
PROJECT_URL = "https://github.com/UndeadSec/Enigma"
@@ -138,3 +142,60 @@ class PayloadCreatorTools(HackingToolsCollection):
MobDroid(),
Enigma()
]
def pretty_print(self):
table = Table(title="Payload Creation Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
console.print(Panel(table, title="[purple]Available Tools[/purple]", border_style="purple"))
def show_options(self):
console.print("\n")
console.print(Panel.fit(
"[bold purple]Payload Creator Collection[/bold purple]\n"
"Select a tool to run it or exit.",
border_style="purple"
))
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
desc = getattr(tool, "DESCRIPTION", "") or ""
table.add_row(str(i + 1), tool.TITLE, desc.replace("\n", " "))
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "show_actions"):
selected.show_actions()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options()
if __name__ == "__main__":
tools = PayloadCreatorTools()
tools.pretty_print()
tools.show_options()

View File

@@ -4,6 +4,16 @@ import os
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class autophisher(HackingTool):
TITLE = "Autophisher RK"
DESCRIPTION = "Automated Phishing Toolkit"
@@ -13,7 +23,8 @@ class autophisher(HackingTool):
]
RUN_COMMANDS = ["cd autophisher;sudo bash autophisher.sh"]
PROJECT_URL = "https://github.com/CodingRanjith/autophisher"
class Pyphisher(HackingTool):
TITLE = "Pyphisher"
DESCRIPTION = "Easy to use phishing tool with 77 website templates"
@@ -23,8 +34,9 @@ class Pyphisher(HackingTool):
"pip3 install -r requirements.txt"
]
RUN_COMMANDS = ["cd PyPhisher;sudo python3 pyphisher.py"]
PROJECT_URL = "git clone https://github.com/KasRoudra/PyPhisher"
PROJECT_URL = "git clone https://github.com/KasRoudra/PyPhisher"
class AdvPhishing(HackingTool):
TITLE = "AdvPhishing"
DESCRIPTION = "This is Advance Phishing Tool ! OTP PHISHING"
@@ -32,7 +44,8 @@ class AdvPhishing(HackingTool):
"sudo git clone https://github.com/Ignitetch/AdvPhishing.git",
"cd AdvPhishing;chmod 777 *;bash Linux-Setup.sh"]
RUN_COMMANDS = ["cd AdvPhishing && sudo bash AdvPhishing.sh"]
PROJECT_URL = "https://github.com/Ignitetch/AdvPhishing"
PROJECT_URL = "https://github.com/Ignitetch/AdvPhishing"
class Setoolkit(HackingTool):
TITLE = "Setoolkit"
@@ -118,7 +131,8 @@ class QRJacking(HackingTool):
"sudo git clone https://github.com/cryptedwolf/ohmyqr.git && sudo apt -y install scrot"]
RUN_COMMANDS = ["cd ohmyqr && sudo bash ohmyqr.sh"]
PROJECT_URL = "https://github.com/cryptedwolf/ohmyqr"
class WifiPhisher(HackingTool):
TITLE = "WifiPhisher"
DESCRIPTION = "The Rogue Access Point Framework"
@@ -126,8 +140,9 @@ class WifiPhisher(HackingTool):
"sudo git clone https://github.com/wifiphisher/wifiphisher.git",
"cd wifiphisher"]
RUN_COMMANDS = ["cd wifiphisher && sudo python setup.py"]
PROJECT_URL = "https://github.com/wifiphisher/wifiphisher"
PROJECT_URL = "https://github.com/wifiphisher/wifiphisher"
class BlackEye(HackingTool):
TITLE = "BlackEye"
DESCRIPTION = "The ultimate phishing tool with 38 websites available!"
@@ -135,7 +150,8 @@ class BlackEye(HackingTool):
"sudo git clone https://github.com/thelinuxchoice/blackeye",
"cd blackeye "]
RUN_COMMANDS = ["cd blackeye && sudo bash blackeye.sh"]
PROJECT_URL = "https://github.com/An0nUD4Y/blackeye"
PROJECT_URL = "https://github.com/An0nUD4Y/blackeye"
class ShellPhish(HackingTool):
TITLE = "ShellPhish"
@@ -143,7 +159,8 @@ class ShellPhish(HackingTool):
INSTALL_COMMANDS = ["git clone https://github.com/An0nUD4Y/shellphish.git"]
RUN_COMMANDS = ["cd shellphish;sudo bash shellphish.sh"]
PROJECT_URL = "https://github.com/An0nUD4Y/shellphish"
class Thanos(HackingTool):
TITLE = "Thanos"
DESCRIPTION = "Browser to Browser Phishingtoolkit"
@@ -152,8 +169,9 @@ class Thanos(HackingTool):
"cd Thanos && sudo chmod -R 777 Thanos.sh"
]
RUN_COMMANDS = ["cd Thanos;sudo bash Thanos.sh"]
PROJECT_URL = "https://github.com/TridevReddy/Thanos"
PROJECT_URL = "https://github.com/TridevReddy/Thanos"
class QRLJacking(HackingTool):
TITLE = "QRLJacking"
DESCRIPTION = "QRLJacking"
@@ -169,7 +187,8 @@ class QRLJacking(HackingTool):
]
RUN_COMMANDS = ["cd QRLJacking/QRLJacker;python3 QrlJacker.py"]
PROJECT_URL = "https://github.com/OWASP/QRLJacking"
class Maskphish(HackingTool):
TITLE = "Miskphish"
DESCRIPTION = "Hide phishing URL under a normal looking URL (google.com or facebook.com)"
@@ -177,7 +196,7 @@ class Maskphish(HackingTool):
"sudo git clone https://github.com/jaykali/maskphish.git",
"cd maskphish"]
RUN_COMMANDS = ["cd maskphish;sudo bash maskphish.sh"]
PROJECT_URL = "https://github.com/jaykali/maskphish"
PROJECT_URL = "https://github.com/jaykali/maskphish"
class BlackPhish(HackingTool):
@@ -195,11 +214,12 @@ class BlackPhish(HackingTool):
def update(self):
os.system("cd BlackPhish;sudo bash update.sh")
class dnstwist(HackingTool):
Title='dnstwist'
Install_commands=['sudo git clone https://github.com/elceef/dnstwist.git','cd dnstwist']
Run_commands=['cd dnstwist;sudo python3 dnstwist.py']
project_url='https://github.com/elceef/dnstwist'
Title = 'dnstwist'
Install_commands = ['sudo git clone https://github.com/elceef/dnstwist.git','cd dnstwist']
Run_commands = ['cd dnstwist;sudo python3 dnstwist.py']
project_url = 'https://github.com/elceef/dnstwist'
class PhishingAttackTools(HackingToolsCollection):
@@ -223,3 +243,77 @@ class PhishingAttackTools(HackingToolsCollection):
Maskphish(),
dnstwist()
]
def _get_attr_fallback(self, item, *names, default=""):
for n in names:
if hasattr(item, n):
return getattr(item, n)
return default
def pretty_print(self):
table = Table(title="Phishing Attack Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
# try typical attribute names, then fall back to common variations
title = (
self._get_attr_fallback(t, "TITLE", "Title", "title")
or t.__class__.__name__
)
desc = self._get_attr_fallback(t, "DESCRIPTION", "Description", "description", "INSTALL_COMMANDS", default="") or ""
# prefer PROJECT_URL but also accept project_url or project_url-like fields
url = self._get_attr_fallback(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="") or ""
table.add_row(str(title), str(desc).strip().replace("\n", " "), str(url))
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Phishing Attack Tools Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr_fallback(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr_fallback(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# If tool exposes show_options (collection-style), delegate to it
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# Otherwise, if runnable, call its run method
elif hasattr(selected, "run"):
selected.run()
# Preserve any before_run hooks if present
elif hasattr(selected, "before_run"):
selected.before_run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = PhishingAttackTools()
tools.pretty_print()
tools.show_options()

View File

@@ -4,6 +4,15 @@ import os
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class Vegile(HackingTool):
TITLE = "Vegile - Ghost In The Shell"
@@ -42,3 +51,72 @@ class PostExploitationTools(HackingToolsCollection):
Vegile(),
ChromeKeyLogger()
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Post-Exploitation Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="").strip().replace("\n", " ")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc or ""), str(url))
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Post-Exploitation Tools Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# Delegate to collection-style show_options if available
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# Otherwise call run if available
elif hasattr(selected, "run"):
selected.run()
# If tool exposes before_run (like Vegile), call it to preserve original behavior
elif hasattr(selected, "before_run"):
selected.before_run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = PostExploitationTools()
tools.pretty_print()
tools.show_options()

View File

@@ -2,6 +2,15 @@
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class Stitch(HackingTool):
TITLE = "Stitch"
@@ -34,3 +43,72 @@ class RemoteAdministrationTools(HackingToolsCollection):
Stitch(),
Pyshell()
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Remote Administration Tools (RAT)", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="").strip().replace("\n", " ")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc or ""), str(url))
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Remote Administration Tools (RAT) Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# If tool exposes show_options (collection-style), delegate to it
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# Otherwise, if runnable, call its run method
elif hasattr(selected, "run"):
selected.run()
# Preserve any before_run hooks if present
elif hasattr(selected, "before_run"):
selected.before_run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = RemoteAdministrationTools()
tools.pretty_print()
tools.show_options()

View File

@@ -4,6 +4,15 @@ import subprocess
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class AndroGuard(HackingTool):
TITLE = "Androguard"
@@ -13,7 +22,7 @@ class AndroGuard(HackingTool):
PROJECT_URL = "https://github.com/androguard/androguard "
def __init__(self):
super(AndroGuard, self).__init__(runnable = False)
super(AndroGuard, self).__init__(runnable=False)
class Apk2Gold(HackingTool):
@@ -44,7 +53,7 @@ class Jadx(HackingTool):
PROJECT_URL = "https://github.com/skylot/jadx"
def __init__(self):
super(Jadx, self).__init__(runnable = False)
super(Jadx, self).__init__(runnable=False)
class ReverseEngineeringTools(HackingToolsCollection):
@@ -54,3 +63,69 @@ class ReverseEngineeringTools(HackingToolsCollection):
Apk2Gold(),
Jadx()
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Reverse Engineering Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="").strip().replace("\n", " ")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc or ""), str(url))
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Reverse Engineering Tools Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "before_run"):
selected.before_run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = ReverseEngineeringTools()
tools.pretty_print()
tools.show_options()

View File

@@ -2,113 +2,148 @@
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class Sqlmap(HackingTool):
TITLE = "Sqlmap tool"
DESCRIPTION = "sqlmap is an open source penetration testing tool that " \
"automates the process of \n" \
"detecting and exploiting SQL injection flaws and taking " \
"over of database servers \n " \
"[!] python3 sqlmap.py -u [<http://example.com>] --batch --banner \n " \
"More Usage [!] https://github.com/sqlmapproject/sqlmap/wiki/Usage"
INSTALL_COMMANDS = [
"sudo git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev"]
"automates the process of detecting and exploiting SQL injection flaws " \
"and taking over database servers. [!] python3 sqlmap.py -u [http://example.com] --batch --banner. More usage: https://github.com/sqlmapproject/sqlmap/wiki/Usage"
INSTALL_COMMANDS = ["sudo git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev"]
RUN_COMMANDS = ["cd sqlmap-dev;python3 sqlmap.py --wizard"]
PROJECT_URL = "https://github.com/sqlmapproject/sqlmap"
class NoSqlMap(HackingTool):
TITLE = "NoSqlMap"
DESCRIPTION = "NoSQLMap is an open source Python tool designed to \n " \
"audit for as well as automate injection attacks and exploit.\n " \
"\033[91m " \
"[*] Please Install MongoDB \n "
INSTALL_COMMANDS = [
"git clone https://github.com/codingo/NoSQLMap.git",
"sudo chmod -R 755 NoSQLMap;cd NoSQLMap;python setup.py install"
]
DESCRIPTION = "NoSQLMap is an open source Python tool designed to audit and automate injection attacks. [*] Please install MongoDB."
INSTALL_COMMANDS = ["git clone https://github.com/codingo/NoSQLMap.git",
"sudo chmod -R 755 NoSQLMap;cd NoSQLMap;python setup.py install"]
RUN_COMMANDS = ["python NoSQLMap"]
PROJECT_URL = "https://github.com/codingo/NoSQLMap"
class SQLiScanner(HackingTool):
TITLE = "Damn Small SQLi Scanner"
DESCRIPTION = "Damn Small SQLi Scanner (DSSS) is a fully functional SQL " \
"injection\nvulnerability scanner also supporting GET and " \
"POST parameters.\n" \
"[*]python3 dsss.py -h[help] | -u[URL]"
DESCRIPTION = "DSSS is a fully functional SQL injection vulnerability scanner also supporting GET and POST parameters. Usage: python3 dsss.py -h | -u [URL]"
INSTALL_COMMANDS = ["git clone https://github.com/stamparm/DSSS.git"]
PROJECT_URL = "https://github.com/stamparm/DSSS"
def __init__(self):
super(SQLiScanner, self).__init__(runnable = False)
super(SQLiScanner, self).__init__(runnable=False)
class Explo(HackingTool):
TITLE = "Explo"
DESCRIPTION = "Explo is a simple tool to describe web security issues " \
"in a human and machine readable format.\n " \
"Usage:- \n " \
"[1] explo [--verbose|-v] testcase.yaml \n " \
"[2] explo [--verbose|-v] examples/*.yaml"
INSTALL_COMMANDS = [
"git clone https://github.com/dtag-dev-sec/explo.git",
"cd explo;sudo python setup.py install"
]
DESCRIPTION = "Explo is a simple tool to describe web security issues in human and machine readable format. Usage: explo [--verbose|-v] testcase.yaml | explo [--verbose|-v] examples/*.yaml"
INSTALL_COMMANDS = ["git clone https://github.com/dtag-dev-sec/explo.git",
"cd explo;sudo python setup.py install"]
PROJECT_URL = "https://github.com/dtag-dev-sec/explo"
def __init__(self):
super(Explo, self).__init__(runnable = False)
super(Explo, self).__init__(runnable=False)
class Blisqy(HackingTool):
TITLE = "Blisqy - Exploit Time-based blind-SQL injection"
DESCRIPTION = "Blisqy is a tool to aid Web Security researchers to find " \
"Time-based Blind SQL injection \n on HTTP Headers and also " \
"exploitation of the same vulnerability.\n " \
"For Usage >> \n"
DESCRIPTION = "Blisqy helps web security researchers find time-based blind SQL injections on HTTP headers and exploit them."
INSTALL_COMMANDS = ["git clone https://github.com/JohnTroony/Blisqy.git"]
PROJECT_URL = "https://github.com/JohnTroony/Blisqy"
def __init__(self):
super(Blisqy, self).__init__(runnable = False)
super(Blisqy, self).__init__(runnable=False)
class Leviathan(HackingTool):
TITLE = "Leviathan - Wide Range Mass Audit Toolkit"
DESCRIPTION = "Leviathan is a mass audit toolkit which has wide range " \
"service discovery,\nbrute force, SQL injection detection " \
"and running custom exploit capabilities. \n " \
"[*] It Requires API Keys \n " \
"More Usage [!] https://github.com/utkusen/leviathan/wiki"
INSTALL_COMMANDS = [
"git clone https://github.com/leviathan-framework/leviathan.git",
"cd leviathan;sudo pip install -r requirements.txt"
]
DESCRIPTION = "Leviathan is a mass audit toolkit with service discovery, brute force, SQL injection detection, and custom exploit capabilities. Requires API keys."
INSTALL_COMMANDS = ["git clone https://github.com/leviathan-framework/leviathan.git",
"cd leviathan;sudo pip install -r requirements.txt"]
RUN_COMMANDS = ["cd leviathan;python leviathan.py"]
PROJECT_URL = "https://github.com/leviathan-framework/leviathan"
class SQLScan(HackingTool):
TITLE = "SQLScan"
DESCRIPTION = "sqlscan is quick web scanner for find an sql inject point." \
" not for educational, this is for hacking."
INSTALL_COMMANDS = [
"sudo apt install php php-bz2 php-curl php-mbstring curl",
"sudo curl https://raw.githubusercontent.com/Cvar1984/sqlscan/dev/build/main.phar --output /usr/local/bin/sqlscan",
"chmod +x /usr/local/bin/sqlscan"
]
DESCRIPTION = "SQLScan is a quick web scanner to find SQL injection points. Not for educational purposes."
INSTALL_COMMANDS = ["sudo apt install php php-bz2 php-curl php-mbstring curl",
"sudo curl https://raw.githubusercontent.com/Cvar1984/sqlscan/dev/build/main.phar --output /usr/local/bin/sqlscan",
"chmod +x /usr/local/bin/sqlscan"]
RUN_COMMANDS = ["sudo sqlscan"]
PROJECT_URL = "https://github.com/Cvar1984/sqlscan"
class SqlInjectionTools(HackingToolsCollection):
TITLE = "SQL Injection Tools"
TOOLS = [
Sqlmap(),
NoSqlMap(),
SQLiScanner(),
Explo(),
Blisqy(),
Leviathan(),
SQLScan()
]
TOOLS = [Sqlmap(), NoSqlMap(), SQLiScanner(), Explo(), Blisqy(), Leviathan(), SQLScan()]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="SQL Injection Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="").strip().replace("\n", " ")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc or ""), str(url))
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]SQL Injection Tools Collection[/bold magenta]\nSelect a tool to view options or run it.", border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = int(Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99"))
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "before_run"):
selected.before_run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = SqlInjectionTools()
tools.pretty_print()
tools.show_options()

View File

@@ -5,6 +5,15 @@ from core import HackingTool
from core import HackingToolsCollection
from core import validate_input
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class SteganoHide(HackingTool):
TITLE = "SteganoHide"
@@ -15,56 +24,54 @@ class SteganoHide(HackingTool):
"[1] Hide\n"
"[2] Extract\n"
"[99]Cancel\n"
">> ")
">> "
)
choice_run = validate_input(choice_run, [1, 2, 99])
if choice_run is None:
print("Please choose a valid input")
console.print("[bold red]Please choose a valid input[/bold red]")
return self.run()
if choice_run == 99:
return
if choice_run == 1:
file_hide = input("Enter Filename you want to Embed (1.txt) >> ")
file_to_be_hide = input("Enter Cover Filename(test.jpeg) >> ")
subprocess.run(
["steghide", "embed", "-cf", file_to_be_hide, "-ef", file_hide])
file_hide = input("Enter Filename to Embed (1.txt) >> ")
file_to_be_hide = input("Enter Cover Filename (test.jpeg) >> ")
subprocess.run(["steghide", "embed", "-cf", file_to_be_hide, "-ef", file_hide])
elif choice_run == "2":
from_file = input("Enter Filename From Extract Data >> ")
elif choice_run == 2:
from_file = input("Enter Filename to Extract Data From >> ")
subprocess.run(["steghide", "extract", "-sf", from_file])
class StegnoCracker(HackingTool):
TITLE = "StegnoCracker"
DESCRIPTION = "SteganoCracker is a tool that uncover hidden data inside " \
"files\n using brute-force utility"
INSTALL_COMMANDS = [
"pip3 install stegcracker && pip3 install stegcracker -U --force-reinstall"]
DESCRIPTION = "SteganoCracker uncovers hidden data inside files using brute-force utility"
INSTALL_COMMANDS = ["pip3 install stegcracker && pip3 install stegcracker -U --force-reinstall"]
def run(self):
filename = input("Enter Filename:- ")
passfile = input("Enter Wordlist Filename:- ")
filename = input("Enter Filename >> ")
passfile = input("Enter Wordlist Filename >> ")
subprocess.run(["stegcracker", filename, passfile])
class StegoCracker(HackingTool):
TITLE = "StegoCracker"
DESCRIPTION = "StegoCracker is a tool that let's you hide data into image or audio files and can retrieve from a file "
DESCRIPTION = "StegoCracker lets you hide and retrieve data in image or audio files"
INSTALL_COMMANDS = [
"sudo git clone https://github.com/W1LDN16H7/StegoCracker.git",
"sudo chmod -R 755 StegoCracker"
]
RUN_COMMANDS = ["cd StegoCracker && python3 -m pip install -r requirements.txt ",
"./install.sh"
RUN_COMMANDS = [
"cd StegoCracker && python3 -m pip install -r requirements.txt",
"./install.sh"
]
PROJECT_URL = "https://github.com/W1LDN16H7/StegoCracker"
class Whitespace(HackingTool):
TITLE = "Whitespace"
DESCRIPTION = "Use whitespace and unicode chars for steganography"
DESCRIPTION = "Use whitespace and unicode characters for steganography"
INSTALL_COMMANDS = [
"sudo git clone https://github.com/beardog108/snow10.git",
"sudo chmod -R 755 snow10"
@@ -74,12 +81,68 @@ class Whitespace(HackingTool):
class SteganographyTools(HackingToolsCollection):
TITLE = "Steganograhy tools"
TOOLS = [
SteganoHide(),
StegnoCracker(),
StegoCracker(),
Whitespace()
]
TITLE = "Steganography Tools"
TOOLS = [SteganoHide(), StegnoCracker(), StegoCracker(), Whitespace()]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Steganography Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="").strip().replace("\n", " ")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc or ""), str(url))
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Steganography Tools Collection[/bold magenta]\nSelect a tool to run or view options.", border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = int(Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99"))
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "before_run"):
selected.before_run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = SteganographyTools()
tools.pretty_print()
tools.show_options()

View File

@@ -5,6 +5,14 @@ from time import sleep
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class UpdateTool(HackingTool):
@@ -15,12 +23,11 @@ class UpdateTool(HackingTool):
super(UpdateTool, self).__init__([
("Update System", self.update_sys),
("Update Hackingtool", self.update_ht)
], installable = False, runnable = False)
], installable=False, runnable=False)
def update_sys(self):
os.system("sudo apt update && sudo apt full-upgrade -y")
os.system(
"sudo apt-get install tor openssl curl && sudo apt-get update tor openssl curl")
os.system("sudo apt-get install tor openssl curl && sudo apt-get update tor openssl curl")
os.system("sudo apt-get install python3-pip")
def update_ht(self):
@@ -44,17 +51,17 @@ class UninstallTool(HackingTool):
def __init__(self):
super(UninstallTool, self).__init__([
('Uninstall', self.uninstall)
], installable = False, runnable = False)
], installable=False, runnable=False)
def uninstall(self):
print("hackingtool started to uninstall..\n")
console.print("hackingtool started to uninstall..\n")
sleep(1)
os.system("sudo chmod +x /etc/;"
"sudo chmod +x /usr/share/doc;"
"sudo rm -rf /usr/share/doc/hackingtool/;"
"cd /etc/;"
"sudo rm -rf /etc/hackingtool/;")
print("\nHackingtool Successfully Uninstalled... Goodbye.")
console.print("\n[bold green]Hackingtool Successfully Uninstalled... Goodbye.[/bold green]")
sys.exit()
@@ -64,3 +71,56 @@ class ToolManager(HackingToolsCollection):
UpdateTool(),
UninstallTool()
]
def pretty_print(self):
table = Table(title="Tool Manager — Update / Uninstall", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "))
panel = Panel(table, title="[purple]Available Manager Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Tool Manager[/bold magenta]\nSelect an action to run.", border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Options[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc)
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = int(Prompt.ask("[bold cyan]Select an option[/bold cyan]", default="99"))
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
manager = ToolManager()
manager.pretty_print()
manager.show_options()

View File

@@ -1,40 +1,52 @@
# coding=utf-8
import subprocess
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class Web2Attack(HackingTool):
TITLE = "Web2Attack"
DESCRIPTION = "Web hacking framework with tools, exploits by python"
INSTALL_COMMANDS = [
"sudo git clone https://github.com/santatic/web2attack.git"]
"sudo git clone https://github.com/santatic/web2attack.git"
]
RUN_COMMANDS = ["cd web2attack && sudo python3 w2aconsole"]
PROJECT_URL = "https://github.com/santatic/web2attack"
class Skipfish(HackingTool):
TITLE = "Skipfish"
DESCRIPTION = "Skipfish – Fully automated, active web application " \
"security reconnaissance tool \n " \
"Usage: skipfish -o [FolderName] targetip/site"
DESCRIPTION = (
"Skipfish – Fully automated, active web application "
"security reconnaissance tool \n "
"Usage: skipfish -o [FolderName] targetip/site"
)
RUN_COMMANDS = [
"sudo skipfish -h",
'echo "skipfish -o [FolderName] targetip/site"|boxes -d headline | lolcat'
]
def __init__(self):
super(Skipfish, self).__init__(installable = False)
super(Skipfish, self).__init__(installable=False)
class SubDomainFinder(HackingTool):
TITLE = "SubDomain Finder"
DESCRIPTION = "Sublist3r is a python tool designed to enumerate " \
"subdomains of websites using OSINT \n " \
"Usage:\n\t" \
"[1] python3 sublist3r.py -d example.com \n" \
"[2] python3 sublist3r.py -d example.com -p 80,443"
DESCRIPTION = (
"Sublist3r is a python tool designed to enumerate "
"subdomains of websites using OSINT \n "
"Usage:\n\t[1] python3 sublist3r.py -d example.com \n"
"[2] python3 sublist3r.py -d example.com -p 80,443"
)
INSTALL_COMMANDS = [
"sudo pip3 install requests argparse dnspython",
"sudo git clone https://github.com/aboul3la/Sublist3r.git",
@@ -46,10 +58,11 @@ class SubDomainFinder(HackingTool):
class CheckURL(HackingTool):
TITLE = "CheckURL"
DESCRIPTION = "Detect evil urls that uses IDN Homograph Attack.\n\t" \
"[!] python3 checkURL.py --url google.com"
INSTALL_COMMANDS = [
"sudo git clone https://github.com/UndeadSec/checkURL.git"]
DESCRIPTION = (
"Detect evil urls that uses IDN Homograph Attack.\n\t"
"[!] python3 checkURL.py --url google.com"
)
INSTALL_COMMANDS = ["sudo git clone https://github.com/UndeadSec/checkURL.git"]
RUN_COMMANDS = ["cd checkURL && python3 checkURL.py --help"]
PROJECT_URL = "https://github.com/UndeadSec/checkURL"
@@ -67,11 +80,12 @@ class Blazy(HackingTool):
class SubDomainTakeOver(HackingTool):
TITLE = "Sub-Domain TakeOver"
DESCRIPTION = "Sub-domain takeover vulnerability occur when a sub-domain " \
"\n (subdomain.example.com) is pointing to a service " \
"(e.g: GitHub, AWS/S3,..)\n" \
"that has been removed or deleted.\n" \
"Usage:python3 takeover.py -d www.domain.com -v"
DESCRIPTION = (
"Sub-domain takeover vulnerability occur when a sub-domain "
"\n (subdomain.example.com) is pointing to a service "
"(e.g: GitHub, AWS/S3,..)\nthat has been removed or deleted.\n"
"Usage:python3 takeover.py -d www.domain.com -v"
)
INSTALL_COMMANDS = [
"git clone https://github.com/edoardottt/takeover.git",
"cd takeover;sudo python3 setup.py install"
@@ -79,14 +93,17 @@ class SubDomainTakeOver(HackingTool):
PROJECT_URL = "https://github.com/edoardottt/takeover"
def __init__(self):
super(SubDomainTakeOver, self).__init__(runnable = False)
super(SubDomainTakeOver, self).__init__(runnable=False)
class Dirb(HackingTool):
TITLE = "Dirb"
DESCRIPTION = "DIRB is a Web Content Scanner. It looks for existing " \
"(and/or hidden) Web Objects.\n" \
"It basically works by launching a dictionary based " \
"attack against \n a web server and analyzing the response."
DESCRIPTION = (
"DIRB is a Web Content Scanner. It looks for existing "
"(and/or hidden) Web Objects.\n"
"It basically works by launching a dictionary based "
"attack against \n a web server and analyzing the response."
)
INSTALL_COMMANDS = [
"sudo git clone https://gitlab.com/kalilinux/packages/dirb.git",
"cd dirb;sudo bash configure;make"
@@ -110,3 +127,60 @@ class WebAttackTools(HackingToolsCollection):
SubDomainTakeOver(),
Dirb()
]
def pretty_print(self):
table = Table(title="Web Attack Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Web Attack Tools Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = WebAttackTools()
tools.pretty_print()
tools.show_options()

View File

@@ -1,22 +1,34 @@
# coding=utf-8
import os
import subprocess
from core import HackingTool
from core import HackingToolsCollection
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class WIFIPumpkin(HackingTool):
TITLE = "WiFi-Pumpkin"
DESCRIPTION = "The WiFi-Pumpkin is a rogue AP framework to easily create " \
"these fake networks\n" \
"all while forwarding legitimate traffic to and from the " \
"unsuspecting target."
DESCRIPTION = (
"The WiFi-Pumpkin is a rogue AP framework to easily create "
"these fake networks\n"
"all while forwarding legitimate traffic to and from the "
"unsuspecting target."
)
INSTALL_COMMANDS = [
"sudo apt install libssl-dev libffi-dev build-essential",
"sudo git clone https://github.com/P0cL4bs/wifipumpkin3.git",
"chmod -R 755 wifipumpkin3",
"sudo apt install python3-pyqt5",
"cd wifipumpkin3;sudo python3 setup.py install"
"cd wifipumpkin3;sudo python3 setup.py install",
]
RUN_COMMANDS = ["sudo wifipumpkin3"]
PROJECT_URL = "https://github.com/P0cL4bs/wifipumpkin3"
@@ -24,14 +36,16 @@ class WIFIPumpkin(HackingTool):
class pixiewps(HackingTool):
TITLE = "pixiewps"
DESCRIPTION = "Pixiewps is a tool written in C used to bruteforce offline " \
"the WPS pin\n " \
"exploiting the low or non-existing entropy of some Access " \
"Points, the so-called pixie dust attack"
DESCRIPTION = (
"Pixiewps is a tool written in C used to bruteforce offline "
"the WPS pin\n "
"exploiting the low or non-existing entropy of some Access "
"Points, the so-called pixie dust attack"
)
INSTALL_COMMANDS = [
"sudo git clone https://github.com/wiire/pixiewps.git && apt-get -y install build-essential",
"cd pixiewps*/ && make",
"cd pixiewps*/ && sudo make install && wget https://pastebin.com/y9Dk1Wjh"
"cd pixiewps*/ && sudo make install && wget https://pastebin.com/y9Dk1Wjh",
]
PROJECT_URL = "https://github.com/wiire/pixiewps"
@@ -39,19 +53,22 @@ class pixiewps(HackingTool):
os.system(
'echo "'
'1.> Put your interface into monitor mode using '
'\'airmon-ng start {wireless interface}\n'
'2.> wash -i {monitor-interface like mon0}\'\n'
'3.> reaver -i {monitor interface} -b {BSSID of router} -c {router channel} -vvv -K 1 -f"'
'| boxes -d boy')
"'airmon-ng start {wireless interface}\n'"
"'2.> wash -i {monitor-interface like mon0}\'\n'"
"'3.> reaver -i {monitor interface} -b {BSSID of router} -c {router channel} -vvv -K 1 -f"
'| boxes -d boy'
)
print("You Have To Run Manually By USing >>pixiewps -h ")
class BluePot(HackingTool):
TITLE = "Bluetooth Honeypot GUI Framework"
DESCRIPTION = "You need to have at least 1 bluetooth receiver " \
"(if you have many it will work with those, too).\n" \
"You must install/libbluetooth-dev on " \
"Ubuntu/bluez-libs-devel on Fedora/bluez-devel on openSUSE"
DESCRIPTION = (
"You need to have at least 1 bluetooth receiver "
"(if you have many it will work with those, too).\n"
"You must install/libbluetooth-dev on "
"Ubuntu/bluez-libs-devel on Fedora/bluez-devel on openSUSE"
)
INSTALL_COMMANDS = [
"sudo wget https://raw.githubusercontent.com/andrewmichaelsmith/bluepot/master/bin/bluepot-0.2.tar.gz"
"sudo tar xfz bluepot-0.2.tar.gz;sudo rm bluepot-0.2.tar.gz"
@@ -83,7 +100,7 @@ class Wifiphisher(HackingTool):
"""
INSTALL_COMMANDS = [
"git clone https://github.com/wifiphisher/wifiphisher.git",
"cd wifiphisher;sudo python3 setup.py install"
"cd wifiphisher;sudo python3 setup.py install",
]
RUN_COMMANDS = ["cd wifiphisher;sudo wifiphisher"]
PROJECT_URL = "https://github.com/wifiphisher/wifiphisher"
@@ -94,7 +111,7 @@ class Wifite(HackingTool):
DESCRIPTION = "Wifite is an automated wireless attack tool"
INSTALL_COMMANDS = [
"sudo git clone https://github.com/derv82/wifite2.git",
"cd wifite2 && sudo python3 setup.py install"
"cd wifite2 && sudo python3 setup.py install",
]
RUN_COMMANDS = ["cd wifite2; sudo wifite"]
PROJECT_URL = "https://github.com/derv82/wifite2"
@@ -102,8 +119,10 @@ class Wifite(HackingTool):
class EvilTwin(HackingTool):
TITLE = "EvilTwin"
DESCRIPTION = "Fakeap is a script to perform Evil Twin Attack, by getting" \
" credentials using a Fake page and Fake Access Point"
DESCRIPTION = (
"Fakeap is a script to perform Evil Twin Attack, by getting"
" credentials using a Fake page and Fake Access Point"
)
INSTALL_COMMANDS = ["sudo git clone https://github.com/Z4nzu/fakeap.git"]
RUN_COMMANDS = ["cd fakeap && sudo bash fakeap.sh"]
PROJECT_URL = "https://github.com/Z4nzu/fakeap"
@@ -111,12 +130,14 @@ class EvilTwin(HackingTool):
class Fastssh(HackingTool):
TITLE = "Fastssh"
DESCRIPTION = "Fastssh is an Shell Script to perform multi-threaded scan" \
" \n and brute force attack against SSH protocol using the " \
"most commonly credentials."
DESCRIPTION = (
"Fastssh is an Shell Script to perform multi-threaded scan"
" \n and brute force attack against SSH protocol using the "
"most commonly credentials."
)
INSTALL_COMMANDS = [
"sudo git clone https://github.com/Z4nzu/fastssh.git && cd fastssh && sudo chmod +x fastssh.sh",
"sudo apt-get install -y sshpass netcat"
"sudo apt-get install -y sshpass netcat",
]
RUN_COMMANDS = ["cd fastssh && sudo bash fastssh.sh --scan"]
PROJECT_URL = "https://github.com/Z4nzu/fastssh"
@@ -124,12 +145,14 @@ class Fastssh(HackingTool):
class Howmanypeople(HackingTool):
TITLE = "Howmanypeople"
DESCRIPTION = "Count the number of people around you by monitoring wifi " \
"signals.\n" \
"[@] WIFI ADAPTER REQUIRED* \n[*]" \
"It may be illegal to monitor networks for MAC addresses, \n" \
"especially on networks that you do not own. " \
"Please check your country's laws"
DESCRIPTION = (
"Count the number of people around you by monitoring wifi "
"signals.\n"
"[@] WIFI ADAPTER REQUIRED* \n[*]"
"It may be illegal to monitor networks for MAC addresses, \n"
"especially on networks that you do not own. "
"Please check your country's laws"
)
INSTALL_COMMANDS = [
"sudo apt-get install tshark"
";sudo python3 -m pip install howmanypeoplearearound"
@@ -149,5 +172,62 @@ class WirelessAttackTools(HackingToolsCollection):
Wifite(),
EvilTwin(),
Fastssh(),
Howmanypeople()
Howmanypeople(),
]
def pretty_print(self):
table = Table(title="Wireless Attack Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
desc = getattr(t, "DESCRIPTION", "") or ""
url = getattr(t, "PROJECT_URL", "") or ""
table.add_row(t.TITLE, desc.strip().replace("\n", " "), url)
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Wireless Attack Tools Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = WirelessAttackTools()
tools.pretty_print()
tools.show_options()

View File

@@ -1,7 +1,20 @@
# coding=utf-8
import os
import subprocess
from rich.console import Console
from rich.theme import Theme
from rich.table import Table
from rich.panel import Panel
from rich.prompt import Prompt
from rich import box
from core import HackingTool
from core import HackingToolsCollection
_theme = Theme({"purple": "#7B61FF"})
console = Console(theme=_theme)
class Cupp(HackingTool):
TITLE = "Cupp"
@@ -11,6 +24,16 @@ class Cupp(HackingTool):
RUN_COMMANDS = ["cd cupp && python3 cupp.py -i"]
PROJECT_URL = "https://github.com/Mebus/cupp"
def show_info(self):
panel = Panel(
f"[bold purple]{self.TITLE}[/bold purple]\n\n"
f"[cyan]{self.DESCRIPTION}[/cyan]\n\n"
f"[green]Repository:[/green] [underline blue]{self.PROJECT_URL}[/underline blue]",
border_style="purple",
box=box.ROUNDED,
)
console.print(panel)
class WlCreator(HackingTool):
TITLE = "WordlistCreator"
@@ -22,6 +45,16 @@ class WlCreator(HackingTool):
"cd wlcreator && sudo gcc -o wlcreator wlcreator.c && ./wlcreator 5"]
PROJECT_URL = "https://github.com/Z4nzu/wlcreator"
def show_info(self):
panel = Panel(
f"[bold purple]{self.TITLE}[/bold purple]\n\n"
f"[cyan]{self.DESCRIPTION}[/cyan]\n\n"
f"[green]Repository:[/green] [underline blue]{self.PROJECT_URL}[/underline blue]",
border_style="purple",
box=box.ROUNDED,
)
console.print(panel)
class GoblinWordGenerator(HackingTool):
TITLE = "Goblin WordGenerator"
@@ -31,6 +64,16 @@ class GoblinWordGenerator(HackingTool):
RUN_COMMANDS = ["cd GoblinWordGenerator && python3 goblin.py"]
PROJECT_URL = "https://github.com/UndeadSec/GoblinWordGenerator.git"
def show_info(self):
panel = Panel(
f"[bold purple]{self.TITLE}[/bold purple]\n\n"
f"[cyan]{self.DESCRIPTION}[/cyan]\n\n"
f"[green]Repository:[/green] [underline blue]{self.PROJECT_URL}[/underline blue]",
border_style="purple",
box=box.ROUNDED,
)
console.print(panel)
class showme(HackingTool):
TITLE = "Password list (1.4 Billion Clear Text Password)"
@@ -46,6 +89,16 @@ class showme(HackingTool):
RUN_COMMANDS = ["cd SMWYG-Show-Me-What-You-Got && python SMWYG.py"]
PROJECT_URL = "https://github.com/Viralmaniar/SMWYG-Show-Me-What-You-Got"
def show_info(self):
panel = Panel(
f"[bold purple]{self.TITLE}[/bold purple]\n\n"
f"[cyan]{self.DESCRIPTION}[/cyan]\n\n"
f"[green]Repository:[/green] [underline blue]{self.PROJECT_URL}[/underline blue]",
border_style="purple",
box=box.ROUNDED,
)
console.print(panel)
class WordlistGeneratorTools(HackingToolsCollection):
TITLE = "Wordlist Generator"
@@ -55,3 +108,62 @@ class WordlistGeneratorTools(HackingToolsCollection):
GoblinWordGenerator(),
showme()
]
def show_info(self):
header = Panel(f"[bold white on purple] {self.TITLE} [/bold white on purple]",
border_style="purple", box=box.DOUBLE)
console.print(header)
table = Table(box=box.SIMPLE, show_header=True, header_style="bold purple")
table.add_column("#", justify="center", style="cyan", width=4)
table.add_column("Tool", style="bold")
table.add_column("Description", style="dim", overflow="fold")
for idx, t in enumerate(self.TOOLS, start=1):
desc = getattr(t, "DESCRIPTION", "") or ""
table.add_row(str(idx), t.TITLE, desc)
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Wordlist Generator Collection[/bold magenta]\n"
"Select a tool to view details or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = getattr(tool, "TITLE", tool.__class__.__name__)
desc = getattr(tool, "DESCRIPTION", "")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to view/run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_info"):
selected.show_info()
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = WordlistGeneratorTools()
tools.show_info()
tools.show_options()

View File

@@ -1,13 +1,19 @@
# coding=utf-8
import os
import subprocess
from rich.console import Console
from rich.panel import Panel
from rich.prompt import Prompt
from rich.table import Table
from core import HackingTool
from core import HackingToolsCollection
console = Console()
class Dalfox(HackingTool):
TITLE = "DalFox(Finder of XSS)"
TITLE = "DalFox (Finder of XSS)"
DESCRIPTION = "XSS Scanning and Parameter Analysis tool."
INSTALL_COMMANDS = [
"sudo apt-get install golang",
@@ -23,7 +29,7 @@ class Dalfox(HackingTool):
class XSSPayloadGenerator(HackingTool):
TITLE = "XSS Payload Generator"
DESCRIPTION = "XSS PAYLOAD GENERATOR -XSS SCANNER-XSS DORK FINDER"
DESCRIPTION = "XSS PAYLOAD GENERATOR - XSS SCANNER - XSS DORK FINDER"
INSTALL_COMMANDS = [
"git clone https://github.com/capture0x/XSS-LOADER.git",
"cd XSS-LOADER;sudo pip3 install -r requirements.txt"
@@ -40,25 +46,28 @@ class XSSFinder(HackingTool):
PROJECT_URL = "https://github.com/Damian89/extended-xss-search"
def after_install(self):
print("""\033[96m
Follow This Steps After Installation:-
\033[31m [*] Go To extended-xss-search directory,
and Rename the example.app-settings.conf to app-settings.conf
""")
console.print(Panel.fit(
"[bold cyan]Follow These Steps After Installation:[/bold cyan]\n"
"[red]*[/red] Go to [yellow]extended-xss-search[/yellow] directory\n"
"[green]*[/green] Rename [bold]example.app-settings.conf[/bold] → [bold]app-settings.conf[/bold]",
title="[ Install Notes ]",
border_style="magenta"
))
input("Press ENTER to continue")
def run(self):
print("""\033[96m
You have To Add Links to scan
\033[31m[!] Go to extended-xss-search
[*] config/urls-to-test.txt
[!] python3 extended-xss-search.py
""")
console.print(Panel.fit(
"[bold cyan]You need to add links to scan[/bold cyan]\n"
"[red]*[/red] Go to [yellow]extended-xss-search/config/urls-to-test.txt[/yellow]\n"
"[green]*[/green] Run: [bold]python3 extended-xss-search.py[/bold]",
title="[ Run Instructions ]",
border_style="blue"
))
class XSSFreak(HackingTool):
TITLE = "XSS-Freak"
DESCRIPTION = "XSS-Freak is an XSS scanner fully written in python3 from scratch"
DESCRIPTION = "An XSS scanner fully written in Python 3 from scratch."
INSTALL_COMMANDS = [
"git clone https://github.com/PR0PH3CY33/XSS-Freak.git",
"cd XSS-Freak;sudo pip3 install -r requirements.txt"
@@ -69,7 +78,7 @@ class XSSFreak(HackingTool):
class XSpear(HackingTool):
TITLE = "XSpear"
DESCRIPTION = "XSpear is XSS Scanner on ruby gems"
DESCRIPTION = "XSpear is an XSS Scanner built on Ruby Gems."
INSTALL_COMMANDS = ["gem install XSpear"]
RUN_COMMANDS = ["XSpear -h"]
PROJECT_URL = "https://github.com/hahwul/XSpear"
@@ -84,27 +93,32 @@ class XSSCon(HackingTool):
PROJECT_URL = "https://github.com/menkrep1337/XSSCon"
def run(self):
website = input("Enter Website >> ")
console.print(Panel.fit(
"Enter target website to scan with XSSCon:",
title="[bold yellow]XSSCon[/bold yellow]",
border_style="bright_yellow"
))
website = Prompt.ask("[bold cyan]Enter Website[/bold cyan]")
os.system("cd XSSCon;")
subprocess.run(["python3", "xsscon.py", "-u", website])
class XanXSS(HackingTool):
TITLE = "XanXSS"
DESCRIPTION = "XanXSS is a reflected XSS searching tool\n " \
"that creates payloads based from templates"
DESCRIPTION = "Reflected XSS searching tool that creates payloads from templates."
INSTALL_COMMANDS = ["git clone https://github.com/Ekultek/XanXSS.git"]
PROJECT_URL = "https://github.com/Ekultek/XanXSS"
def run(self):
os.system("cd XanXSS ;python xanxss.py -h")
print("\033[96m You Have to run it manually By Using\n"
" [!]python xanxss.py [Options]")
os.system("cd XanXSS; python xanxss.py -h")
console.print(
"[cyan]You have to run it manually using:[/cyan]\n[bold yellow]python xanxss.py [options][/bold yellow]"
)
class XSSStrike(HackingTool):
TITLE = "Advanced XSS Detection Suite"
DESCRIPTION = "XSStrike is a python script designed to detect and exploit XSS vulnerabilities."
DESCRIPTION = "XSStrike is a Python-based tool designed to detect and exploit XSS vulnerabilities."
INSTALL_COMMANDS = [
"sudo rm -rf XSStrike",
"git clone https://github.com/UltimateHackers/XSStrike.git "
@@ -113,13 +127,12 @@ class XSSStrike(HackingTool):
PROJECT_URL = "https://github.com/UltimateHackers/XSStrike"
def __init__(self):
super(XSSStrike, self).__init__(runnable = False)
super(XSSStrike, self).__init__(runnable=False)
class RVuln(HackingTool):
TITLE = "RVuln"
DESCRIPTION = "RVuln is multi-threaded and Automated Web Vulnerability " \
"Scanner written in Rust"
DESCRIPTION = "Multi-threaded and Automated Web Vulnerability Scanner written in Rust."
INSTALL_COMMANDS = [
"sudo git clone https://github.com/iinc0gnit0/RVuln.git;"
"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh;"
@@ -144,3 +157,37 @@ class XSSAttackTools(HackingToolsCollection):
XSSStrike(),
RVuln()
]
def show_info(self):
console.print(Panel.fit(
"[bold magenta]XSS Attack Tools Collection[/bold magenta]\n"
"A curated set of tools for XSS vulnerability analysis and exploitation.",
border_style="bright_magenta"
))
def show_options(self, parent=None):
console.print("\n")
self.show_info()
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
table.add_row(str(i + 1), tool.TITLE, tool.DESCRIPTION or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to Main Menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
self.TOOLS[choice - 1].show_options(parent=self)
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)