我尝试过 ForceBindIP,但它有一个明显的缺点 - 它不会影响我尝试绑定的应用程序的子项,只会影响应用程序本身。它也不能强制应用程序始终通过指定的接口运行,它必须forcebindip.exe
每次都通过指定的接口运行。对于像英雄联盟这样的应用程序来说,这成为一个问题,其中进程树如下所示:
启动器运行修补程序,修补程序运行客户端等。我只能影响树中所有这些进程的父级,因此实际游戏并不绑定到我想要的界面,这使得整个冒险变得毫无意义。
有没有适用于 Windows 7 的 ForceBindIP 的更现代的替代品?这个网站上有很多与此类似的问题,但它们大多是旧的。也许现在有更好的方法来解决这个问题?
我当前的想法是执行以下操作:
设置绑定到所需接口的本地 3proxy 服务器。
通过 Proxifier 或类似配置为通过本地代理运行的软件运行游戏。
我不确定这是否可行,但即使可行,这似乎也是一种次优解决方案。你们有更好的想法吗?
编辑:我的想法没有奏效:(
编辑 2:基本上,我想实现的是,在 VPN 运行时将一些应用程序绑定到常规接口。原因是我大多数时候都需要通过 VPN 连接,但有些应用程序(如游戏)无法通过这种方式正常工作,因为 ping 值较高和其他问题。
答案1
###更新我发现 ForceBindIp 实际上正在向调用的可执行文件传递参数。它只是省略第一个参数。因此我修改了我的脚本来使用ForceBindIp.exe
自定义注入器,现在看起来所有异常问题injectory
都消失了并且一切正常。
修改后的步骤和脚本如下BindIp.cmd
:
照常安装 ForceBindIp
放在
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` 注入子进程,
###理论 要使用BindIp.dll
它们,ForceBindIp.exe
我们首先需要了解它们如何通信(ForceBindIp.exe
必须以某种方式将 IP 地址传递给 dll)。
我用过不含 IDA并发现,当它注入并在目标进程中执行时,会创建包含 IP 地址的ForceBindIp.exe
名称的环境变量,并从该变量中读取 IP 地址。FORCEDIP
BindIp.dll
为了检测目标应用程序的启动,我们可以Debugger
在注册表中的图像文件执行选项中为该可执行文件添加一个键:
Kernel32!CreateProcess 在调用时不使用 DEBUG_PROCESS 或 DEBUG_ONLY_THIS_PROCESS 创建标志,会检查注册表以查看正在启动的可执行文件上是否设置了 IFEO。如果是,则只需将调试器路径添加到可执行文件名称的前面,从而有效地让可执行文件在调试器下启动。
在我们的例子中,“调试器”将是一个批处理脚本,它将设置FORCEDIP
变量并启动注射dll 注入器。注射剂然后将启动进程,传递命令行参数并注入BindIp.dll
。
###实践
- 在某处创建文件夹(
C:\BindIp
例如)并将这三个文件放入其中:
BindIp.dll
- 注射剂.x86
BindIp.cmd
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
LolClient.exe
为目标可执行文件创建注册表项(例如)HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
- 向该键添加字符串值:
- 姓名:
Debugger
- 价值:
C:\BindIp\BindIp.cmd
设置所需的 IP 地址
BindIp.cmd
对每个想要绑定的可执行文件重复步骤 3 和 4(
rad_user_kernel.exe
、、LolLauncher.exe
等等LolPatcher.exe
)。
现在,每次当您启动具有相应注册表项的可执行文件时,BindIp.cmd
脚本都会启动并将该程序绑定到所需的 IP 地址。
###结论
我已经在运行 Windows 8.1 x64 的笔记本电脑上进行了测试,并能够成功绑定各种程序(人工智能管理平台 2,贝尔斯IRC,Opera 12.4) 使用此技术连接到以太网或 WiFi 适配器。不幸的是,BindIp.dll
它是 32 位的,因此它不适用于 64 位进程。
答案2
我发现隐藏我的屁股!VPN 客户端有安全 IP 绑定允许将应用程序绑定到 VPN 接口的功能:
安全 IP 绑定可让您强制计算机上的选定应用程序仅在连接到我们的 VPN 服务器后才运行。这可确保选定的应用程序仅在安全加密连接后运行。如果您在未连接到我们的 VPN 的情况下打开选定的应用程序,它们将无法访问互联网。
我看过了,它基于一个习俗分层服务提供商 (LSP)dll 和 COM 接口来控制它。并且无需安装 HideMyAss 的 VPN 客户端即可(滥用)它。
安装 HideMyAss 的安全 IP 绑定
- 获取最新的 Windows 安装程序:https://www.hidemyass.com/downloads
- 使用 7-zip 解压。忽略有关文件名称相同的警告,您可以安全地覆盖这些文件。
- 进入
bin
解压后的安装程序文件夹 将这三个文件复制到磁盘上的文件夹中(
C:\HMA_Bind
)- ForceInterfaceCOM.dll
- ForceInterfaceLSP.dll
- 安装LSP
把
Install.cmd
和Uninstall.cmd
放到此文件夹中
安装.cmd
%~dp0InstallLSP.exe -i -a -n "HMA_LSP" -d %~dp0ForceInterfaceLSP.dll
regsvr32 /s %~dp0ForceInterfaceCOM.dll
卸载程序
%~dp0InstallLSP.exe -f
regsvr32 /u /s %~dp0ForceInterfaceCOM.dll
- 跑步
Install.cmd
作为管理员。要验证安装是否成功,您可以使用自动运行:
- 要控制安全 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 绑定
- 跑步
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
我想到两种解决这个问题的方法:
创建一个用于运行游戏的虚拟机,该虚拟机仅使用一个网络适配器。
如果您知道游戏使用的 IP 地址范围,请构建一个网络路由,将该范围指向特定适配器的网关。
一旦我知道您的偏好,我就可以添加更多信息。例如,在第 1 点中您首选的虚拟机产品。
答案4
可以使用 forcebindip.exe,但是您必须编写一个辅助应用程序(没有其他选择)。
- 应用程序保存从其命令行收到的参数
- 该应用程序的名称为 XXXX.EXE
应用程序加载包含 ie 的 XXX.ini
app_to_run = C:\path1\app_to_run.exe ForceBindIP = C:\path2\ForceBindIP.exe IP = 192.168.10.21
应用程序运行
C:\path1\app_to_run.exe 192.168.10.21 C:\path1\app_to_run.exe Saved_Command_line
申请结束
问题: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/