Phase 4+5: Core architecture + shared console across all tool files

Phase 4 (core.py — largely done in Phase 1, completed here):
- HackingTool: add ARCHIVED, ARCHIVED_REASON, SUPPORTED_OS, REQUIRES_* fields
- HackingTool: remove INSTALLATION_DIR (unused)
- HackingToolsCollection: add _active_tools(), _archived_tools(), _incompatible_tools()
- HackingToolsCollection: add _show_archived_tools() (option 98 sub-menu)
- HackingToolsCollection.show_options(): filter by OS and ARCHIVED flag
- OS-incompatible tools show count but are hidden from menu
- Archived tools accessible via option 98 with reason displayed

Phase 5 (all 22 remaining tool files):
- Remove local console = Console() and _theme = Theme() from all 22 files
- Remove P_COLOR and PURPLE_STYLE local constants
- Add `from core import HackingTool, HackingToolsCollection, console` everywhere
- Remove show_options() overrides from all collection classes (500+ lines deleted)
- Remove pretty_print() overrides from all collection classes
- Remove _get_attr() / _get_attr_fallback() helpers from all collection classes
- Replace super(ClassName, self).__init__() → super().__init__() in all files
- Remove # coding=utf-8 headers from all files
- Fix remaining PURPLE_STYLE usages → "bold magenta" literal

All 28 tool modules import cleanly. Zero local console instances remain.
This commit is contained in:
Hardik Zinzuvadiya 2026-03-15 13:55:04 +05:30
parent 08f1e3e063
commit 2ad5587517
22 changed files with 60 additions and 1486 deletions

View file

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

View file

