From 61a51b378ee40834309f816f1438c6652deae980 Mon Sep 17 00:00:00 2001 From: unixaxwell Date: Fri, 27 Feb 2026 13:44:19 +0000 Subject: [PATCH] Upload files to "/" --- ...tes-ip-firewall-filter-export-optimized.py | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 malwarebytes-ip-firewall-filter-export-optimized.py diff --git a/malwarebytes-ip-firewall-filter-export-optimized.py b/malwarebytes-ip-firewall-filter-export-optimized.py new file mode 100644 index 0000000..62f4657 --- /dev/null +++ b/malwarebytes-ip-firewall-filter-export-optimized.py @@ -0,0 +1,151 @@ +import json +import subprocess +from pathlib import Path +from datetime import datetime + +# --- CONFIG --- +MWAC_DIR = Path(r"C:\ProgramData\Malwarebytes\MBAMService\MwacDetections") +RULE_NAME_PREFIX = "MBAM_AutoBlock_" +FIREWALL_DIRECTION = "Inbound" +FIREWALL_PROFILE = "Any" +REPORT_FILE = Path("mbam_block_report.txt") +# --------------- + + +def is_hex_header(line: str) -> bool: + line = line.strip() + return len(line) == 64 and all(c in "0123456789ABCDEFabcdef" for c in line) + + +def load_ips_from_folder(folder: Path) -> set[str]: + ips = set() + + files = list(folder.glob("*.json")) + print(f"[*] Found {len(files)} JSON files") + + for file in files: + try: + raw = file.read_text(encoding="utf-8", errors="ignore") + except Exception: + continue + + lines = raw.splitlines() + + # Remove the hash header if present + if lines and is_hex_header(lines[0]): + json_text = "\n".join(lines[1:]) + else: + json_text = raw + + try: + data = json.loads(json_text) + except Exception: + continue + + threats = data.get("threats", []) + for t in threats: + main = t.get("mainTrace", {}) + website = main.get("websiteData", {}) + ip = website.get("ip") + if ip: + ips.add(ip) + + return ips + + +def load_existing_firewall_ips() -> set[str]: + """ + Load ALL firewall rules once and extract all RemoteAddress IPs. + """ + print("[*] Loading existing firewall rules...") + + cmd = [ + "powershell", + "-Command", + ( + "Get-NetFirewallRule | " + "Get-NetFirewallAddressFilter | " + "Select-Object -ExpandProperty RemoteAddress" + ), + ] + + result = subprocess.run(cmd, capture_output=True, text=True) + + if result.returncode != 0: + print("[!] Failed to load firewall rules") + return set() + + raw_addresses = result.stdout.splitlines() + + # Normalize and filter valid IPv4 addresses + ips = {addr.strip() for addr in raw_addresses if "." in addr} + + print(f"[*] Found {len(ips)} existing firewall IP entries") + return ips + + +def add_firewall_rule(ip: str): + rule_name = f"{RULE_NAME_PREFIX}{ip.replace('.', '_')}" + cmd = [ + "powershell", + "-Command", + ( + "New-NetFirewallRule " + f"-DisplayName '{rule_name}' " + f"-Direction {FIREWALL_DIRECTION} " + "-Action Block " + f"-RemoteAddress {ip} " + f"-Profile {FIREWALL_PROFILE}" + ), + ] + + print(f"[+] Adding firewall block rule for {ip}") + subprocess.run(cmd, capture_output=True, text=True) + + +def export_report(all_ips: set[str], new_rules: list[str]): + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + with REPORT_FILE.open("w", encoding="utf-8") as f: + f.write("=== Malwarebytes → Windows Firewall Block Report ===\n") + f.write(f"Generated: {timestamp}\n\n") + f.write(f"Total unique IPs detected: {len(all_ips)}\n") + f.write(f"New firewall rules added: {len(new_rules)}\n\n") + + if new_rules: + f.write("Newly added rules:\n") + for ip in new_rules: + f.write(f" - {ip}\n") + f.write("\n") + + f.write("All detected IPs:\n") + for ip in sorted(all_ips): + f.write(f" - {ip}\n") + + print(f"\n[*] Report saved to: {REPORT_FILE.resolve()}") + + +def main(): + print("[*] Scanning Malwarebytes MwacDetections folder...") + ips = load_ips_from_folder(MWAC_DIR) + print(f"[*] Extracted {len(ips)} IPs from logs") + + existing_ips = load_existing_firewall_ips() + + new_rules = [] + + for ip in sorted(ips): + if ip in existing_ips: + print(f"[-] Already blocked: {ip}") + else: + add_firewall_rule(ip) + new_rules.append(ip) + + export_report(ips, new_rules) + + print("[*] Done.") + input("\nPress Enter to exit...") + + +if __name__ == "__main__": + main()