特定のネットワークインターフェイスへのアプリケーションのバインド


17

ForceBindIPを試しましたが、重大な欠点があります-バインドしようとしているアプリケーションの子には影響せず、アプリケーション自体にのみ影響します。また、指定されたインターフェースを介してアプリケーションを常に実行することを強制することはできず、forcebindip.exe毎回実行する必要があります。League of Legendsのようなプロセスツリーのようなアプリケーションでは問題になります。

スクリーンショット

ランチャーはパッチャーを実行し、パッチャーはクライアントを実行します。ツリー内のこれらすべてのプロセスの親にのみ影響を与えることができるため、実際のゲームは必要なインターフェイスにバインドされず、このベンチャー全体が無意味になります。

Windows 7向けのForceBindIPに代わる最新の選択肢はありますか?このサイトにはこれに似た多くの質問がありますが、それらはほとんど古いものです。たぶん、この問題を解決するより良い方法がありますか?

私の現在のアイデアは次のことです。

  1. 目的のインターフェイスにバインドされたローカル3プロキシサーバーをセットアップします。

  2. Proxifierまたはそのローカルプロキシを介して実行するように構成された同様のソフトウェアを介してゲームを実行します。

それがうまくいくかどうかはわかりませんが、うまくいくとしても、それは次善の解決策のようです。もっといいアイデアはありますか?

