Próbowałem ForceBindIP, ale ma to znaczącą wadę - nie wpływa na dzieci aplikacji, którą próbuję powiązać, wpływa tylko na samą aplikację. Nie może też wymuszać, aby aplikacja zawsze działała przez określony interfejs, należy ją uruchamiać za forcebindip.exe
każdym razem. Staje się to problemem w aplikacjach takich jak League of Legends, w których drzewo procesów wygląda następująco:
Program uruchamiający uruchamia łatkę, łatka uruchamia klienta itp. Mogę wpływać tylko na rodzica wszystkich tych procesów w drzewie, więc rzeczywista gra nie jest związana z interfejsem, który chcę, co sprawia, że to przedsięwzięcie jest bezcelowe.
Czy istnieje bardziej nowoczesna alternatywa dla ForceBindIP dla systemu Windows 7? Na tej stronie jest wiele pytań podobnych do tego, ale są one w większości stare. Może jest teraz lepszy sposób na rozwiązanie tego problemu?
Mój obecny pomysł polega na wykonaniu następujących czynności:
Skonfiguruj lokalny serwer 3proxy powiązany z pożądanym interfejsem.
Uruchom grę za pomocą Proxifier lub podobnego oprogramowania skonfigurowanego do uruchamiania przez lokalny serwer proxy.
Nie jestem pewien, czy to zadziała, ale nawet jeśli tak, wydaje się, że jest to rozwiązanie nieoptymalne. Czy macie jakieś lepsze pomysły?
Edycja: Mój pomysł nie zadziałał :(
Edycja 2: Zasadniczo to, co próbuję osiągnąć, to powiązać kilka aplikacji ze zwykłym interfejsem, gdy VPN jest uruchomiony. Powodem jest to, że przez większość czasu muszę się łączyć przez VPN, ale niektóre aplikacje (takie jak gry) nie działają poprawnie w ten sposób, ze względu na wyższy ping i inne problemy.
LolClient.exe
? Czy lub exe? Zabawiam się aplikatorem DLL innej firmy i może mogę ci pomóc, ale potrzebuję więcej informacji.LolClient.exe
x86
x64
BindIp.dll
jest 32-bitowy, więc nie będzie działać z procesami 64-bitowymi.Odpowiedzi:
Aktualizacja
Odkryłem, że ForceBindIp faktycznie przekazuje parametry do wywoływanych plików wykonywalnych. Po prostu pomija pierwszy parametr . Zmodyfikowałem więc skrypt, aby używał
ForceBindIp.exe
zamiast niestandardowego wtryskiwacza i teraz wygląda na to, że wszystkie problemy zinjectory
wyjątkami zniknęły i wszystko działa.Oto zmodyfikowane kroki i
BindIp.cmd
skrypt:Zainstaluj ForceBindIp jak zwykle
Umieść w
BindIp.cmd
dowolnym miejscu na dysku (np.C:\BindIp\BindIp.cmd
)BindIp.cmd
scenariusz:Następnie wykonaj kroki 2-6 od dołu.
Wprowadzenie
ForceBindIp nie może automatycznie wstrzykiwać
BindIp.dll
do procesów potomnych inie przekazuje parametrów do wywoływanych plików wykonywalnych. Ale udało mi się to obejść, używając opcji wykonania pliku obrazu w rejestrze , skrypcie wsadowym i aplikatorze DLL innej firmy . Szczegóły są poniżej.Teoria
Aby korzystać
BindIp.dll
bezForceBindIp.exe
, musimy dowiedzieć się, w jaki sposób się komunikują (ForceBindIp.exe
musi jakoś przekazać adres IP do dll).Użyłem IDA za darmo i odkryłem, że
ForceBindIp.exe
tworzy zmienną środowiskową o nazwie,FORCEDIP
która przechowuje adres IP iBindIp.dll
odczytuje adres IP z tej zmiennej po jej wstrzyknięciu i wykonaniu w procesie docelowym.Aby wykryć uruchomienie aplikacji docelowej, możemy dodać
Debugger
klucz w Opcjach wykonania pliku obrazu w rejestrze dla tego pliku wykonywalnego:„Debugger” w naszym przypadku będzie skryptem wsadowym, który ustawi
FORCEDIP
zmienną i uruchomi wtryskowy dll-injector. Wtrysk następnie rozpocznie proces, przekaże argumenty wiersza poleceń i wstrzykujeBindIp.dll
.Ćwiczyć
Utwórz folder gdzieś (
C:\BindIp
na przykład) i umieść w nim te trzy pliki:BindIp.dll
BindIp.cmd
BindIp.cmd
scenariusz:LolClient.exe
) Dla docelowego pliku wykonywalnego wHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
Dodaj wartość ciągu do tego klucza:
Debugger
C:\BindIp\BindIp.cmd
Przyznaj
Users
pełne uprawnienia do tego klucza (skrypt będzie musiał go modyfikować przy każdym uruchomieniu). To powinno wyglądać tak:Ustaw wymagany adres IP w
BindIp.cmd
Powtórz kroki 3 i 4 dla każdego pliku wykonywalnego, który chcesz bind (
rad_user_kernel.exe
,LolLauncher.exe
,LolPatcher.exe
, itd.).Teraz za każdym razem, gdy uruchamiasz plik wykonywalny, który ma odpowiedni wpis rejestru,
BindIp.cmd
skrypt uruchamia się zamiast tego i wiąże ten program z pożądanym adresem IP.Wniosek
Przetestowałem to na moim laptopie z systemem Windows 8.1 x64 i byłem w stanie z powodzeniem powiązać różne programy ( AIMP 2 , BersIRC , Opera 12.4 ) z Ethernetem lub kartą WiFi za pomocą tej techniki. Niestety
BindIp.dll
jest 32-bitowy, więc nie działałby z procesami 64-bitowymi.źródło
injectory
czasami mam problemy z--args
opcją. Nie pewny dlaczego.--args
żadnej aplikacjiForceBindIp
faktycznie może przekazać parametry, zobacz moją zaktualizowaną odpowiedź.Znalazłem HideMyAss! Klient VPN ma funkcję Secure IP Bind, która pozwala powiązać aplikacje z interfejsem VPN:
Patrzyłem na to i jest oparty na niestandardowej bibliotece DLL (LSP) i interfejsie COM do jej kontrolowania. I może być (ab) używany bez instalowania klienta VPN HideMyAss.
Instalowanie bezpiecznego powiązania IP HideMyAss
bin
folderu w rozpakowanym instalatorzeSkopiuj te trzy pliki do folderu na dysku (
C:\HMA_Bind
)Umieść
Install.cmd
iUninstall.cmd
do tego folderuInstall.cmd
Uninstall.cmd
Install.cmd
jako administrator . Aby sprawdzić, czy instalacja się powiodła, możesz użyć Autoruns :Windows PowerShell ISE (x86)
lubWindows PowerShell (x86)
, ponieważ składnik COM jest 32-bitowy.Najpierw musisz utworzyć nowy obiekt Secure IP Bind:
A potem możesz nazwać to metodami:
Odinstalowanie Secure IP Bind HideMyAss
Uninstall.cmd
jako Administrator , sprawdź, czy deinstalacja powiodła się przy Autorunach.Przykłady:
Zauważ, że musisz utworzyć bezpieczny obiekt COM Bindowanie IP tylko raz na sesję PowerShell. Poniższe przykłady zakładają, że wykonujesz je w nowej sesji PowerShell, więc zawsze tworzą nowy obiekt COM.
Ustaw IP do łączenia, dodaj
firefox
do powiązanych aplikacji, włącz powiązanie.Globalnie włącz powiązanie IP:
Globalnie wyłącz powiązanie IP:
Usuń aplikację z listy (zatrzymaj wiązanie dla tej aplikacji):
Notatki
Ponieważ Secure IP Bind zaimplementowano jako dll niestandardowego dostawcy usług warstwowych (LSP) , te ograniczenia mają zastosowanie:
Przetestowałem tę metodę z różnymi aplikacjami z mieszanymi wynikami: aplikacje 32-bitowe działają, ale nie 64-bitowe, tzn. Byłem w stanie powiązać 64-bitowy Eksplorator (prawdopodobnie dlatego, że procesy tabulacji są domyślnie 32-bitowe), ale nie 64-bitowa przeglądarka Waterfox lub inne 64-bitowe aplikacje.
źródło
Mogę wymyślić dwa rozwiązania problemu:
Utwórz maszynę wirtualną do uruchamiania gry, która korzysta tylko z jednej karty sieciowej.
Jeśli znasz zakres adresów IP używanych przez grę, zbuduj trasę sieciową, która kieruje ten zakres w stronę bramy określonego adaptera.
Mogę dodać więcej informacji, gdy poznam twoje preferencje. Na przykład w punkcie 1 preferowany produkt maszyny wirtualnej.
źródło
Załóżmy, że masz dwa konta użytkowników systemu Windows:
HomeUser
VpnUser
Po zalogowaniu się na
VpnUser
konto możesz uruchamiać aplikacje (szczególnie wspomniane gry) jakoHomeUser
(Shift + RMB na pliku wykonywalnym -> Uruchom jako inny użytkownik), a aplikacje te uruchamiają procesy potomne jakoHomeUser
. Aplikacje, które uruchomisz w standardowy sposób (skróty, dwukrotne kliknięcie pliku wykonywalnego) będą własnościąVpnUser
.Podczas definiowania połączeń sieciowych systemu Windows istnieje możliwość zezwolenia innym użytkownikom na korzystanie z tego połączenia. Załóżmy, że zdefiniowałeś:
HomeNetwork
wyłącznie dlaHomeUser
VpnNetwork
wyłącznie dlaVpnUser
i dla uproszczenia:
I przypuszczam , że wnioski:
VpnUser
powinien używać tylkoVpnNetwork
.HomeUser
powinien używać tylkoHomeNetwork
.Jeśli moje spekulacje są prawdziwe, to po zalogowaniu się do
VpnUser
konta będą korzystaćVpnNetwork
aplikacje, gdy aplikacje będą uruchamianeHomeUser
zVpnUser
kontaHomeNetwork
.źródło
forcebindip.exe może być używany, ale musisz zakodować aplikację pomocniczą (żadna inna opcja).
Aplikacja ładuje plik XXX.ini, który zawiera np
Aplikacja działa
C: \ path1 \ app_to_run.exe 192.168.10.21 C: \ path1 \ app_to_run.exe Saved_Command_line
Aplikacja kończy się
PROBLEM: ForcebindIP nie przekazuje parametrów do wywoływanego programu. następnie jeśli chcesz przekazać parametry do app_to_run.exe, potrzebujesz bardziej rozwiniętego podejścia, w którym XXX.exe tworzy plik wsadowy, w tym app_to_run.exe i parametry przekazane, ta partia jest następnie wywoływana zamiast app_to_run.exe w punkcie 4.
Możesz także rzucić okiem na niektóre aplikacje GUI zawierające ForcebindIP. Niektóre z nich mogą współpracować z więcej niż jedną aplikacją, ale nie robią tego, czego potrzebujesz.
https://www.raymond.cc/blog/bind-windows-application-to-specific-network-adapter-with-forcebindip/
źródło