@ -1,4 +1,3 @@
# coding=utf-8
import os
import sys
@ -7,18 +6,12 @@ current_dir = os.path.dirname(__file__)
parent_dir = os.path.dirname(current_dir)
sys.path.append(parent_dir)
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -29,7 +22,7 @@ class Autopsy(HackingTool):
RUN_COMMANDS = ["sudo autopsy"]
def __init__(self):
super(Autopsy, self).__init__(installable=False)
super().__init__(installable=False)
class Wireshark(HackingTool):
@ -40,7 +33,7 @@ class Wireshark(HackingTool):
RUN_COMMANDS = ["sudo wireshark"]
def __init__(self):
super(Wireshark, self).__init__(installable=False)
super().__init__(installable=False)
class BulkExtractor(HackingTool):
@ -49,13 +42,13 @@ class BulkExtractor(HackingTool):
PROJECT_URL = "https://github.com/simsong/bulk_extractor"
def __init__(self):
super(BulkExtractor, self).__init__([
super().__init__([
('GUI Mode (Download required)', self.gui_mode),
('CLI Mode', self.cli_mode)
], installable=False, runnable=False)
def gui_mode(self):
console.print(Panel(Text(self.TITLE, justify="center"), style=PURPLE_STYLE))
console.print(Panel(Text(self.TITLE, justify="center"), style="bold magenta"))
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")
@ -65,7 +58,7 @@ class BulkExtractor(HackingTool):
"[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))
console.print(Panel(Text(self.TITLE + " - CLI Mode", justify="center"), style="bold magenta"))
os.system("sudo apt install bulk-extractor")
console.print("[magenta]Showing bulk_extractor help and options:[/]")
os.system("bulk_extractor -h")
@ -80,7 +73,7 @@ class Guymager(HackingTool):
PROJECT_URL = "https://guymager.sourceforge.io/"
def __init__(self):
super(Guymager, self).__init__(installable=False)
super().__init__(installable=False)
class Toolsley(HackingTool):
@ -96,7 +89,7 @@ class Toolsley(HackingTool):
PROJECT_URL = "https://www.toolsley.com/"
def __init__(self):
super(Toolsley, self).__init__(installable=False, runnable=False)
super().__init__(installable=False, runnable=False)
class ForensicTools(HackingToolsCollection):
@ -109,71 +102,6 @@ class ForensicTools(HackingToolsCollection):
Toolsley()
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Forensic Tools", show_lines=True, expand=True)
table.add_column("Title", style=PURPLE_STYLE, no_wrap=True)
table.add_column("Description", style=PURPLE_STYLE)
table.add_column("Project URL", style=PURPLE_STYLE, no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc).replace("\n", " "), str(url))
console.print(Panel(table, title=f"[magenta]Available Tools[/magenta]", border_style=PURPLE_STYLE))
def show_options(self, parent=None):
console.print("\n")
console.print(Panel.fit(
"[bold magenta]Forensic Tools Collection[/bold magenta]\n"
"Select a tool to run or view options.",
border_style=PURPLE_STYLE
))
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# delegate to collection-like tools if available
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# if tool exposes actions (like BulkExtractor) and has a menu, try to show it
elif hasattr(selected, "show_actions"):
selected.show_actions(parent=self)
# otherwise try to call run if present
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = ForensicTools()
tools.pretty_print()
tools.show_options()

View file

@ -1,22 +1,15 @@
# coding=utf-8
import os
import socket
import subprocess
import webbrowser
import sys
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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):
@ -29,7 +22,7 @@ class NMAP(HackingTool):
PROJECT_URL = "https://github.com/nmap/nmap"
def __init__(self):
super(NMAP, self).__init__(runnable=False)
super().__init__(runnable=False)
class Dracnmap(HackingTool):
@ -48,12 +41,12 @@ class PortScan(HackingTool):
TITLE = "Port scanning"
def __init__(self):
super(PortScan, self).__init__(installable=False)
super().__init__(installable=False)
def run(self):
clear_screen()
console.print(Panel(Text(self.TITLE, justify="center"), style=PURPLE_STYLE))
target = Prompt.ask("[bold]Select a Target IP[/]", default="", show_default=False)
console.print(Panel(Text(self.TITLE, justify="center"), style="bold magenta"))
target = Prompt.ask("[bold]Select a Target IP[/bold magenta]", default="", show_default=False)
subprocess.run(["sudo", "nmap", "-O", "-Pn", target])
@ -61,14 +54,14 @@ class Host2IP(HackingTool):
TITLE = "Host to IP "
def __init__(self):
super(Host2IP, self).__init__(installable=False)
super().__init__(installable=False)
def run(self):
clear_screen()
console.print(Panel(Text(self.TITLE, justify="center"), style=PURPLE_STYLE))
console.print(Panel(Text(self.TITLE, justify="center"), style="bold magenta"))
host = Prompt.ask("Enter host name (e.g. www.google.com):- ")
ips = socket.gethostbyname(host)
console.print(f"[{PURPLE_STYLE}]{host} -> {ips}[/]")
console.print("[bold magenta]{host} -> {ips}[/bold magenta]")
class XeroSploit(HackingTool):
@ -111,11 +104,11 @@ class IsItDown(HackingTool):
DESCRIPTION = "Check Website Is Online or Not"
def __init__(self):
super(IsItDown, self).__init__(
super().__init__(
[('Open', self.open)], installable=False, runnable=False)
def open(self):
console.print(Panel("Opening isitdownrightnow.com", style=PURPLE_STYLE))
console.print(Panel("Opening isitdownrightnow.com", style="bold magenta"))
webbrowser.open_new_tab("https://www.isitdownrightnow.com/")
@ -171,7 +164,7 @@ class SecretFinder(HackingTool):
PROJECT_URL = "https://github.com/m4ll0k/SecretFinder"
def __init__(self):
super(SecretFinder, self).__init__(runnable=False)
super().__init__(runnable=False)
class Shodan(HackingTool):
@ -183,7 +176,7 @@ class Shodan(HackingTool):
PROJECT_URL = "https://github.com/m4ll0k/Shodanfy.py"
def __init__(self):
super(Shodan, self).__init__(runnable=False)
super().__init__(runnable=False)
class PortScannerRanger(HackingTool):
@ -241,71 +234,6 @@ class InformationGatheringTools(HackingToolsCollection):
Breacher()
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Information Gathering Tools", show_lines=True, expand=True)
table.add_column("Title", style=PURPLE_STYLE, no_wrap=True)
table.add_column("Description", style=PURPLE_STYLE)
table.add_column("Project URL", style=PURPLE_STYLE, no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc).replace("\n", " "), str(url))
console.print(Panel(table, title=f"[magenta]Available Tools[/magenta]", border_style=PURPLE_STYLE))
def show_options(self, parent=None):
console.print("\n")
console.print(Panel.fit(
"[bold magenta]Information Gathering Collection[/bold magenta]\n"
"Select a tool to view/run it or return to the previous menu.",
border_style=PURPLE_STYLE
))
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# delegate to collection-style tools if available
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# if tool exposes actions/menu, try to call it
elif hasattr(selected, "show_actions"):
selected.show_actions(parent=self)
# otherwise try to call run if present
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = InformationGatheringTools()
tools.pretty_print()
tools.show_options()

View file

@ -1,9 +1,7 @@
# coding=utf-8
import os
import subprocess
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
from tools.others.android_attack import AndroidAttackTools
from tools.others.email_verifier import EmailVerifyTools
from tools.others.hash_crack import HashCrackingTools
@ -15,15 +13,9 @@ 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)"
@ -59,68 +51,6 @@ class OtherTools(HackingToolsCollection):
MixTools()
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Other Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc).strip().replace("\n", " "), str(url))
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Other Tools Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# If tool exposes show_options (collection-style), delegate to it
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# Otherwise, if runnable, call its run method
elif hasattr(selected, "run"):
selected.run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = OtherTools()
tools.pretty_print()
tools.show_options()

