@echo off
setlocal enabledelayedexpansion

:: ============================================================
::  Adobe telemetry/privacy domain block script
::  Blocks ONLY data-reporting domains. Does NOT touch
::  activation/licensing/verification servers.
::
::  Usage:
::    Double-click            = add blocks
::    script.bat /uninstall   = remove entries added by this script
:: ============================================================

:: Require admin privileges.
:: Use "if errorlevel 1" instead of "if %errorlevel% neq 0" to avoid
:: the "level is not recognized" error caused by variable expansion.
net session >nul 2>&1
if errorlevel 1 (
    echo Administrator privileges required. Re-launching elevated...
    set "ARG=%~1"
    if not defined ARG set "ARG="
    powershell -NoProfile -Command ^
        "$p='%~f0'; $a='%ARG%'; Start-Process -FilePath 'powershell.exe' -ArgumentList '-NoProfile -Command ^& { ^& $p $a; pause }' -Verb RunAs"
    echo.
    echo A UAC prompt should appear. Please click ^"Yes^".
    echo If UAC didn't show or was cancelled, right-click this script ^> ^"Run as administrator^".
    pause
    exit /b
)

set "HOSTS=%SystemRoot%\System32\drivers\etc\hosts"
set "TAG=# adobe-tel"

:: --- Data-collection / telemetry domains only ---
:: NOTE: inferred from domain naming. Adobe endpoints change over versions;
:: verify with GlassWire/Wireshark before adding or removing.
:: Removed (activation/licensing/cert): activate* / practivate / lm.licenses /
::   ereg* / wip3 / prod.adobegenuine / crl / ocsp / ts1 / ts2
:: --- Domain categories (grouped for clarity, all domains retained) ---
:: NOTE: inferred from domain naming. Adobe endpoints change over versions;
:: verify with GlassWire/Wireshark before adding or removing.
:: To enable/disable a whole category, just comment out its "set" line.

:: --- Telemetry & analytics 遥测与数据分析 ---
set "CAT_TELEMETRY=metrics.adobe.com stats.adobe.com sstats.adobe.com sc.omtrdc.net adobe.tt.omtrdc.net dpm.demdex.net demdex.net assets.adobedtm.com adobedtm.com cc-api-data.adobe.io hlrcv.stage6.adobe.com hl2rcv.stage6.adobe.com hlrcv.stage.adobe.com hl2rcv.stage.adobe.com gs-els.adobe.com"

:: --- Crash & error reporting  崩溃与异常上报---
set "CAT_CRASH=crs.cr.adobe.com crashreporter.adobe.com"

:: --- Survey & feedback 问卷与反馈---
set "CAT_SURVEY=survey.adobe.com"

:: --- Activation / licensing / genuine check (may affect genuine software) 激活/许可证/正版验证---
set "CAT_LICENSE=lm.licenses.adobe.com activate.adobe.com activate-sea.adobe.com activate-sjc0.adobe.com practivate.adobe.com ereg.adobe.com ereg.wip3.adobe.com adobeereg.com wip3.adobe.com prod.adobegenuine.com data.adobegc.com ts1.adobe.com ts2.adobe.com lcs-cops.adobe.io"

:: --- DNS / certificate revocation (CRL / OCSP) DNS/证书吊销---
set "CAT_CERT=3dns-2.adobe.com 3dns-3.adobe.com adobe-dns-2.adobe.com adobe-dns-3.adobe.com adobe-dns.adobe.com crl.verisign.net ocsp.verisign.net crl.adobe.com"

:: --- Identity & cloud services 身份与云服务---
set "CAT_CLOUD=adobeid-na1.services.adobe.com na1r.services.adobe.com butler.adobe.com cchome.adobe.io ic.adobe.io geo2.adobe.com"

:: Merge all categories into the working list (keep TAG consistent for /uninstall)
set "DOMAINS=%CAT_TELEMETRY% %CAT_CRASH% %CAT_SURVEY% %CAT_LICENSE% %CAT_CERT% %CAT_CLOUD%"

if /i "%~1"=="/uninstall" goto uninstall

echo ============================================
echo   Adobe telemetry domain block (privacy only)
echo ============================================
echo Target: %HOSTS%
echo.

:: Locale-independent timestamp (does not rely on %date% format)
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set "TS=%%i"
set "BAK=%HOSTS%.bak_%TS%"
copy /y "%HOSTS%" "%BAK%" >nul 2>&1
echo Backup: %BAK%
echo.

REM Ensure the hosts file ends with a newline before appending
echo.>>"%HOSTS%"

set /a COUNT=0
set /a SKIP=0

for %%D in (%DOMAINS%) do (
    REM Match whole whitespace-separated fields, not substrings: the line
    REM "127.0.0.1 smetrics.adobe.com" contains the substring "metrics.adobe.com",
    REM so findstr /c: would wrongly report it as present.
    powershell -NoProfile -Command "$d='%%D'; $found=$false; foreach($l in (Get-Content '%HOSTS%' -ErrorAction SilentlyContinue)) { $p=$l -split '\s+'; for($i=1;$i -lt $p.Length;$i++){ if($p[$i] -eq $d){$found=$true;break} } }; if($found){exit 0}else{exit 1}" >nul 2>&1
    if errorlevel 1 (
        >>"%HOSTS%" echo 127.0.0.1 %%D %TAG%
        set /a COUNT+=1
        echo [+] 127.0.0.1 %%D
    ) else (
        set /a SKIP+=1
        echo [.] %%D already present, skipped
    )
)

echo.
echo ============================================
echo   Done: added %COUNT%, skipped %SKIP%
echo ============================================
echo Backup: %BAK%
echo To restore: run  %~nx0 /uninstall  as administrator
echo.
pause
exit /b

:uninstall
echo ============================================
echo   Removing entries added by this script
echo ============================================
echo.

for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set "TS=%%i"
set "BAK=%HOSTS%.bak_%TS%"
copy /y "%HOSTS%" "%BAK%" >nul 2>&1
echo Backup: %BAK%

findstr /v /c:"%TAG%" "%HOSTS%" > "%HOSTS%.tmp"
move /y "%HOSTS%.tmp" "%HOSTS%" >nul
echo Removed all entries tagged %TAG%.
echo.
pause
exit /b
