bhp-pro 1.2.8__py3-none-any.whl → 1.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bhp_pro
3
- Version: 1.2.8
3
+ Version: 1.3.0
4
4
  Summary: Web Enumeration Tool
5
5
  Author: ssskingsss12
6
6
  Author-email: smalls3000i@gmail.com
@@ -0,0 +1,6 @@
1
+ bhp_pro.py,sha256=WJ2J94cH1-qKf3AynRr8Q4t0GhzNxs2VunaQip0T7zA,748620
2
+ bhp_pro-1.3.0.dist-info/METADATA,sha256=t7JildGhotdLKQG8WAcZWV-rFl9R6FhukOP2UhCNEMs,600
3
+ bhp_pro-1.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
4
+ bhp_pro-1.3.0.dist-info/entry_points.txt,sha256=Yn3HpraGX3lXX4FPq3Gm-lHh3SwQA-5rtgPWNWMFXkw,41
5
+ bhp_pro-1.3.0.dist-info/top_level.txt,sha256=1xjbIaVM77UJz9Tsi1JjILgE0YDG7iLhY6KSMNEi9zM,8
6
+ bhp_pro-1.3.0.dist-info/RECORD,,
bhp_pro.py CHANGED
@@ -359,6 +359,7 @@ import os
359
359
  import sys
360
360
  import subprocess
361
361
  import time
362
+ import shutil # Added missing import
362
363
 
363
364
  REQUIRED_MODULES = [
364
365
  'multithreading', 'loguru', 'tqdm', 'bs4', 'pyfiglet', 'requests',
@@ -389,6 +390,17 @@ def install_python_module(module_name):
389
390
  ], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
390
391
  return True
391
392
  except subprocess.CalledProcessError:
