Feat/rich UI menu lovely (#567)
2
.github/workflows/test_install.yml
vendored
@@ -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
|
||||
|
||||
12
README.md
@@ -204,11 +204,11 @@
|
||||
- [Crivo](https://github.com/GMDSantana/crivo)
|
||||
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## 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
|
||||
|
||||
|
||||
@@ -23,11 +23,11 @@
|
||||
|
||||
# Hackingtool Menu 🧰
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## 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
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
217
hackingtool.py
@@ -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
|
After Width: | Height: | Size: 191 KiB |
BIN
images/A0.png
|
Before Width: | Height: | Size: 70 KiB |
BIN
images/A00.png
|
Before Width: | Height: | Size: 131 KiB |
BIN
images/A1.png
|
Before Width: | Height: | Size: 72 KiB |
BIN
images/A2.png
|
Before Width: | Height: | Size: 91 KiB |
BIN
images/A4.png
|
Before Width: | Height: | Size: 82 KiB |
BIN
images/AA.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
images/AAA.png
Normal file
|
After Width: | Height: | Size: 269 KiB |
BIN
images/AAAA.png
Normal file
|
After Width: | Height: | Size: 272 KiB |
BIN
images/AAAAA.png
Normal file
|
After Width: | Height: | Size: 163 KiB |
207
install.py
Executable 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)
|
||||
160
install.sh
@@ -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
|
||||
@@ -1,4 +1,5 @@
|
||||
boxes
|
||||
flask
|
||||
lolcat
|
||||
requests
|
||||
requests
|
||||
rich
|
||||
@@ -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()
|
||||
|
||||
107
tools/ddos.py
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
|
||||