repo_description: Uses ChatGPT API, Bard API, and Llama2, Python-Nmap, DNS Recon, PCAP and JWT recon modules and uses the GPT3 model to create vulnerability reports based on Nmap scan data, and DNS scan information. It can also perform subdomain enumeration to a great extent
repo_topics: ai-vulnerability-analysis bard-ai bard-api chatgpt chatgpt-api dns dns-enumeration dns-enumeration-ai dns-record hacking-tools information-gathering llama2 nmap nmap-api nmap-vulnerability nmap-vulnerability-analysis-ai openai runpod terminal vulnerability-analysis
code: 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()
  