将应用程序绑定到特定网络接口

将应用程序绑定到特定网络接口

我尝试过 ForceBindIP,但它有一个明显的缺点 - 它不会影响我尝试绑定的应用程序的子项,只会影响应用程序本身。它也不能强制应用程序始终通过指定的接口运行,它必须forcebindip.exe每次都通过指定的接口运行。对于像英雄联盟这样的应用程序来说,这成为一个问题,其中进程树如下所示:

截屏

启动器运行修补程序,修补程序运行客户端等。我只能影响树中所有这些进程的父级,因此实际游戏并不绑定到我想要的界面,这使得整个冒险变得毫无意义。

有没有适用于 Windows 7 的 ForceBindIP 的更现代的替代品?这个网站上有很多与此类似的问题,但它们大多是旧的。也许现在有更好的方法来解决这个问题?

我当前的想法是执行以下操作:

  1. 设置绑定到所需接口的本地 3proxy 服务器。

  2. 通过 Proxifier 或类似配置为通过本地代理运行的软件运行游戏。

我不确定这是否可行,但即使可行,这似乎也是一种次优解决方案。你们有更好的想法吗?

编辑:我的想法没有奏效:(

编辑 2:基本上,我想实现的是,在 VPN 运行时将一些应用程序绑定到常规接口。原因是我大多数时候都需要通过 VPN 连接,但有些应用程序(如游戏)无法通过这种方式正常工作,因为 ping 值较高和其他问题。

答案1

###更新我发现 ForceBindIp 实际上正在向调用的可执行文件传递参数。它只是省略第一个参数。因此我修改了我的脚本来使用ForceBindIp.exe自定义注入器,现在看起来所有异常问题injectory都消失了并且一切正常。

修改后的步骤和脚本如下BindIp.cmd

  1. 照常安装 ForceBindIp

  2. 放在BindIp.cmd驱动器上的任何位置(例如C:\BindIp\BindIp.cmd

BindIp.cmd脚本:

setlocal

:: IP to bind to
set IP=192.168.128.85

:: Common variables
set RegIFEO=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\%~nx1
set Injector=ForceBindIp.exe

:: ForceBindIp swallows first parameter passed to target exe,
:: so we inject dummy parameter just before it
set AllParams=%*
set FirstParam=%1
call set TargetParams=%%AllParams:*%FirstParam%=%FirstParam% Dummy%%

:: Delete debugger for the target exe in registry,
:: or we'll end in an endless loop of the batch files
reg delete "%RegIFEO%%" /v Debugger /f

:: Start target exe via ForceBindIp
%Injector% %IP% %TargetParams%

:: Restore this script as debugger for the target exe in registry
reg add "%RegIFEO%" /v Debugger /t REG_SZ /d "%~dpnx0" /f

:: Debug, uncomment if needed
rem pause

endlocal

然后按照下面的步骤 2 至 6 进行操作。


###简介 [ForceBindIp][0] 无法自动将 `BindIp.dll` 注入子进程,也不会向调用的可执行文件传递参数。但我能够通过使用 [注册表中的图像文件执行选项][1]、批处理脚本和 [第三方 dll 注入器][2] 来规避这个问题。详情如下。

###理论 要使用BindIp.dll它们,ForceBindIp.exe我们首先需要了解它们如何通信(ForceBindIp.exe必须以某种方式将 IP 地址传递给 dll)。

我用过不含 IDA并发现,当它注入并在目标进程中执行时,会创建包含 IP 地址的ForceBindIp.exe名称的环境变量,并从该变量中读取 IP 地址。FORCEDIPBindIp.dll

为了检测目标应用程序的启动,我们可以Debugger在注册表中的图像文件执行选项中为该可执行文件添加一个键:

Kernel32!CreateProcess 在调用时不使用 DEBUG_PROCESS 或 DEBUG_ONLY_THIS_PROCESS 创建标志,会检查注册表以查看正在启动的可执行文件上是否设置了 IFEO。如果是,则只需将调试器路径添加到可执行文件名称的前面,从而有效地让可执行文件在调试器下启动。

在我们的例子中,“调试器”将是一个批处理脚本,它将设置FORCEDIP变量并启动注射dll 注入器。注射剂然后将启动进程,传递命令行参数并注入BindIp.dll

###实践

  1. 在某处创建文件夹(C:\BindIp例如)并将这三个文件放入其中:

BindIp.cmd脚本:

setlocal

:: IP to bind to. This env.var is used by BindIp.dll
set FORCEDIP=192.168.1.23

:: Common variables
set RegIFEO=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\%~nx1
set Injector=%~dp0injectory.x86.exe
set BindIpDll=%~dp0BindIp.dll

:: Extract target's parameters, if any
set AllParams=%*
set FirstParam=%1
call set TargetParams=%%AllParams:*%FirstParam% =%%

:: Delete debugger for the target exe in registry,
:: or we'll end in an endless loop of the batch files
reg delete "%RegIFEO%%" /v Debugger /f

:: Start target exe and inject BindIp.dll
if not [%2] == [] (
    :: If there were parameters for target exe, pass them on
    "%Injector%" --launch %1 --inject "%BindIpDll%" --args "%TargetParams%"
) else (
    :: No parameters were specified
    "%Injector%" --launch %1 --inject "%BindIpDll%"
)

:: Restore this script as debugger for the target exe in registry
reg add "%RegIFEO%" /v Debugger /t REG_SZ /d "%~dpnx0" /f

:: Debug, uncomment if needed
rem pause

endlocal
  1. LolClient.exe为目标可执行文件创建注册表项(例如)HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
  2. 向该键添加字符串值:
  • 姓名:Debugger
  • 价值:C:\BindIp\BindIp.cmd
  1. 授予Users此密钥的完整权限(脚本必须在每次启动时对其进行修改)。它应该如下所示:IFEO 注册表项

  2. 设置所需的 IP 地址BindIp.cmd

  3. 对每个想要绑定的可执行文件重复步骤 3 和 4(rad_user_kernel.exe、、LolLauncher.exe等等LolPatcher.exe)。

现在,每次当您启动具有相应注册表项的可执行文件时,BindIp.cmd脚本都会启动并将该程序绑定到所需的 IP 地址。

###结论

我已经在运行 Windows 8.1 x64 的笔记本电脑上进行了测试,并能够成功绑定各种程序(人工智能管理平台 2贝尔斯IRCOpera 12.4) 使用此技术连接到以太网或 WiFi 适配器。不幸的是,BindIp.dll它是 32 位的,因此它不适用于 64 位进程。

答案2

我发现隐藏我的屁股!VPN 客户端有安全 IP 绑定允许将应用程序绑定到 VPN 接口的功能:

安全 IP 绑定可让您强制计算机上的选定应用程序仅在连接到我们的 VPN 服务器后才运行。这可确保选定的应用程序仅在安全加密连接后运行。如果您在未连接到我们的 VPN 的情况下打开选定的应用程序,它们将无法访问互联网。

我看过了,它基于一个习俗分层服务提供商 (LSP)dll 和 COM 接口来控制它。并且无需安装 HideMyAss 的 VPN 客户端即可(滥用)它。

安装 HideMyAss 的安全 IP 绑定

  1. 获取最新的 Windows 安装程序:https://www.hidemyass.com/downloads
  2. 使用 7-zip 解压。忽略有关文件名称相同的警告,您可以安全地覆盖这些文件。
  3. 进入bin解压后的安装程序文件夹
  4. 将这三个文件复制到磁盘上的文件夹中(C:\HMA_Bind

    • ForceInterfaceCOM.dll
    • ForceInterfaceLSP.dll
    • 安装LSP
  5. Install.cmdUninstall.cmd放到此文件夹中

安装.cmd

%~dp0InstallLSP.exe -i -a -n "HMA_LSP" -d %~dp0ForceInterfaceLSP.dll
regsvr32 /s %~dp0ForceInterfaceCOM.dll

卸载程序

%~dp0InstallLSP.exe -f
regsvr32 /u /s %~dp0ForceInterfaceCOM.dll
  1. 跑步Install.cmd 作为管理员。要验证安装是否成功,您可以使用自动运行

AUtoruns 中的 Winsock 提供程序

  1. 要控制安全 IP 绑定,您必须调用 COM 接口方法。这可以在 PowerShell 中完成。如果您使用的是 x64 操作系统,请确保启动Windows PowerShell ISE (x86)Windows PowerShell (x86),因为 COM 组件是 32 位的。

首先,您必须创建新的安全 IP 绑定对象:

# Create new Secure IP Bind COM object
$HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop

然后你就可以调用它的方法:

# Add bound application
# Not sure what second boolean argument does
$HmaFbi.AddApplicationHandled('firefox.exe', $true)

# Delete bound application
$HmaFbi.RemoveApplicationHandled('firefox.exe')

# Save applications to registry (applies bindings)
# Setting are saved to: HKEY_CURRENT_USER\Software\ForceInterfaceCOM
$HmaFbi.SaveToRegistry()

# List all bound applications
0..($HmaFbi.GetApplicationHandledCount() - 1) | ForEach-Object {$HmaFbi.GetApplicationName($_)}

# Set IP to bind to
$HmaFbi.SetInterfaceIP('192.168.1.23')

# Get stored IP
$HmaFbi.GetInterfaceIP()

# Enable binding
$HmaFbi.SetEnabled($true)

# Disable binding
$HmaFbi.SetEnabled($false)

# Show binding status
$HmaFbi.GetEnabled()

卸载 HideMyAss 的安全 IP 绑定

  1. 跑步Uninstall.cmd 作为管理员,使用 Autoruns 验证卸载是否成功。

例子:

请注意,每个 PowerShell 会话只需创建一次安全 IP 绑定 COM 对象。下面的示例假设您在新的 PowerShell 会话中执行它们,因此它们始终创建新的 COM 对象。

  • 设置绑定的IP,添加firefox到绑定应用,启用绑定。

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Set IP to bind to
    $HmaFbi.SetInterfaceIP('192.168.1.23')
    
    # Add bound application
    # Not sure what second boolean argument does
    $HmaFbi.AddApplicationHandled('firefox.exe', $true)
    
    # Save applications to registry (applies bindings)
    # Setting are saved to: HKEY_CURRENT_USER\Software\ForceInterfaceCOM
    $HmaFbi.SaveToRegistry()
    
    # Enable binding
    $HmaFbi.SetEnabled($true)
    
  • 全局启用IP绑定:

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Enable binding
    $HmaFbi.SetEnabled($true)
    
  • 全局禁用IP绑定:

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Disable binding
    $HmaFbi.SetEnabled($false)
    
  • 从列表中删除应用程序(停止该应用程序的绑定):

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Delete bound application
    $HmaFbi.RemoveApplicationHandled('firefox.exe')
    
    # Save applications to registry (applies bindings)
    # Setting are saved to: HKEY_CURRENT_USER\Software\ForceInterfaceCOM
    $HmaFbi.SaveToRegistry()
    

笔记

由于安全 IP 绑定是作为自定义分层服务提供商 (LSP)dll,则适用以下限制:

自 Windows Server 2012 以来,LSP 已被弃用。包含 LSP 的系统将无法通过 Windows 徽标检查。使用网络的 Windows 8 风格“metro”应用将自动绕过所有 LSP。

我已经用各种应用程序测试了这种方法,结果好坏参半:32 位应用程序可以运行,但 64 位不行,也就是说,我可以绑定 64 位 Explorer(可能是因为它的选项卡进程默认是 32 位的),但不能绑定 64 位的水狐浏览器或其他 64 位应用程序。

答案3

我想到两种解决这个问题的方法:

  1. 创建一个用于运行游戏的虚拟机,该虚拟机仅使用一个网络适配器。

  2. 如果您知道游戏使用的 IP 地址范围,请构建一个网络路由,将该范围指向特定适配器的网关。

一旦我知道您的偏好,我就可以添加更多信息。例如,在第 1 点中您首选的虚拟机产品。

答案4

可以使用 forcebindip.exe,但是您必须编写一个辅助应用程序(没有其他选择)。

  1. 应用程序保存从其命令行收到的参数
  2. 该应用程序的名称为 XXXX.EXE
  3. 应用程序加载包含 ie 的 XXX.ini

    app_to_run = C:\path1\app_to_run.exe
    ForceBindIP = C:\path2\ForceBindIP.exe 
    IP          = 192.168.10.21
    
  4. 应用程序运行

    C:\path1\app_to_run.exe 192.168.10.21 C:\path1\app_to_run.exe Saved_Command_line

  5. 申请结束

问题:ForcebindIP 不会将参数传递给被调用的程序。如果您需要将参数传递给 app_to_run.exe,则需要一种更先进的方法,其中 XXX.exe 创建一个批处理文件,其中包括 app_to_run.exe 和传递的参数,然后在第 4 点调用此批处理而不是 app_to_run.exe。

您还可以查看一些包装 ForcebindIP 的 GUI 应用程序。其中一些应用程序可以与多个应用程序一起使用,但它们不能满足您的需要。

https://www.raymond.cc/blog/bind-windows-application-to-specific-network-adapter-with-forcebindip/

相关内容