특정 네트워크 인터페이스에 응용 프로그램 바인딩


17

ForceBindIP를 시도했지만 심각한 단점이 있습니다. 바인딩하려는 응용 프로그램의 자식에는 영향을 미치지 않으며 응용 프로그램 자체에만 영향을 미칩니다. 또한 응용 프로그램이 항상 지정된 인터페이스를 통해 실행되도록 할 수는 없으며 매번 실행해야합니다 forcebindip.exe. 프로세스 트리가 다음과 같은 League of Legends와 같은 응용 프로그램에서 문제가됩니다.

스크린 샷

런처는 patcher를 실행하고, patcher는 클라이언트를 실행합니다. 트리에서 이러한 모든 프로세스의 부모에만 영향을 줄 수 있으므로 실제 게임은 원하는 인터페이스에 바인딩되지 않으므로이 벤처를 무의미하게 만듭니다.

Windows 7 용 ForceBindIP에 대한보다 현대적인 대안이 있습니까? 이 사이트에는 이와 비슷한 질문이 많이 있지만 대부분 오래된 질문입니다. 이 문제를 해결하는 더 좋은 방법이 있습니까?

내 현재 아이디어는 다음을 수행하는 것입니다.

  1. 원하는 인터페이스에 바인딩 된 로컬 3proxy 서버를 설정하십시오.

  2. 해당 로컬 프록시를 통해 실행되도록 구성된 Proxifier 또는 유사한 소프트웨어를 통해 게임을 실행하십시오.

그것이 효과가 있는지는 확실하지 않지만, 그것이 효과가 있더라도 차선책으로 보입니다. 더 좋은 아이디어가 있습니까?