編集:私のアイデアはうまくいきませんでした:(

編集2:基本的に、私が達成しようとしているのは、VPNの実行中にいくつかのアプリケーションを通常のインターフェースにバインドすることです。その理由は、ほとんどの場合VPNを介して接続する必要があるからですが、pingなどの問題が原因で、一部のアプリケーション(ゲームなど)がこのように正しく動作しません。


ツリー内のすべてのプロセスをIPにバインドする必要がありLolClient.exeますか?である か、exeファイルは?私はサードパーティのdllインジェクターをいじっています。多分私はあなたを助けることができますが、もっと情報が必要です。LolClient.exex86x64
ビートクラッカー

プロセスをVPNインターフェースまたは通常のインターフェースにバインドしようとしていますか?
MariusMatutiae

あなたが達成しようとしている具体的な目標はありますか?デフォルトでは、ゲームは正常に機能するために着信接続を必要としません。ゲームをチートしたり、記録/再生しようとしていますか?
マリオ

この基本的な質問に対する答えを探していましたが、OSXホストを探していました。私のユースケースは、LANとWiFiを同時にオンにしていることです。LANは制限された企業ネット上にあり、WAPではwi-fiです。ファイアウォールでブロックされたファイルをd / lできるように、wi-fi のみを使用するブラウザまたはアプリが必要な場合があります。
SaxDaddy

1
@VictorMarchukはい、BindIp.dll32ビットであるため、64ビットプロセスでは機能しません。
ビートクラッカー

回答:


10

更新

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を実行します。


前書き

ForceBindIpBindIp.dll、子プロセスに自動的に挿入できず、呼び出された実行可能ファイルにパラメーターを渡しません。しかし、レジストリ、バッチスクリプト、およびサードパーティのdllインジェクターでイメージファイル実行オプションを使用することで、これを回避できました。詳細は以下です。

理論

使用BindIp.dllせずForceBindIp.exeに通信する方法を見つける必要があります(ForceBindIp.exeIPアドレスを何らかの方法でdllに渡す必要があります)。

IDAを無料で使用して、IPアドレスを保持ForceBindIp.exeする名前の環境変数を作成し、ターゲット変数を挿入して実行したときにこの変数からIP FORCEDIPアドレスをBindIp.dll読み取ることがわかりました。

ターゲットアプリケーションの起動を検出するDebuggerために、この実行可能ファイルのレジストリのイメージファイル実行オプションにキーを追加できます。

Kernel32!Cre​​ateProcessは、DEBUG_PROCESSまたはDEBUG_ONLY_THIS_PROCESS作成フラグなしで呼び出された場合、レジストリをチェックして、起動する実行可能ファイルにIFEOが設定されているかどうかを確認します。「はい」の場合、デバッガーパスを実行可能ファイル名の前に追加するだけで、実行可能ファイルをデバッガーの下で効果的に起動できます。

私たちの場合は、「デバッガ」、設定するバッチスクリプトになりますFORCEDIP変数と起動injectory DLLインジェクターを。その後、Injectoryはプロセスを開始し、コマンドライン引数を渡してinjectしBindIp.dllます。

練習

  1. フォルダーを作成し(C:\BindIpたとえば)、次の3つのファイルを入れます:

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
  3. グラントUsersこのキーの完全なアクセス権(スクリプトは、すべての起動時にそれを変更する必要があります)。次のようになります。IFEOレジストリキー

  4. に必要なIPアドレスを設定します BindIp.cmd

  5. 繰り返します(バインドしたいすべての実行のために手順3と4 rad_user_kernel.exeLolLauncher.exeLolPatcher.exe、など)。

現在、対応するレジストリエントリを持つ実行可能ファイルを起動するたびに、BindIp.cmd代わりにスクリプトが起動し、このプログラムを目的のIPアドレスにバインドします。

結論

Windows 8.1 x64を実行しているラップトップでこれをテストし、この手法を使用してさまざまなプログラム(AIMP 2BersIRCOpera 12.4)をイーサネットまたはWiFiアダプターに正常にバインドできました。残念ながらBindIp.dll32ビットなので、64ビットプロセスでは機能しません。


詳細な説明をありがとうございます!残念ながら、インジェクトリー
Victor Marchuk

@VictorMarchukさらにテストを行いましたが、実際、オプションにinjectory問題があることがあり--argsます。理由はわかりません。
ビートクラッカー

--argsアプリケーションがなくても実行できませんでした
ビクターマーチャック

@VictorMarchuk例はありますか?Opera 12.14とコマンドラインでテストしたところ、うまくいきました。
ビートクラッカー

@VictorMarchuk ForceBindIp実際にパラメーターを渡すことができるようです。更新された回答を参照してください。
ビートクラッカー

4

HideMyAssが見つかりましたVPNクライアントには、アプリケーションをVPNインターフェースにバインドできるセキュアIPバインド機能があります。

セキュアIPバインドを使用すると、コンピューター上の選択したアプリケーションを、VPNサーバーへの接続後にのみ機能させることができます。これにより、選択したアプリケーションが安全な暗号化接続の背後でのみ機能するようになります。VPNに接続せずに選択したアプリケーションを開くと、インターネットにアクセスできなくなります。

私はそれを見てきたが、それを制御するためのカスタムレイヤードサービスプロバイダー(LSP) dllとCOMインターフェイスに基づいています。また、HideMyAssのVPNクライアントをインストールせずに(ab)使用できます。

HideMyAssのセキュアIPバインドのインストール

  1. 最新のWindowsインストーラーを入手:https : //www.hidemyass.com/downloads
  2. 7-zipで解凍します。同じ名前のファイルに関する警告は無視してください。それらを安全に上書きできます。
  3. bin解凍したインストーラーのフォルダーに移動します
  4. これらの3つのファイルをディスク上のフォルダーにコピーします(C:\HMA_Bind

    • ForceInterfaceCOM.dll
    • ForceInterfaceLSP.dll
    • InstallLSP.exe
  5. 置くInstall.cmdUninstall.cmd、このフォルダへ

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
  1. Install.cmd 管理者として実行します。インストールが成功したことを確認するには、Autorunsを使用できます。

AUtorunsのWinsockプロバイダー

  1. セキュアIPバインドを制御するには、COMインターフェイスメソッドを呼び出す必要があります。これはPowerShellで実行できます。x64 OSを使用している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 管理者として実行し、自動実行でアンインストールが成功したことを確認します。

例:

安全なIPバインドCOMオブジェクトを作成する必要があるのは、PowerShellセッションごとに1回だけであることに注意してください。以下の例では、新しい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 として実装されているため、これらの制限が適用されます。

LSPはWindows Server 2012以降廃止されています。LSPを含むシステムは、Windowsロゴチェックに合格しません。ネットワークを使用するWindows 8スタイルの「メトロ」アプリは、すべてのLSPを自動的にバイパスします。

32ビットアプリケーションは動作しますが、64ビットでは動作しません。つまり、64ビットエクスプローラーをバインドできました(おそらくタブプロセスがデフォルトで32ビットであるため)。 64ビットのWaterfoxブラウザーやその他の64ビットアプリケーションではありません。


3

私は問題の2つの解決策を考えることができます:

  1. 1つのネットワークアダプターのみを使用するゲームを実行するための仮想マシンを作成します。

  2. ゲームが使用するIPアドレスの範囲がわかっている場合は、この範囲を特定のアダプターのゲートウェイに向けるネットワークルートを構築します。

好みがわかったら、さらに情報を追加できます。たとえば、ポイント1では、優先する仮想マシン製品です。


1
VMを使用すると、パフォーマンスの低下や数GBのRAMの継続的な使用など、多くの追加の問題が発生します。それは私の最後の手段です、私は本当に他の方法でそれを達成したいです。バインドする必要があるIPの正確な範囲はわかりません。p2p共有ソフトウェア(トレント)を含むあらゆる種類のアプリケーションに必要なためです。おそらく、各アプリケーションが確立する接続に基づいてルートを作成できるファイアウォールがありますか?
ビクターマーチャック

パフォーマンス:古いVirtual PCを使用しない場合、VMのパフォーマンスは低下しません。メモリ:VMwareとVirtualBoxはすべてのメモリをすぐには割り当てないため、VMが本当に必要とするメモリのみが割り当てられます。また、VM /ゲームを後で一時停止および再開できるというゲームの追加の利点もあります。これは、ほとんどのゲームの保存機能よりもはるかに優れています。IP範囲の場合:それらの多くが存在する場合、上記は実用的ではなく、プロキシでもありません。
harrymc

1
@harrymcエミュレートされたGPUを使用してVMから許容できる3Dパフォーマンスを得ることができるとは思わない。また、グラフィックスカードに直接アクセスするには、セットアップが難しく、VT-D(Intel)またはAMD-Vi対応のCPUが必要です(安価ではありません)。
ビートクラッカー

このようなCPUはあなたが思うよりも一般的です:IOMMU-サポートするハードウェアのリストが、パススルービデオかもしれない2つのGPUが必要です。ただし、パフォーマンス要件が非常に大きい場合を除き、今日のVMは優れたビデオパフォーマンスを提供します。VMを使用することは、高度なGPUを受け入れるのに苦労するアクションゲームで、顕著なラグに遭遇することなく私のソリューションです。ほとんどのVM製品では、ビデオメモリの量など、エミュレートされたカードをある程度制御できます。
harrymc15年

2
答えはイエスであり、一部の人々はそれを管理しています。ここに1つのリファレンスがあります。GPUパススルーを使用してWindows VMをセットアップしますが、他にもあります。
harrymc

3

2つのWindowsユーザーアカウントがあると仮定します。

  • HomeUser
  • VpnUser

VpnUserアカウントにログインすると、アプリケーション(特に言及したゲーム)をHomeUser(Shift + RMB実行可能ファイル->他のユーザーとして実行)として実行でき、このアプリケーションは子プロセスをとして実行しますHomeUser。標準的な方法(ショートカット、実行可能ファイルをダブルクリック)で実行するアプリケーションは、によって所有されVpnUserます。

Windowsネットワーク接続を定義する場合、他のユーザーがこの接続を使用できるようにするオプションがあります。あなたが定義したと仮定しましょう:

  • HomeNetwork 専用 HomeUser
  • VpnNetwork 専用 VpnUser

簡単にするために:

  • コンピューターに他のネットワーク接続はありません。

現在、台無しにすることのできない単一のWindowsマシンがあり、説明した設定をチェックしたことがないため、以下のステートメントが正しいかどうかはわかりません。

私の推測は、Windowsに組み込まれたVPNクライアントに限定される可能性があります。サードパーティのVPNクライアントは、さらに調査する必要があります。

そのアプリケーションを推測します:

  • 所有者VpnUserのみを使用する必要がありますVpnNetwork
  • 所有者HomeUserのみを使用する必要がありますHomeNetwork

私の推測が正しい場合、VpnUserアカウントにログインするアプリケーションはを使用しVpnNetwork、アカウントHomeUserからアプリケーションを実行する場合VpnUserはを使用する必要がありますHomeNetwork


どういう意味かわかりません。別のWindowsユーザーアカウントを使用することを提案していますか?特定のアプリケーションをバインドするのにどのように役立ちますか?あなたのソリューションはすべてのアプリに対してVPNの有効化/無効化のみを許可しているようですが、私はすでにVPNに接続して切断することでそれを行うことができます。
ビクターマーチャク

2
@VictorMarchuk私は私の答えを編集した-私はそれが今より明らかであると思います...
g2mk

0

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/


ヘルパーアプリケーションは、子プロセスの作成をインターセプトし、代わりにForceBindIPを介して実行するということですか?もしそうなら、これにアプローチする方法について何か提案はありますか?
ビクターマーチャック

あなたが正しいです。ヘルパーアプリケーションはラップされたすべてのexeの名前を持ち、ForceBindを介して対応する元のexeの呼び出しを終了します。もちろん、同じディレクトリの下で同じ名前の2つのexeを避けるために、名前の変更またはディレクトリゲームが必要です。このヘルパーアプリケーションを容易C、すなわち符号化することができる
パット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.