View file

@ -1,17 +1,9 @@
# coding=utf-8
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -77,61 +69,6 @@ class AndroidAttackTools(HackingToolsCollection):
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()
tools.show_options()

View file

@ -1,16 +1,8 @@
# coding=utf-8
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -27,61 +19,6 @@ 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()
tools.show_options()

View file

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

View file

@ -1,17 +1,9 @@
# coding=utf-8
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -26,61 +18,6 @@ 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()
tools.show_options()

View file

@ -1,17 +1,9 @@
# coding=utf-8
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -54,61 +46,6 @@ 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()
tools.show_options()

View file

@ -1,17 +1,9 @@
# coding=utf-8
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -33,7 +25,7 @@ class Pixload(HackingTool):
PROJECT_URL = "https://github.com/chinarulezzz/pixload"
def __init__(self):
super(Pixload, self).__init__(runnable = False)
super().__init__(runnable = False)
class PayloadInjectorTools(HackingToolsCollection):
@ -43,61 +35,6 @@ class PayloadInjectorTools(HackingToolsCollection):
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()
tools.show_options()

View file

@ -1,21 +1,13 @@
# coding=utf-8
import contextlib
import os
import subprocess
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -83,61 +75,6 @@ class SocialMediaBruteforceTools(HackingToolsCollection):
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()
tools.show_options()

View file

@ -1,20 +1,12 @@
# coding=utf-8
import os
import subprocess
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -101,61 +93,6 @@ class SocialMediaFinderTools(HackingToolsCollection):
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()
tools.show_options()

View file

@ -1,17 +1,9 @@
# coding=utf-8
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -20,68 +12,13 @@ class GoSpider(HackingTool):
PROJECT_URL = "https://github.com/jaeles-project/gospider"
def __init__(self):
super(GoSpider, self).__init__(runnable = False)
super().__init__(runnable = False)
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()
tools.show_options()

View file

@ -1,17 +1,9 @@
# coding=utf-8
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -46,61 +38,6 @@ class WifiJammingTools(HackingToolsCollection):
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()
tools.show_options()

View file

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

View file

@ -1,16 +1,8 @@
# coding=utf-8
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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)
# Bug 17 fix: Stitch was defined in both payload_creator.py and remote_administration.py.
# It is kept in payload_creator.py (its correct category) and removed from here.
@ -31,75 +23,9 @@ class Pyshell(HackingTool):
class RemoteAdministrationTools(HackingToolsCollection):
TITLE = "Remote Administrator Tools (RAT)"
TOOLS = [
Stitch(),
Pyshell()
]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Remote Administration Tools (RAT)", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="").strip().replace("\n", " ")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc or ""), str(url))
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Remote Administration Tools (RAT) Collection[/bold magenta]\n"
"Select a tool to view options or run it.",
border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99")
choice = int(choice)
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
# If tool exposes show_options (collection-style), delegate to it
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
# Otherwise, if runnable, call its run method
elif hasattr(selected, "run"):
selected.run()
# Preserve any before_run hooks if present
elif hasattr(selected, "before_run"):
selected.before_run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = RemoteAdministrationTools()
tools.pretty_print()
tools.show_options()

View file

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

View file

@ -1,16 +1,8 @@
# coding=utf-8
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -42,7 +34,7 @@ class SQLiScanner(HackingTool):
PROJECT_URL = "https://github.com/stamparm/DSSS"
def __init__(self):
super(SQLiScanner, self).__init__(runnable=False)
super().__init__(runnable=False)
class Explo(HackingTool):
@ -53,7 +45,7 @@ class Explo(HackingTool):
PROJECT_URL = "https://github.com/dtag-dev-sec/explo"
def __init__(self):
super(Explo, self).__init__(runnable=False)
super().__init__(runnable=False)
class Blisqy(HackingTool):
@ -63,7 +55,7 @@ class Blisqy(HackingTool):
PROJECT_URL = "https://github.com/JohnTroony/Blisqy"
def __init__(self):
super(Blisqy, self).__init__(runnable=False)
super().__init__(runnable=False)
class Leviathan(HackingTool):
@ -89,65 +81,6 @@ class SqlInjectionTools(HackingToolsCollection):
TITLE = "SQL Injection Tools"
TOOLS = [Sqlmap(), NoSqlMap(), SQLiScanner(), Explo(), Blisqy(), Leviathan(), SQLScan()]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="SQL Injection Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="").strip().replace("\n", " ")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "PROJECT", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc or ""), str(url))
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]SQL Injection Tools Collection[/bold magenta]\nSelect a tool to view options or run it.", border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = int(Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99"))
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "before_run"):
selected.before_run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = SqlInjectionTools()
tools.pretty_print()
tools.show_options()

