Spaces:
Running
Running
import tkinter as tk | |
import json | |
from dotenv import load_dotenv | |
import customtkinter | |
import os | |
from components.dns_recon import DNSRecon | |
from components.geo import geo_ip_recon | |
from components.port_scanner import NetworkScanner | |
from components.jwt import JWTAnalyzer | |
from components.packet_analysis import PacketAnalysis | |
from components.subdomain import SubEnum | |
list_loc = "lists//default.txt" | |
load_dotenv() | |
gkey = os.getenv('GEOIP_API_KEY') | |
akey = os.getenv('OPENAI_API_KEY') | |
bkey = os.getenv('BARD_API_KEY') | |
lkey = os.getenv('RUNPOD_API_KEY') | |
lendpoint = os.getenv('RUNPOD_ENDPOINT_ID') | |
dns_enum = DNSRecon() | |
geo_ip = geo_ip_recon() | |
packet_analysis = PacketAnalysis() | |
port_scanner = NetworkScanner() | |
jwt_analyzer = JWTAnalyzer() | |
sub_recon = SubEnum() | |
customtkinter.set_appearance_mode("dark") | |
customtkinter.set_default_color_theme("dark-blue") | |
root = customtkinter.CTk() | |
root.title("GVA - GUI") | |
root.geometry("800x400") | |
paned_window = tk.PanedWindow(root, orient="horizontal") | |
paned_window.pack(fill="both", expand=True) | |
input_frame = customtkinter.CTkFrame(paned_window, width=400) | |
output_frame = customtkinter.CTkFrame(paned_window, width=400) | |
paned_window.add(input_frame) | |
paned_window.add(output_frame) | |
navigation_frame = customtkinter.CTkFrame(input_frame, width=100) | |
navigation_frame.pack(side="left", fill="y") | |
def application(attack, entry2, entry3, entry_ai, entry5): | |
try: | |
target = entry2.get() | |
profile = entry3.get() if entry3 else None | |
save_loc = entry5.get() if entry5 else None | |
ai_choices = entry_ai.get() if entry_ai else None | |
if attack == 'geo': | |
geo_output: str = geo_ip_recon.geoip(gkey, target) | |
output_save(str(geo_output)) | |
elif attack == 'nmap': | |
p1_out = port_scanner.scanner( | |
ip=target, | |
profile=int(profile) if profile else None, | |
akey=akey, | |
bkey=bkey, | |
lkey=lkey, | |
lendpoint=lendpoint, | |
AI=ai_choices | |
) | |
output_save(p1_out) | |
elif attack == 'dns': | |
dns_output: str = dns_enum.dns_resolver( | |
target=target, | |
akey=akey, | |
bkey=bkey, | |
lkey=lkey, | |
lendpoint=lendpoint, | |
AI=ai_choices | |
) | |
output_save(dns_output) | |
elif attack == 'sub': | |
sub_output: str = sub_recon.sub_enumerator(target, list_loc) | |
output_save(sub_output) | |
elif attack == 'jwt': | |
output: str = jwt_analyzer.analyze( | |
token=target, | |
openai_api_token=akey, | |
bard_api_token=bkey, | |
llama_api_token=lkey, | |
llama_endpoint=lendpoint, | |
AI=ai_choices | |
) | |
output_save(output) | |
elif attack == 'pcap': | |
packet_analysis.perform_full_analysis( | |
pcap_path=target, | |
json_path=save_loc, | |
) | |
output_save("Done") | |
except KeyboardInterrupt: | |
print("Keyboard Interrupt detected ...") | |
def output_save(output: str) -> None: | |
if output == "Done": | |
output_data = "Status: Successful" | |
output_textbox.insert("1.0", output_data) | |
else: | |
output_textbox.delete("1.0", "end") | |
json_data = json.loads(output) | |
formatted_json = json.dumps(json_data, indent=2) | |
output_textbox.insert("1.0", formatted_json) | |
def select_frame_by_name(name): | |
global frame | |
frame.destroy() | |
frame = customtkinter.CTkFrame(master=input_frame) | |
frame.pack(pady=20, padx=20, fill="both", expand=True) | |
label_text = f"GVA System - {name.capitalize()}" | |
label = customtkinter.CTkLabel(master=frame, text=label_text) | |
label.pack(pady=12, padx=10) | |
entry2 = customtkinter.CTkEntry(master=frame, placeholder_text="Target/capfile/token") | |
entry2.pack(pady=12, padx=10) | |
if name in ["nmap", "dns", "jwt"]: | |
ai_choices_val = ["openai", "bard", "llama-api"] | |
entry_ai = customtkinter.CTkComboBox(master=frame, values=ai_choices_val, state="readonly") | |
entry_ai.set("Select AI Input") | |
entry_ai.pack(pady=12, padx=10) | |
else: | |
entry_ai = None | |
entry3 = None | |
entry5 = None | |
if name == "nmap": | |
entry3 = customtkinter.CTkEntry(master=frame, placeholder_text="Profile") | |
entry3.pack(pady=12, padx=10) | |
elif name == "sub": | |
entry3 = customtkinter.CTkEntry(master=frame, placeholder_text="File Location") | |
entry3.pack(pady=12, padx=10) | |
elif name == "pcap": | |
entry5 = customtkinter.CTkEntry(master=frame, placeholder_text="Save Location") | |
entry5.pack(pady=12, padx=10) | |
button = customtkinter.CTkButton(master=frame, text="Run", command=lambda: application( | |
attack=name, | |
entry2=entry2, | |
entry3=entry3, | |
entry_ai=entry_ai, | |
entry5=entry5 | |
)) | |
button.pack(pady=12, padx=10) | |
nmap_button = customtkinter.CTkButton(navigation_frame, text="Nmap", command=lambda: select_frame_by_name("nmap")) | |
nmap_button.pack(side="top", pady=5, anchor="center") | |
dns_button = customtkinter.CTkButton(navigation_frame, text="DNS", command=lambda: select_frame_by_name("dns")) | |
dns_button.pack(side="top", pady=5, anchor="center") | |
sub_button = customtkinter.CTkButton(navigation_frame, text="Subdomain", command=lambda: select_frame_by_name("sub")) | |
sub_button.pack(side="top", pady=5, anchor="center") | |
jwt_button = customtkinter.CTkButton(navigation_frame, text="JWT Analysis", command=lambda: select_frame_by_name("jwt")) | |
jwt_button.pack(side="top", pady=5, anchor="center") | |
pcap_button = customtkinter.CTkButton(navigation_frame, text="Pcap Analysis", command=lambda: select_frame_by_name("pcap")) | |
pcap_button.pack(side="top", pady=5, anchor="center") | |
geo_button = customtkinter.CTkButton(navigation_frame, text="GeoIP Recon", command=lambda: select_frame_by_name("geo")) | |
geo_button.pack(side="top", pady=5, anchor="center") | |
frame = customtkinter.CTkFrame(master=input_frame) | |
frame.pack(pady=20, padx=20, fill="both", expand=True) | |
label = customtkinter.CTkLabel(master=frame, text="GVA System") | |
label.pack(pady=12, padx=10) | |
entry2 = customtkinter.CTkEntry(master=frame, placeholder_text="Target") | |
entry2.pack(pady=12, padx=10) | |
ai_choices = ["openai", "bard", "llama-api"] | |
entry_ai = customtkinter.CTkComboBox(master=frame, values=ai_choices, state="readonly") | |
entry_ai.set("Select AI Input") | |
entry_ai.pack(pady=12, padx=10) | |
entry3 = customtkinter.CTkEntry(master=frame, placeholder_text="Profile (Only Nmap)") | |
entry3.pack(pady=12, padx=10) | |
button = customtkinter.CTkButton(master=frame, text="Run", command=lambda: application("default", entry2, entry3, entry_ai)) | |
button.pack(pady=12, padx=10) | |
output_textbox = customtkinter.CTkTextbox(master=output_frame, height=800, width=900, corner_radius=0) | |
output_textbox.pack(pady=12, padx=10) | |
root.mainloop() | |