편집 : 내 아이디어가 작동하지 않았습니다 :(

편집 2 : 기본적으로 달성하려는 것은 VPN이 실행되는 동안 몇 가지 응용 프로그램을 일반 인터페이스에 바인딩하는 것입니다. 그 이유는 대부분 VPN을 통해 연결해야하지만 핑 및 기타 문제로 인해 게임과 같은 일부 응용 프로그램이이 방식으로 제대로 작동하지 않기 때문입니다.


트리의 모든 프로세스 또는 IP에만 바인딩해야 LolClient.exe합니까? 가 또는 exe는? 타사 dll 인젝터를 사용하고 있는데 도움이 될 수 있지만 더 많은 정보가 필요합니다. LolClient.exex86x64
beatcracker

프로세스를 VPN 인터페이스 또는 일반 인터페이스에 바인딩하려고합니까?
MariusMatutiae

달성하려는 특정 목표가 있습니까? 기본적으로 게임은 제대로 연결하기 위해 들어오는 연결이 필요하지 않습니다. 게임 속임수 또는 기록 / 재생을 시도하고 있습니까?
마리오

이 기본 질문에 대한 답변을 찾고 있지만 OSX 호스트에 대한 답변을 찾고 있습니다. 사용 사례는 LAN과 WiFi가 동시에 켜져 있다는 것입니다. LAN이 제한된 WAP의 회사 네트워크 Wi-Fi에 있습니다. 방화벽으로 차단 된 파일을 d / l 할 수 있도록 Wi-Fi 사용하려면 브라우저 나 앱이 필요할 때가 있습니다.
SaxDaddy

1
@VictorMarchuk 예, BindIp.dll32 비트이므로 64 비트 프로세스에서는 작동하지 않습니다.
beatcracker

답변:


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 단계를 따르십시오.


소개

ForceBindIp 는 자동으로 BindIp.dll자식 프로세스에 주입 할 수 없으며 호출 된 executables에 매개 변수를 전달하지 않습니다 . 그러나 레지스트리 , 배치 스크립트 및 타사 dll 인젝터 에서 이미지 파일 실행 옵션 을 사용하여이를 우회 할 수있었습니다 . 자세한 내용은 다음과 같습니다.

이론

사용 BindIp.dll하지 않고 사용하려면 ForceBindIp.exe통신 방법을 알아야합니다 ( ForceBindIp.exe어쨌든 IP 주소를 dll에 전달해야 함).

IDA를 무료로 사용 했으며 IP 주소를 보유하고 대상 프로세스에서 주입하고 실행할 때이 변수에서 IP 주소를 읽는 ForceBindIp.exe이름으로 환경 변수 를 만드는 것을 발견했습니다 .FORCEDIPBindIp.dll

대상 응용 프로그램 시작을 감지 Debugger하기 위해이 실행 파일에 대한 레지스트리의 이미지 파일 실행 옵션에 키를 추가 할 수 있습니다 .

DEBUG_PROCESS 또는 DEBUG_ONLY_THIS_PROCESS 작성 플래그없이 호출 된 Kernel32! CreateProcess는 레지스트리가 실행중인 실행 파일에 IFEO가 설정되어 있는지 확인합니다. 그렇다면 디버거 경로를 실행 파일 이름 앞에 추가하여 효과적으로 디버거에서 실행 파일을 시작하십시오.

우리의 경우 "디버거"는 배치 스크립트이며 FORCEDIP변수 를 설정 하고 인젝 토리 dll- 인젝터를 시작합니다 . 그런 다음 Injectory 는 프로세스를 시작하고 명령 줄 인수를 전달하고 inject 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
  3. Users이 키에 대한 전체 권한을 부여 하십시오 (스크립트는 시작할 때마다 수정해야합니다). 다음과 같아야합니다.IFEO 레지스트리 키

  4. 필요한 IP 주소 설정 BindIp.cmd

  5. 반복 (바인드하고자 모든 실행 파일에 대해 3 단계와 4 단계를 rad_user_kernel.exe, LolLauncher.exe, LolPatcher.exe, 등).

이제 해당 레지스트리 항목이있는 실행 파일을 시작할 때마다 BindIp.cmd스크립트가 대신 실행되어이 프로그램을 원하는 IP 주소에 바인딩합니다.

결론

Windows 8.1 x64를 실행하는 랩톱에서 이것을 테스트 했으며이 기술을 사용하여 다양한 프로그램 ( AIMP 2 , BersIRC , Opera 12.4 )을 이더넷 또는 WiFi 어댑터 에 성공적으로 바인딩 할 수있었습니다 . 불행히도 BindIp.dll32 비트이므로 64 비트 프로세스에서는 작동하지 않습니다.


자세한 설명을 주셔서 대단히 감사합니다! 불행히도, 난 injectory에서 예외의 어떤 종류를 받고 있어요 : github.com/blole/injectory/issues/4
빅터 Marchuk

@VictorMarchuk 나는 더 많은 테스트를했으며 실제로 옵션에 injectory문제가 --args있습니다. 이유가 확실하지 않습니다.
beatcracker

--args응용 프로그램 없이도 실행할 수 없었습니다
Victor Marchuk

@VictorMarchuk 예가 있습니까? 방금 Opera 12.14 및 명령 줄로 테스트했습니다.
beatcracker

@VictorMarchuk ForceBindIp실제로 매개 변수를 전달할 수있는 것 같습니다 . 업데이트 된 답변을 참조하십시오.
beatcracker

4

HideMyAss를 찾았 습니다! VPN 클라이언트에는 응용 프로그램을 VPN 인터페이스에 바인딩 할 수있는 보안 IP 바인딩 기능이 있습니다.

보안 IP 바인드를 사용하면 컴퓨터에서 선택한 애플리케이션이 VPN 서버에 연결된 후에 만 ​​작동하도록 할 수 있습니다. 이렇게하면 선택한 응용 프로그램이 안전한 암호화 된 연결에서만 작동합니다. VPN에 연결하지 않고 선택한 응용 프로그램을 열면 인터넷에 액세스 할 수 없습니다.

나는 그것을 보았고 그것을 제어하기 위해 사용자 정의 LSP (Layered Service Provider) 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
    • 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에서 수행 할 수 있습니다. 당신은 64 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 'Secure IP Bind 제거

  1. Uninstall.cmd 관리자로 실행 하고 자동 실행 으로 설치 제거가 완료되었는지 확인 하십시오 .

예 :

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 (Layered Service Provider) dll 로 구현되었으므로 다음 제한 사항이 적용됩니다.

LSP는 Windows Server 2012 이후로 더 이상 사용되지 않습니다. LSP를 포함하는 시스템은 Windows 로고 확인을 통과하지 못합니다. 네트워킹을 사용하는 Windows 8 스타일 "메트로"앱은 모든 LSP를 자동으로 무시합니다.

32 비트 응용 프로그램은 작동하지만 64 비트는 그렇지 않습니다. 즉 64 비트 탐색기를 바인딩 할 수있었습니다 (탭 프로세스는 기본적으로 32 비트이기 때문에). 64 비트 Waterfox 브라우저 또는 기타 64 비트 응용 프로그램이 아닙니다 .


3

문제에 대한 두 가지 해결책을 생각할 수 있습니다.

  1. 하나의 네트워크 어댑터 만 사용하는 게임 실행을위한 가상 머신을 만듭니다.

  2. 게임에서 사용하는 IP 주소의 범위를 알고 있으면이 범위를 특정 어댑터의 게이트웨이로 향하게하는 네트워크 경로를 구성하십시오.

선호 사항을 알고 나면 더 많은 정보를 추가 할 수 있습니다. 예를 들어 1 번 지점에서 선호하는 가상 머신 제품입니다.


1
VM을 사용하면 성능 저하 및 몇 GB의 RAM을 지속적으로 사용하는 등 많은 추가 문제가 발생합니다. 그것은 마지막 수단입니다. 다른 방법으로 달성하는 것을 정말로 좋아합니다. p2p 공유 소프트웨어 (토렌트)를 포함한 모든 종류의 응용 프로그램에 필요하기 때문에 바인딩해야 할 정확한 IP 범위를 모릅니다. 각 응용 프로그램이 설정 한 연결을 기반으로 경로를 만들 수있는 방화벽이 있습니까?
Victor Marchuk

성능 : 이전 가상 PC를 사용하지 않는 VM은 성능이 저하되지 않습니다. 메모리 : VMware 및 VirtualBox는 모든 메모리를 즉시 할당하지 않으므로 VM에 실제로 필요한 메모리 만 할당됩니다. 또한 나중에 VM / 게임을 일시 중단 및 재개 할 수있는 게임에 대한 추가 이점이 있습니다. 이는 대부분의 게임의 저장 기능보다 훨씬 낫습니다. IP 범위의 경우 : IP 범위가 많으면 위의 내용이 실용적이지 않으며 프록시도 아닙니다.
harrymc

1
@harrymc 에뮬레이트 GPU를 사용하여 VM에서 3D 성능을 얻을 수 있을지 의심됩니다. 또한 그래픽 카드에 직접 액세스하려면 설정이 까다 롭고 VT-D (Intel) 또는 AMD-Vi 지원 CPU가 필요합니다 (저렴하지는 않습니다).
beatcracker December

이러한 CPU는 생각보다 일반적 입니다. IOMMU 지원 하드웨어 목록 이지만 통과 비디오에는 GPU가 2 개 필요할 수 있습니다. 그러나 성능 요구 사항이 엄청 나지 않으면 요즘 VM은 우수한 비디오 성능을 제공합니다. VM을 사용하는 것은 눈에 띄는 지연이 발생하지 않고 고급 GPU를 받아들이는 데 어려움이있는 액션 게임을위한 솔루션입니다. 대부분의 VM 제품은 비디오 메모리의 양과 같은 에뮬레이트 된 카드의 일부 제어를 허용합니다.
harrymc

2
대답은 그렇습니다. 다음은 하나의 참조입니다. GPU 통과를 사용하여 Windows VM 설정 하지만 더 많은 것을 찾을 수 있습니다.
harrymc

3

두 개의 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에 연결하고 연결을 끊어 이미 할 수 있습니다.
Victor Marchuk

2
@VictorMarchuk 나는 나의 대답을 편집했다-나는 그것이 지금 더 명확
해지기를 바란다

0

forcebindip.exe를 사용할 수 있지만 도우미 응용 프로그램을 코딩해야합니다 (다른 옵션 없음).

  1. 응용 프로그램은 명령 줄에서받은 매개 변수를 저장합니다
  2. 응용 프로그램의 이름은 XXXX.EXE입니다.
  3. 응용 프로그램은 다음을 포함하는 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를 통해 실행한다는 의미입니까? 그렇다면이 방법에 대한 제안 사항이 있습니까?
Victor Marchuk

네 말이 맞아 도우미 응용 프로그램은 래핑 된 모든 exe의 이름을 가지며 ForceBind를 통해 해당 원본 exe를 호출하는 것을 종료합니다. 물론 동일한 디렉토리에서 같은 이름을 가진 2 개의 exe를 피하려면 이름 바꾸기 또는 디렉토리 게임이 필요합니다. 이 도우미 앱은 C로 쉽게 코딩 할 수 있습니다
Pat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.