393
+ # Fallback for cryptography
394
+ if module_name == 'cryptography':
395
+ try:
396
+ print(f" {YELLOW}Retrying with cryptography==41.0.7...{RESET}", end='', flush=True)
397
+ subprocess.check_call([
398
+ sys.executable, "-m", "pip", "install",
399
+ "cryptography==41.0.7", "--break-system-packages"
400
+ ], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
401
+ return True
402
+ except subprocess.CalledProcessError:
403
+ return False
392
404
  return False
393
405
 
394
406
  def install_system_package(package_name, package_manager):
@@ -430,8 +442,6 @@ def clear_tldextract_cache():
430
442
  print(f"Cache directory not found: {cache_path}")
431
443
  except Exception as e:
432
444
  print(f"Error removing cache: {e}")
433
- clear_tldextract_cache()
434
- clear_screen()
435
445
 
436
446
  def install_dependencies():
437
447
  clear_screen()
@@ -466,31 +476,45 @@ def install_dependencies():
466
476
 
467
477
  print(f"\n{CYAN}Installing Python modules...{RESET}")
468
478
  for i, module in enumerate(REQUIRED_MODULES, 1):
469
- simple_progress(i, len(REQUIRED_MODULES), {module})
479
+ simple_progress(i, len(REQUIRED_MODULES), f"{module}") # Fixed f-string
470
480
  try:
471
- __import__(module)
472
- print(f" {YELLOW}- Already installed: {module}{RESET}")
481
+ # Special handling for bugscan-x
482
+ if module == 'bugscan-x':
483
+ try:
484
+ __import__('bugscan_x') # Try with underscore
485
+ print(f" {YELLOW}- Already installed: {module}{RESET}")
486
+ except ImportError:
487
+ raise ImportError() # Force installation
488
+ else:
489
+ __import__(module)
490
+ print(f" {YELLOW}- Already installed: {module}{RESET}")
473
491
  except ImportError:
474
492
  print(f" {CYAN}Installing: {module}{RESET}", end='', flush=True)
475
493
  success = install_python_module(module)
476
494
  print(f" {GREEN if success else RED}{'✓' if success else '✗'}{RESET}")
477
495
 
478
-
479
496
  print(f"\n\n{GREEN}✅ Installation complete!{RESET}\n")
480
497
  time.sleep(1)
481
498
  clear_screen()
482
499
  print(f"{CYAN}Launching BUGHUNTERS PRO...{RESET}")
483
500
  time.sleep(1)
484
- install_dependencies()
485
-
486
501
 
487
502
  def setup_ctrlc_handler(back_function):
488
503
  """Sets up Ctrl+C handler to call the specified back function"""
504
+ import signal
505
+
489
506
  def handler(signum, frame):
490
507
  print("\nReturning to previous menu...")
491
508
  back_function()
509
+
510
+ signal.signal(signal.SIGINT, handler)
511
+ return handler
512
+
513
+
514
+ clear_tldextract_cache()
515
+ clear_screen()
516
+ install_dependencies()
492
517
 
493
- handler(signum, frame)
494
518
  #============================= Imports ========================#
495
519
 
496
520
  import argparse
@@ -16848,6 +16872,94 @@ def menu3():
16848
16872
 
16849
16873
  mainsee()
16850
16874
 
16875
+ #===SUBDOmain TAKEOVER===#
16876
+ def access_control():
16877
+
16878
+ generate_ascii_banner("ACCESS", "CONTROL")
16879
+ THREAD_COUNT = 100
16880
+
16881
+ LOCK = threading.Lock()
16882
+ user_input = input("Enter a domain or .txt file: ").strip()
16883
+ OUTPUT_FILE = input("Enter output file name (default is x_requested_with_results.txt): ").strip() or "x_requested_with_results.txt"
16884
+ def check_domain(domain, progress):
16885
+ preflight_headers = {
16886
+ 'Origin': 'https://yahoo.com/',
16887
+ 'Access-Control-Request-Method': 'GET',
16888
+ 'Access-Control-Request-Headers': 'X-Requested-With, X-Online-Host, X-Forwarded-For',
16889
+ 'User-Agent': 'Mozilla/5.0'
16890
+ }
16891
+
16892
+ for protocol in ['http://', 'https://']:
16893
+ url = protocol + domain
16894
+ try:
16895
+ response = requests.options(url, headers=preflight_headers, timeout=5)
16896
+ status = response.status_code
16897
+ allowed_headers = response.headers.get('Access-Control-Allow-Headers', '').lower()
16898
+
16899
+ allowed = []
16900
+ if 'x-requested-with' in allowed_headers:
16901
+ allowed.append('X-Requested-With')
16902
+ if 'x-online-host' in allowed_headers:
16903
+ allowed.append('X-Online-Host')
16904
+ if 'x-forwarded-for' in allowed_headers:
16905
+ allowed.append('X-Forwarded-For')
16906
+
16907
+ if allowed:
16908
+ server = response.headers.get('Server', 'Unknown')
16909
+ print(f"✅ {url} - ALLOWS: {', '.join(allowed)} | Status: {status}")
16910
+ with LOCK:
16911
+ with open(OUTPUT_FILE, "a") as f:
16912
+ f.write(f"{url} | Status: {status} | Server: {server} | Allowed Headers: {', '.join(allowed)}\n")
16913
+ else:
16914
+ print(f"⚠️ {url} - None of the desired X-* headers allowed.")
16915
+
16916
+ except requests.exceptions.RequestException as e:
16917
+ print(f"❌ {url} - Request failed: {e}")
16918
+ finally:
16919
+ with LOCK:
16920
+ progress.update(1)
16921
+
16922
+
16923
+ def worker(domain_queue, progress):
16924
+ while not domain_queue.empty():
16925
+ domain = domain_queue.get()
16926
+ check_domain(domain, progress)
16927
+ domain_queue.task_done()
16928
+
16929
+ def access_main():
16930
+
16931
+
16932
+ if os.path.isfile(user_input) and user_input.endswith('.txt'):
16933
+ with open(user_input, 'r') as file:
16934
+ domains = [line.strip() for line in file if line.strip()]
16935
+ else:
16936
+ domains = [user_input]
16937
+
16938
+ if os.path.exists(OUTPUT_FILE):
16939
+ os.remove(OUTPUT_FILE)
16940
+
16941
+ domain_queue = Queue()
16942
+ for domain in domains:
16943
+ domain_queue.put(domain)
16944
+
16945
+ progress = tqdm(total=len(domains) * 2, desc="Checking", ncols=80)
16946
+
16947
+ threads = []
16948
+ for _ in range(THREAD_COUNT):
16949
+ t = threading.Thread(target=worker, args=(domain_queue, progress))
16950
+ t.start()
16951
+ threads.append(t)
16952
+
16953
+ for t in threads:
16954
+ t.join()
16955
+
16956
+ progress.close()
16957
+ print(f"\n✅ Finished checking. Results saved to {OUTPUT_FILE}")
16958
+
16959
+
16960
+ access_main()
16961
+
16962
+
16851
16963
  def x_menu():
16852
16964
 
16853
16965
  def return_to_menu():
@@ -16877,6 +16989,7 @@ def menu3():
16877
16989
  "3. INFO",
16878
16990
  "4. Wif Abomination",
16879
16991
  "5. KPROXY_SCANNER" ,
16992
+ "6. ACCESS CONTROL" ,
16880
16993
 
16881
16994
  ]
