J'ai essayé ForceBindIP, mais il comporte un inconvénient important: cela n'affecte pas les enfants de l'application que je tente de lier, cela affecte uniquement l'application elle-même. En outre, il ne peut pas forcer une application à toujours s'exécuter via une interface spécifiée, il doit être exécuté à travers forcebindip.exe
à chaque fois. Cela devient un problème avec des applications telles que League of Legends où l’arborescence des processus ressemble à ceci:
Le lanceur exécute le correctif, le correctif exécute le client, etc. Je ne peux affecter que le parent de tous ces processus dans l'arborescence. Le jeu n'est donc pas lié à l'interface que je veux, ce qui rend toute cette aventure inutile.
Existe-t-il une alternative plus moderne à ForceBindIP pour Windows 7? Il y a beaucoup de questions semblables à celle-ci sur ce site, mais elles sont pour la plupart anciennes. Peut-être existe-t-il maintenant un meilleur moyen de résoudre ce problème?
Mon idée actuelle est de faire ce qui suit:
Configurez le serveur 3 proxy local lié à l'interface souhaitée.
Exécutez le jeu via Proxifier ou un logiciel similaire configuré pour s'exécuter via ce proxy local.
Je ne sais pas si cela fonctionnera, mais même si cela fonctionnera, cela semble être une solution sous-optimale. Avez-vous les meilleures idées les gars?
Edit: Mon idée n'a pas fonctionné :(
Edit 2: Fondamentalement, ce que je cherche à faire est de lier quelques applications à une interface normale, alors que le VPN est en cours d’exécution. La raison en est que je dois me connecter via un réseau privé virtuel la plupart du temps, mais certaines applications (telles que les jeux) ne fonctionnent pas correctement de cette façon, en raison de problèmes de ping plus importants et autres.
J'ai constaté que ForceBindIp passait en fait des paramètres aux exécutables appelés. Il omet juste le premier paramètre . J'ai donc modifié mon script pour utiliser ForceBindIp.exe
au lieu d'injecteur personnalisé et maintenant, il semble que tous les problèmes avec les exceptions injectory
ont disparu et que tout fonctionne.
Voici les étapes modifiées et le script BindIp.cmd
:
Installez ForceBindIp comme d'habitude
Mettez BindIp.cmd
n'importe où sur votre lecteur (par exemple, C:\BindIp\BindIp.cmd
)
BindIp.cmd
script:
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
Suivez ensuite les étapes 2 à 6 ci-dessous.
ForceBindIp ne peut pas injecter automatiquement BindIp.dll
aux processus enfants et ne passe pas de paramètres aux exécutables appelés. Mais j'ai pu contourner ce problème en utilisant les options d'exécution du fichier image dans le registre , le script de traitement par lots et des dll tierces injecteur . Les détails sont ci-dessous.
Pour utiliser BindIp.dll
sans ForceBindIp.exe
, nous devons savoir comment ils communiquent (ForceBindIp.exe
doit en quelque sorte passer l’adresse IP à la dll).
J'ai utilisé IDA libre et constaté que ForceBindIp.exe
crée une variable d'environnement avec le nom FORCEDIP
qui contient l'adresse IP et que BindIp.dll
lit l'adresse IP de cette variable injecté et exécuté dans le processus cible.
Pour détecter le lancement de l'application cible, nous pouvons ajouter une clé Debugger
dans les options d'exécution du fichier image du registre pour cet exécutable:
Kernel32! CreateProcess, lorsqu'il est appelé sans les indicateurs de création DEBUG_PROCESS ou DEBUG_ONLY_THIS_PROCESS, vérifie dans le registre si IFEO a été défini sur l'exécutable qu'il lance. Si c'est le cas, alors le chemin du débogueur est préfixé au nom de l'exécutable, ce qui permet à l'exécutable de se lancer sous le débogueur.
Le "débogueur" dans notre cas sera un script batch, qui définira la variable FORCEDIP
et lancera l'injectory dll-injector. Injectory lancera ensuite le processus, passera les arguments de la ligne de commande et injectera BindIp.dll
.
Créez un dossier quelque part (C:\BindIp
par exemple) et mettez-y ces trois fichiers:
BindIp.dll
BindIp.cmd
BindIp.cmd
script:
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
) pour l'exécutable cible dans HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
Ajouter une valeur de chaîne à cette clé:
Debugger
C:\BindIp\BindIp.cmd
Accordez à Users
des autorisations complètes sur cette clé (le script devra la modifier à chaque lancement). Cela devrait ressembler à ceci:
Définir l'adresse IP requise dans BindIp.cmd
Répétez les étapes 3 et 4 pour chaque exécutable que vous souhaitez lier (rad_user_kernel.exe
, LolLauncher.exe
, LolPatcher.exe
, etc.).
Maintenant, chaque fois que vous lancez un fichier exécutable avec l’entrée de registre correspondante, le script BindIp.cmd
sera lancé à la place et liera ce programme à l’adresse IP souhaitée.
J'ai testé cela sur mon ordinateur portable fonctionnant sous Windows 8.1 x64 et j'étais capable de lier avec succès divers programmes ( AIMP 2 , BersIRC , Opera 12.4 ) via un adaptateur Ethernet ou WiFi utilisant cette technique. Malheureusement, BindIp.dll
étant en 32 bits, cela ne fonctionnerait pas avec les processus 64 bits.
J'ai constaté que HideMyAss! / Le client VPN a Secure IP Bind la fonctionnalité qui permet de lier des applications à une interface VPN :
Secure IP Bind vous permet de forcer les applications sélectionnées sur votre ordinateur à ne fonctionner qu'une fois connectées à nos serveurs VPN. Cela garantit que les applications sélectionnées ne fonctionneront que derrière une connexion cryptée sécurisée. Si vous ouvrez des applications sélectionnées sans être connecté à notre VPN, elles ne pourront pas accéder à Internet.
Je l'ai examiné et il est basé sur un fournisseur personnalisé LSP (Layered Service Provider) (LSP) dll et une interface COM pour le contrôler. Et il peut être utilisé sans installer le client VPN de HideMyAss.
bin
dans le programme d'installation décompressé.Copiez ces trois fichiers dans un dossier de votre disque (C:\HMA_Bind
)
Placez Install.cmd
et Uninstall.cmd
dans ce dossier
Install.cmd
%~dp0InstallLSP.exe -i -a -n "HMA_LSP" -d %~dp0ForceInterfaceLSP.dll
regsvr32 /s %~dp0ForceInterfaceCOM.dll
Uninstall.cmd
%~dp0InstallLSP.exe -f
regsvr32 /u /s %~dp0ForceInterfaceCOM.dll
Install.cmd
en tant qu'administrateur . Pour vérifier que l'installation a réussi, vous pouvez utiliser Autoruns :Windows PowerShell ISE (x86)
ou Windows PowerShell (x86)
, car le composant COM est en 32 bits.Tout d'abord, vous devez créer un nouvel objet Secure IP Bind:
# Create new Secure IP Bind COM object
$HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
Et ensuite, vous pouvez appeler ses méthodes:
# 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()
Uninstall.cmd
en tant qu'administrateur , vérifiez que la désinstallation est réussie avec Autoruns.Notez que vous devez créer un objet IP Bind COM sécurisé uniquement une fois par session PowerShell. Les exemples ci-dessous supposent que vous les exécutiez dans une nouvelle session PowerShell, ils créent donc toujours un nouvel objet COM.
Définissez l'adresse IP de la liaison, ajoutez firefox
aux applications liées, activez la liaison.
# 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)
Activer globalement la liaison IP:
# Create new Secure IP Bind COM object
$HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
# Enable binding
$HmaFbi.SetEnabled($true)
Désactiver globalement la liaison IP:
# Create new Secure IP Bind COM object
$HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
# Disable binding
$HmaFbi.SetEnabled($false)
Supprimer l'application de la liste (arrêter la liaison pour cette application):
# 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()
Etant donné que Secure IP Bind est implémenté en tant que fournisseur de service en couche personnalisé dll, ces limitations s'appliquent:
Les LSP sont obsolètes depuis Windows Server 2012. Les systèmes comprenant des LSP ne passeront pas les contrôles du logo Windows. Les applications "métropolitaines" de style Windows 8 utilisant la mise en réseau contourneront automatiquement tous les LSP.
J'ai testé cette méthode avec différentes applications aux résultats mitigés: les applications 32 bits fonctionnent, mais pas en 64 bits, c’est-à-dire que j’ai pu lier l’Explorateur 64 bits (probablement parce que les processus de tabulation sont 32 bits par défaut), mais pas 64 bits Waterfox browser ou d'autres applications 64 bits.
Supposons que vous ayez deux comptes d'utilisateur Windows:
HomeUser
name__VpnUser
name__Lorsque vous vous connectez au compte VpnUser
name__, vous pouvez exécuter des applications (en particulier les jeux que vous avez mentionnés) sous le nom HomeUser
(Maj + RMB du fichier exécutable -> Exécuter en tant qu’autre utilisateur). Ces applications exécutent leurs processus enfants sous le nom HomeUser
name__. Les applications que vous exécuterez de manière standard (raccourcis, double-clic sur un fichier exécutable) appartiendront à VpnUser
name__.
Lorsque vous définissez des connexions réseau Windows, vous avez la possibilité d'autoriser d'autres utilisateurs à utiliser cette connexion. Supposons que vous avez défini:
HomeNetwork
exclusivement pour HomeUser
name__VpnNetwork
exclusivement pour VpnUser
name__et pour simplifier:
Je n'ai actuellement qu'une seule machine Windows sur laquelle je ne peux pas gâcher beaucoup et je n'ai jamais vérifié les paramètres décrits, de sorte que je ne suis pas sûr que l'instruction ci-dessous soit vraie.
Mon hypothèse pourrait être limitée au client VPN intégré à Windows - tout client VPN tiers doit faire l’objet d’une enquête plus approfondie.
Je suppose que les applications:
VpnUser
doit utiliser uniquement VpnNetwork
name__.HomeUser
doit utiliser uniquement HomeNetwork
name__.Si ma spéculation est vraie, lorsque vous vous connectez à VpnUser
name__, les applications utilisent VpnNetwork
name__, lorsque les applications s'exécutent en tant que HomeUser
à partir de VpnUser
name__, le compte doit utiliser HomeNetwork
name__.
Je peux penser à deux solutions au problème:
Créez une machine virtuelle pour exécuter le jeu, qui utilise uniquement la seule carte réseau.
Si vous connaissez la plage d'adresses IP utilisée par le jeu, créez un itinéraire réseau qui dirige cette plage vers la passerelle de l'adaptateur spécifique.
Je peux ajouter plus d'informations une fois que je connais vos préférences. Par exemple, au point 1, votre produit de machine virtuelle préféré.
forcebindip.exe peut être utilisé mais vous devez coder une application auxiliaire (aucune autre option).
L’application charge XXX.ini contenant i.e.
app_to_run = C:\path1\app_to_run.exe
ForceBindIP = C:\path2\ForceBindIP.exe
IP = 192.168.10.21
L'application s'exécute
C:\path1\app_to_run.exe 192.168.10.21 C:\path1\app_to_run.exe Saved_Command_line
L'application se termine
PROBLÈME: ForcebindIP ne transmet pas de paramètres au programme appelé. puis, si vous devez passer des paramètres à app_to_run.exe, vous devez adopter une approche plus évoluée, dans laquelle XXX.exe crée un fichier batch comprenant app_to_run.exe et les paramètres transmis. Ce lot est appelé à la place de app_to_run.exe au point 4.
Vous pouvez également jeter un coup d'œil à certaines applications de l'interface graphique qui enveloppent ForcebindIP. Certains d'entre eux sont capables de travailler avec plus d'une application mais ils ne font pas ce dont vous avez besoin.
https://www.raymond.cc/blog/bind-windows-application-to-specific-network-adapter-with-forcebindip/