ForceBindIP를 시도했지만 심각한 단점이 있습니다. 바인딩하려는 응용 프로그램의 자식에는 영향을 미치지 않으며 응용 프로그램 자체에만 영향을 미칩니다. 또한 응용 프로그램이 항상 지정된 인터페이스를 통해 실행되도록 할 수는 없으며 매번 실행해야합니다 forcebindip.exe
. 프로세스 트리가 다음과 같은 League of Legends와 같은 응용 프로그램에서 문제가됩니다.
런처는 patcher를 실행하고, patcher는 클라이언트를 실행합니다. 트리에서 이러한 모든 프로세스의 부모에만 영향을 줄 수 있으므로 실제 게임은 원하는 인터페이스에 바인딩되지 않으므로이 벤처를 무의미하게 만듭니다.
Windows 7 용 ForceBindIP에 대한보다 현대적인 대안이 있습니까? 이 사이트에는 이와 비슷한 질문이 많이 있지만 대부분 오래된 질문입니다. 이 문제를 해결하는 더 좋은 방법이 있습니까?
내 현재 아이디어는 다음을 수행하는 것입니다.
-
원하는 인터페이스에 바인딩 된 로컬 3proxy 서버를 설정하십시오.
-
해당 로컬 프록시를 통해 실행되도록 구성된 Proxifier 또는 유사한 소프트웨어를 통해 게임을 실행하십시오.
그것이 효과가 있는지는 확실하지 않지만, 그것이 효과가 있더라도 차선책으로 보입니다. 더 좋은 아이디어가 있습니까?
편집 : 내 아이디어가 작동하지 않았습니다 🙁
편집 2 : 기본적으로 달성하려는 것은 VPN이 실행되는 동안 몇 가지 응용 프로그램을 일반 인터페이스에 바인딩하는 것입니다. 그 이유는 대부분 VPN을 통해 연결해야하지만 핑 및 기타 문제로 인해 게임과 같은 일부 응용 프로그램이이 방식으로 제대로 작동하지 않기 때문입니다.
답변
최신 정보
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 는 자동으로 BindIp.dll
자식 프로세스에 주입 할 수 없으며 호출 된 executables에 매개 변수를 전달하지 않습니다 . 그러나 레지스트리 , 배치 스크립트 및 타사 dll 인젝터 에서 이미지 파일 실행 옵션 을 사용하여이를 우회 할 수있었습니다 . 자세한 내용은 다음과 같습니다.
이론
사용 BindIp.dll
하지 않고 사용하려면 ForceBindIp.exe
통신 방법을 알아야합니다 ( ForceBindIp.exe
어쨌든 IP 주소를 dll에 전달해야 함).
IDA를 무료로 사용 했으며 IP 주소를 보유하고 대상 프로세스에서 주입하고 실행할 때이 변수에서 IP 주소를 읽는 ForceBindIp.exe
이름으로 환경 변수 를 만드는 것을 발견했습니다 .FORCEDIP
BindIp.dll
대상 응용 프로그램 시작을 감지 Debugger
하기 위해이 실행 파일에 대한 레지스트리의 이미지 파일 실행 옵션에 키를 추가 할 수 있습니다 .
DEBUG_PROCESS 또는 DEBUG_ONLY_THIS_PROCESS 작성 플래그없이 호출 된 Kernel32! CreateProcess는 레지스트리가 실행중인 실행 파일에 IFEO가 설정되어 있는지 확인합니다. 그렇다면 디버거 경로를 실행 파일 이름 앞에 추가하여 효과적으로 디버거에서 실행 파일을 시작하십시오.
우리의 경우 “디버거”는 배치 스크립트이며 FORCEDIP
변수 를 설정 하고 인젝 토리 dll- 인젝터를 시작합니다 . 그런 다음 Injectory 는 프로세스를 시작하고 명령 줄 인수를 전달하고 inject BindIp.dll
합니다.
연습
-
어딘가에 폴더를
C:\BindIp
만들고 ( 예를 들어)이 세 파일을 그 안에 넣으십시오.BindIp.dll
- injectory.x86.exe
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
- 이름:
-
Users
이 키에 대한 전체 권한을 부여 하십시오 (스크립트는 시작할 때마다 수정해야합니다). 다음과 같아야합니다. -
필요한 IP 주소 설정
BindIp.cmd
-
반복 (바인드하고자 모든 실행 파일에 대해 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.dll
32 비트이므로 64 비트 프로세스에서는 작동하지 않습니다.
답변
HideMyAss를 찾았 습니다! VPN 클라이언트에는 응용 프로그램을 VPN 인터페이스에 바인딩 할 수있는 보안 IP 바인딩 기능이 있습니다.
보안 IP 바인드를 사용하면 컴퓨터에서 선택한 애플리케이션이 VPN 서버에 연결된 후에 만 작동하도록 할 수 있습니다. 이렇게하면 선택한 응용 프로그램이 안전한 암호화 된 연결에서만 작동합니다. VPN에 연결하지 않고 선택한 응용 프로그램을 열면 인터넷에 액세스 할 수 없습니다.
나는 그것을 보았고 그것을 제어하기 위해 사용자 정의 LSP (Layered Service Provider) dll 및 COM 인터페이스를 기반으로 합니다. HideMyAss ‘VPN 클라이언트를 설치하지 않고도 사용할 수 있습니다.
HideMyAss의 보안 IP 바인드 설치
- 최신 Windows 설치 프로그램 가져 오기 : https://www.hidemyass.com/downloads
- 7-zip으로 포장을 풉니 다. 동일한 이름을 가진 파일에 대한 경고를 무시하고 안전하게 덮어 쓸 수 있습니다.
bin
압축이 풀린 설치 프로그램 의 폴더로 이동-
이 세 파일을 디스크의 폴더에 복사하십시오 (
C:\HMA_Bind
).- ForceInterfaceCOM.dll
- ForceInterfaceLSP.dll
- InstallLSP.exe
-
넣어
Install.cmd
및Uninstall.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
Install.cmd
관리자 권한 으로 실행하십시오 . 확인하려면, 설치되었는지, 당신은 사용할 수 있습니다 Autoruns를을 :
- 보안 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 제거
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 비트 응용 프로그램이 아닙니다 .
답변
문제에 대한 두 가지 해결책을 생각할 수 있습니다.
-
하나의 네트워크 어댑터 만 사용하는 게임 실행을위한 가상 머신을 만듭니다.
-
게임에서 사용하는 IP 주소의 범위를 알고 있으면이 범위를 특정 어댑터의 게이트웨이로 향하게하는 네트워크 경로를 구성하십시오.
선호 사항을 알고 나면 더 많은 정보를 추가 할 수 있습니다. 예를 들어 1 번 지점에서 선호하는 가상 머신 제품입니다.
답변
두 개의 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
.
답변
forcebindip.exe를 사용할 수 있지만 도우미 응용 프로그램을 코딩해야합니다 (다른 옵션 없음).
- 응용 프로그램은 명령 줄에서받은 매개 변수를 저장합니다
- 응용 프로그램의 이름은 XXXX.EXE입니다.
-
응용 프로그램은 다음을 포함하는 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/