16882
16995
 
@@ -16901,7 +17014,8 @@ def menu3():
16901
17014
  "2": ipcam,
16902
17015
  "3": info,
16903
17016
  "4": wifi_deauth,
16904
- "5": prox
17017
+ "5": prox,
17018
+ "6": access_control,
16905
17019
 
16906
17020
 
16907
17021
  }
@@ -16944,8 +17058,8 @@ def banner():
16944
17058
  MAGENTA + "██╔═══╝ ██╔══██╗██║ ██║" + LIME + "user should understand that useage of this script may be" + ENDC,
16945
17059
  MAGENTA + "██║ ██║ ██║╚██████╔╝" + LIME + "concidered an attack on a data network, and may violate terms" + ENDC,
16946
17060
  MAGENTA + "╚═╝ ╚═╝ ╚═╝ ╚═════╝" + LIME + "of service, use on your own network or get permission first" + ENDC,
16947
- PURPLE + "script_version@ 1.2.8 ®" + ENDC,
16948
- ORANGE + "All rights reserved 2022-2025 ♛: ®" + ENDC,
17061
+ PURPLE + "script_version@ 1.3.0 ®" + ENDC,
17062
+ ORANGE + "All rights reserved 2022-2026 ♛: ®" + ENDC,
16949
17063
  MAGENTA + "In Collaboration whit Ayan Rajpoot ® " + ENDC,
16950
17064
  BLUE + "Support: https://t.me/BugScanX 💬" + ENDC,
16951
17065
  YELLOW + "Programmed by King https://t.me/ssskingsss ☏: " + YELLOW + "®" + ENDC,
@@ -1,6 +0,0 @@
1
- bhp_pro.py,sha256=NFRfBKMWZUHVGgNBjItzouhWYXWniIzh7Ewd6hp9E_M,743966
2
- bhp_pro-1.2.8.dist-info/METADATA,sha256=SLojzdE6JqUql4KhkYRKQy1sPNGj_u32RNTU8s2PVs4,600
3
- bhp_pro-1.2.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
4
- bhp_pro-1.2.8.dist-info/entry_points.txt,sha256=Yn3HpraGX3lXX4FPq3Gm-lHh3SwQA-5rtgPWNWMFXkw,41
5
- bhp_pro-1.2.8.dist-info/top_level.txt,sha256=1xjbIaVM77UJz9Tsi1JjILgE0YDG7iLhY6KSMNEi9zM,8
6
- bhp_pro-1.2.8.dist-info/RECORD,,