@echo off
setlocal EnableDelayedExpansion
title Firewall Auto-Blocker Pro (Adobe Edition)

:: 1. Verificación de permisos de administrador
net session >nul 2>&1
if %ERRORLEVEL% neq 0 (
    echo [ERROR] Este script modifica el Firewall y servicios del sistema. 
    echo Ejecutalo como Administrador.
    echo.
    pause
    exit /b
)

echo ====================================================
echo 1. DETENIENDO PROCESOS Y SERVICIOS DE ADOBE
echo ====================================================
echo.

:: Forzar el cierre de procesos activos de validación
taskkill /f /im AdobeUpdateService.exe 2>nul
taskkill /f /im AdobeGenuineClientService.exe 2>nul
taskkill /f /im AGCInvokerUtility.exe 2>nul
taskkill /f /im "Adobe Desktop Service.exe" 2>nul
taskkill /f /im CCXProcess.exe 2>nul
taskkill /f /im AdobeNotificationClient.exe 2>nul

echo Deteniendo y eliminando servicios residuales...
sc config AdobeUpdateService start= disabled >nul 2>&1
sc stop AdobeUpdateService >nul 2>&1
sc delete AdobeUpdateService >nul 2>&1

sc config AGSService start= disabled >nul 2>&1
sc stop AGSService >nul 2>&1
sc delete AGSService >nul 2>&1

echo.
echo ====================================================
echo 2. PURGANDO ARCHIVOS Y REGISTROS DEL CARTEL (ANTI-GENUINE)
echo ====================================================
echo.

:: Carpetas globales del servicio Genuine
if exist "C:\Program Files (x86)\Common Files\Adobe\AdobeGCClient" (
    echo Eliminando: AdobeGCClient ^(x86^)
    rmdir /s /q "C:\Program Files (x86)\Common Files\Adobe\AdobeGCClient" 2>nul
)
if exist "C:\Program Files\Common Files\Adobe\AdobeGCClient" (
    echo Eliminando: AdobeGCClient ^(x64^)
    rmdir /s /q "C:\Program Files\Common Files\Adobe\AdobeGCClient" 2>nul
)

:: Limpieza en el perfil de cada usuario de Windows (historial de licencias corruptas)
for /f "tokens=*" %%u in ('dir /b /ad "C:\Users"') do (
    if exist "C:\Users\%%u\AppData\Local\Adobe\OOBE" (
        echo Reseteando cache de licencias para usuario: %%u
        rmdir /s /q "C:\Users\%%u\AppData\Local\Adobe\OOBE" 2>nul
    )
    if exist "C:\Users\%%u\AppData\Local\Adobe\AAMUpdater" (
        rmdir /s /q "C:\Users\%%u\AppData\Local\Adobe\AAMUpdater" 2>nul
    )
)

echo.
echo ====================================================
echo 3. ACTUALIZANDO REGLAS DEL FIREWALL (SIN DUPLICADOS)
echo ====================================================
echo.

set "RULENAME=Adobe-Block"

:: Definición de las rutas de escaneo
set "d1=C:\Program Files\Adobe"
set "d2=C:\Program Files (x86)\Adobe"
set "d3=C:\Program Files\Common Files\Adobe"
set "d4=C:\Program Files (x86)\Common Files\Adobe"
set "d5=C:\ProgramData\Adobe"

:: Bucle de escaneo, limpieza previa y creación de reglas
for /L %%i in (1,1,5) do (
    if exist "!d%%i!" (
        echo [Buscando ejecutables en: !d%%i!]
        
        for /f "delims=" %%G in ('dir /b /s "!d%%i!\*.exe" 2^>nul') do (
            echo Configurando regla para: %%~nxG
            
            :: Elimina cualquier regla previa que coincida con este ejecutable para evitar acumular basura
            netsh advfirewall firewall delete rule name="%RULENAME%-%%~nxG-IN" >nul 2>&1
            netsh advfirewall firewall delete rule name="%RULENAME%-%%~nxG-OUT" >nul 2>&1
            
            :: Añade las nuevas reglas limpias
            netsh advfirewall firewall add rule name="%RULENAME%-%%~nxG-IN" dir=in program="%%G" action="block" enable="yes" >nul
            netsh advfirewall firewall add rule name="%RULENAME%-%%~nxG-OUT" dir=out program="%%G" action="block" enable="yes" >nul
        )
        echo.
    ) else (
        echo [OMITIDO] La ruta no existe: !d%%i!
        echo.
    )
)

echo ====================================================
echo SCRIPT EJECUTADO CON EXITO
echo ====================================================
echo Info: Recorda aplicar los cambios en el archivo 'hosts' si persistiera el bloqueo.
echo.
pause