From 2ad5587517f9d002e1a258961ad09f34b84cc12f Mon Sep 17 00:00:00 2001 From: Hardik Zinzuvadiya <25708027+Z4nzu@users.noreply.github.com> Date: Sun, 15 Mar 2026 13:55:04 +0530 Subject: [PATCH] Phase 4+5: Core architecture + shared console across all tool files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- tools/exploit_frameworks.py | 93 +-------------------------- tools/forensic_tools.py | 88 +++---------------------- tools/information_gathering_tools.py | 96 ++++------------------------ tools/other_tools.py | 72 +-------------------- tools/others/android_attack.py | 67 +------------------ tools/others/email_verifier.py | 67 +------------------ tools/others/hash_crack.py | 65 +------------------ tools/others/homograph_attacks.py | 67 +------------------ tools/others/mix_tools.py | 67 +------------------ tools/others/payload_injection.py | 69 +------------------- tools/others/socialmedia.py | 67 +------------------ tools/others/socialmedia_finder.py | 67 +------------------ tools/others/web_crawling.py | 69 +------------------- tools/others/wifi_jamming.py | 67 +------------------ tools/post_exploitation.py | 75 +--------------------- tools/remote_administration.py | 76 +--------------------- tools/reverse_engineering.py | 74 +-------------------- tools/sql_tools.py | 75 ++-------------------- tools/steganography.py | 69 +------------------- tools/webattack.py | 69 ++------------------ tools/wordlist_generator.py | 50 +-------------- tools/xss_attack.py | 37 +---------- 22 files changed, 60 insertions(+), 1486 deletions(-) diff --git a/tools/exploit_frameworks.py b/tools/exploit_frameworks.py index 87a4a07..c3b4bf1 100644 --- a/tools/exploit_frameworks.py +++ b/tools/exploit_frameworks.py @@ -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", "") - 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() diff --git a/tools/forensic_tools.py b/tools/forensic_tools.py index 29b1af1..8f6566d 100644 --- a/tools/forensic_tools.py +++ b/tools/forensic_tools.py @@ -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() diff --git a/tools/information_gathering_tools.py b/tools/information_gathering_tools.py index 6dd2e9c..4d9dfd8 100644 --- a/tools/information_gathering_tools.py +++ b/tools/information_gathering_tools.py @@ -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() diff --git a/tools/other_tools.py b/tools/other_tools.py index f086d06..4e9f3ea 100644 --- a/tools/other_tools.py +++ b/tools/other_tools.py @@ -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() diff --git a/tools/others/android_attack.py b/tools/others/android_attack.py index 902f839..f79c3c3 100644 --- a/tools/others/android_attack.py +++ b/tools/others/android_attack.py @@ -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() \ No newline at end of file + tools.show_options() diff --git a/tools/others/email_verifier.py b/tools/others/email_verifier.py index 672df51..50d6edc 100644 --- a/tools/others/email_verifier.py +++ b/tools/others/email_verifier.py @@ -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() \ No newline at end of file + tools.show_options() diff --git a/tools/others/hash_crack.py b/tools/others/hash_crack.py index 96651e7..390470c 100644 --- a/tools/others/hash_crack.py +++ b/tools/others/hash_crack.py @@ -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() diff --git a/tools/others/homograph_attacks.py b/tools/others/homograph_attacks.py index 4d9943d..9984366 100644 --- a/tools/others/homograph_attacks.py +++ b/tools/others/homograph_attacks.py @@ -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() \ No newline at end of file + tools.show_options() diff --git a/tools/others/mix_tools.py b/tools/others/mix_tools.py index 789cb9b..37c5dd4 100644 --- a/tools/others/mix_tools.py +++ b/tools/others/mix_tools.py @@ -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() \ No newline at end of file + tools.show_options() diff --git a/tools/others/payload_injection.py b/tools/others/payload_injection.py index b5c89b2..af3f327 100644 --- a/tools/others/payload_injection.py +++ b/tools/others/payload_injection.py @@ -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() \ No newline at end of file + tools.show_options() diff --git a/tools/others/socialmedia.py b/tools/others/socialmedia.py index de973de..f61432e 100644 --- a/tools/others/socialmedia.py +++ b/tools/others/socialmedia.py @@ -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() \ No newline at end of file + tools.show_options() diff --git a/tools/others/socialmedia_finder.py b/tools/others/socialmedia_finder.py index 5325f9a..47b3914 100644 --- a/tools/others/socialmedia_finder.py +++ b/tools/others/socialmedia_finder.py @@ -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() \ No newline at end of file + tools.show_options() diff --git a/tools/others/web_crawling.py b/tools/others/web_crawling.py index 7cb610f..a55f721 100644 --- a/tools/others/web_crawling.py +++ b/tools/others/web_crawling.py @@ -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() \ No newline at end of file + tools.show_options() diff --git a/tools/others/wifi_jamming.py b/tools/others/wifi_jamming.py index 55b20b8..87aed68 100644 --- a/tools/others/wifi_jamming.py +++ b/tools/others/wifi_jamming.py @@ -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() \ No newline at end of file + tools.show_options() diff --git a/tools/post_exploitation.py b/tools/post_exploitation.py index c1cd3a9..5ecee32 100644 --- a/tools/post_exploitation.py +++ b/tools/post_exploitation.py @@ -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() diff --git a/tools/remote_administration.py b/tools/remote_administration.py index a81b624..0e33f4b 100644 --- a/tools/remote_administration.py +++ b/tools/remote_administration.py @@ -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() diff --git a/tools/reverse_engineering.py b/tools/reverse_engineering.py index 47a9873..f3d45c7 100644 --- a/tools/reverse_engineering.py +++ b/tools/reverse_engineering.py @@ -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() diff --git a/tools/sql_tools.py b/tools/sql_tools.py index b047fda..b6b2fc8 100644 --- a/tools/sql_tools.py +++ b/tools/sql_tools.py @@ -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() diff --git a/tools/steganography.py b/tools/steganography.py index fc457fd..6dd6186 100644 --- a/tools/steganography.py +++ b/tools/steganography.py @@ -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() diff --git a/tools/webattack.py b/tools/webattack.py index f27e2a5..6ab75fe 100644 --- a/tools/webattack.py +++ b/tools/webattack.py @@ -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() \ No newline at end of file + tools.show_options() diff --git a/tools/wordlist_generator.py b/tools/wordlist_generator.py index d075c7a..30a9f12 100644 --- a/tools/wordlist_generator.py +++ b/tools/wordlist_generator.py @@ -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() \ No newline at end of file + tools.show_options() diff --git a/tools/xss_attack.py b/tools/xss_attack.py index 9bdd47f..397622a 100644 --- a/tools/xss_attack.py +++ b/tools/xss_attack.py @@ -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)