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.
- {bhp_pro-1.2.8.dist-info → bhp_pro-1.3.0.dist-info}/METADATA +1 -1
- bhp_pro-1.3.0.dist-info/RECORD +6 -0
- bhp_pro.py +126 -12
- bhp_pro-1.2.8.dist-info/RECORD +0 -6
- {bhp_pro-1.2.8.dist-info → bhp_pro-1.3.0.dist-info}/WHEEL +0 -0
- {bhp_pro-1.2.8.dist-info → bhp_pro-1.3.0.dist-info}/entry_points.txt +0 -0
- {bhp_pro-1.2.8.dist-info → bhp_pro-1.3.0.dist-info}/top_level.txt +0 -0
|
@@ -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
|
-
|
|
472
|
-
|
|
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.
|
|
16948
|
-
ORANGE + "All rights reserved 2022-
|
|
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,
|
bhp_pro-1.2.8.dist-info/RECORD
DELETED
|
@@ -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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|