@echo off
chcp 65001 >nul 2>nul
title 应用网络拦截工具
rem ===================================================
rem   把任意 .exe 拖到本脚本上，即可用 Windows 防火墙
rem   禁止该程序访问网络（同时阻止入站和出站连接）。
rem   用法：直接把程序图标拖到本 .bat 上松开即可。
rem ===================================================

rem ---------- 1. 读取目标程序路径 ----------
set "TARGET=%~1"
if defined TARGET goto :main

rem 没有参数（提权后的第二次运行）：从临时文件读取路径
if not exist "%temp%\_bf_target.tmp" goto :usage
for /f "usebackq delims=" %%L in ("%temp%\_bf_target.tmp") do set "TARGET=%%L"
del "%temp%\_bf_target.tmp" >nul 2>nul
goto :main

:main
if "%TARGET%"=="" goto :usage

rem ---------- 2. 检查管理员权限 ----------
net session >nul 2>nul
if %errorlevel%==0 goto :admin

rem 非管理员：先把目标路径存入临时文件，再提权重启自身
> "%temp%\_bf_target.tmp" echo %TARGET%
> "%temp%\_bf_elev.vbs" echo Set UAC = CreateObject^("Shell.Application"^)
>> "%temp%\_bf_elev.vbs" echo UAC.ShellExecute "%~f0", "", "", "runas", 1
cscript //nologo "%temp%\_bf_elev.vbs" >nul 2>nul
del "%temp%\_bf_elev.vbs" >nul 2>nul
exit /b

:admin
rem ---------- 3. 添加防火墙阻止规则 ----------
for %%F in ("%TARGET%") do set "APPNAME=%%~nF"

echo.
echo   正在阻止 [ %APPNAME% ] 联网...
echo   程序路径: %TARGET%
echo.

rem 先删除同名旧规则，保证可重复执行
netsh advfirewall firewall delete rule name="Block %APPNAME% [Inbound]"  >nul 2>nul
netsh advfirewall firewall delete rule name="Block %APPNAME% [Outbound]" >nul 2>nul

set "ALLOK=YES"

netsh advfirewall firewall add rule name="Block %APPNAME% [Inbound]"  dir=in  action=block program="%TARGET%" enable=yes >nul 2>nul
if errorlevel 1 (
    echo   [入站] 失败
    set "ALLOK=NO"
) else (
    echo   [入站] 成功
)

netsh advfirewall firewall add rule name="Block %APPNAME% [Outbound]" dir=out action=block program="%TARGET%" enable=yes >nul 2>nul
if errorlevel 1 (
    echo   [出站] 失败
    set "ALLOK=NO"
) else (
    echo   [出站] 成功
)

echo.
if "%ALLOK%"=="YES" (
    echo   [完成] %APPNAME% 已被禁止访问网络。
) else (
    echo   [失败] 部分规则添加失败，请检查程序路径是否正确。
)
echo.
echo   恢复联网：在「Windows Defender 防火墙」高级安全
echo   设置中删除名为 Block %APPNAME% 的规则即可。
echo.
pause
exit /b

:usage
echo.
echo   ============================================
echo     应用网络拦截工具
echo   ============================================
echo.
echo     使用方法：把应用程序 (.exe) 直接拖到本
echo     脚本图标上松开，即可禁止它访问网络。
echo.
echo     命令行用法：%~nx0 "C:\路径\程序.exe"
echo.
pause
exit /b