View file

@ -1,19 +1,11 @@
# coding=utf-8
import subprocess
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -84,65 +76,6 @@ class SteganographyTools(HackingToolsCollection):
TITLE = "Steganography Tools"
TOOLS = [SteganoHide(), StegnoCracker(), StegoCracker(), Whitespace()]
def _get_attr(self, obj, *names, default=""):
for n in names:
if hasattr(obj, n):
return getattr(obj, n)
return default
def pretty_print(self):
table = Table(title="Steganography Tools", show_lines=True, expand=True)
table.add_column("Title", style="purple", no_wrap=True)
table.add_column("Description", style="purple")
table.add_column("Project URL", style="purple", no_wrap=True)
for t in self.TOOLS:
title = self._get_attr(t, "TITLE", "Title", "title", default=t.__class__.__name__)
desc = self._get_attr(t, "DESCRIPTION", "Description", "description", default="").strip().replace("\n", " ")
url = self._get_attr(t, "PROJECT_URL", "PROJECT_URL", "project_url", "projectUrl", default="")
table.add_row(str(title), str(desc or ""), str(url))
panel = Panel(table, title="[purple]Available Tools[/purple]", border_style="purple")
console.print(panel)
def show_options(self, parent=None):
console.print("\n")
panel = Panel.fit("[bold magenta]Steganography Tools Collection[/bold magenta]\nSelect a tool to run or view options.", border_style="purple")
console.print(panel)
table = Table(title="[bold cyan]Available Tools[/bold cyan]", show_lines=True, expand=True)
table.add_column("Index", justify="center", style="bold yellow")
table.add_column("Tool Name", justify="left", style="bold green")
table.add_column("Description", justify="left", style="white")
for i, tool in enumerate(self.TOOLS):
title = self._get_attr(tool, "TITLE", "Title", "title", default=tool.__class__.__name__)
desc = self._get_attr(tool, "DESCRIPTION", "Description", "description", default="")
table.add_row(str(i + 1), title, desc or "")
table.add_row("[red]99[/red]", "[bold red]Exit[/bold red]", "Return to previous menu")
console.print(table)
try:
choice = int(Prompt.ask("[bold cyan]Select a tool to run[/bold cyan]", default="99"))
if 1 <= choice <= len(self.TOOLS):
selected = self.TOOLS[choice - 1]
if hasattr(selected, "show_options"):
selected.show_options(parent=self)
elif hasattr(selected, "run"):
selected.run()
elif hasattr(selected, "before_run"):
selected.before_run()
else:
console.print("[bold yellow]Selected tool has no runnable interface.[/bold yellow]")
elif choice == 99:
return 99
except Exception:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
return self.show_options(parent=parent)
if __name__ == "__main__":
tools = SteganographyTools()
tools.pretty_print()
tools.show_options()

View file

@ -1,17 +1,9 @@
# coding=utf-8
import subprocess
from core import HackingTool
from core import HackingToolsCollection
from core import HackingTool, HackingToolsCollection, console
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"
@ -36,7 +28,7 @@ class Skipfish(HackingTool):
]
def __init__(self):
super(Skipfish, self).__init__(installable=False)
super().__init__(installable=False)
class SubDomainFinder(HackingTool):
@ -93,7 +85,7 @@ class SubDomainTakeOver(HackingTool):
PROJECT_URL = "https://github.com/edoardottt/takeover"
def __init__(self):
super(SubDomainTakeOver, self).__init__(runnable=False)
super().__init__(runnable=False)
class Dirb(HackingTool):
@ -128,59 +120,6 @@ class WebAttackTools(HackingToolsCollection):
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()
tools.show_options()

View file

@ -1,19 +1,11 @@
# 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)
from core import HackingTool, HackingToolsCollection, console
class Cupp(HackingTool):
@ -125,45 +117,7 @@ class WordlistGeneratorTools(HackingToolsCollection):
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()
tools.show_options()

View file

@ -1,15 +1,9 @@
# 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()
from core import HackingTool, HackingToolsCollection, console
class Dalfox(HackingTool):
@ -127,7 +121,7 @@ class XSSStrike(HackingTool):
PROJECT_URL = "https://github.com/UltimateHackers/XSStrike"
def __init__(self):
super(XSSStrike, self).__init__(runnable=False)
super().__init__(runnable=False)
class RVuln(HackingTool):
@ -164,30 +158,3 @@ class XSSAttackTools(HackingToolsCollection):
"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)