Uygulamayı belirli bir ağ arabirimine bağlama


17

ForceBindIP'i denedim, ancak önemli bir dezavantajı var - bağlamaya çalıştığım uygulamanın çocuklarını etkilemiyor, sadece uygulamanın kendisini etkiliyor. Ayrıca bir uygulamayı her zaman belirtilen bir arabirimden çalışmaya zorlayamaz, forcebindip.exeher seferinde çalıştırılması gerekir . Proses ağacının şöyle göründüğü League of Legends gibi uygulamalarda sorun olur:

ekran görüntüsü

Başlatıcı yamalı çalıştırır, yamalı istemci çalıştırır, vb. Sadece ağaçtaki tüm bu süreçlerin ebeveynini etkileyebilirim, bu yüzden gerçek oyun istediğim arayüze bağlı değildir, bu tüm girişimi anlamsız hale getirir.

Windows 7 için ForceBindIP'e daha modern bir alternatif var mı? Bu sitede buna benzer birçok soru var, ancak çoğunlukla eski. Belki şimdi bu sorunu çözmenin daha iyi bir yolu var mı?

Şu anki fikrim aşağıdakileri yapmak:

  1. İstenen arabirime bağlı yerel 3proxy sunucuyu ayarlayın.

  2. Oyunu Proxifier veya bu yerel proxy üzerinden çalışacak şekilde yapılandırılmış benzer bir yazılımla çalıştırın.

Bunun işe yarayıp yaramayacağından emin değilim, ama işe yarayacak olsa bile, en uygun çözüm gibi görünüyor. Daha iyi fikirleriniz var mı?

Düzenleme: Fikrim işe yaramadı :(

Edit 2: Temel olarak, elde etmeye çalıştığım şey, VPN çalışırken birkaç uygulamayı normal bir arayüze bağlamak. Bunun nedeni çoğu zaman VPN üzerinden bağlanmam gerekiyor, ancak bazı uygulamalar (oyunlar gibi) daha yüksek ping ve diğer sorunlar nedeniyle bu şekilde düzgün çalışmıyor.


Ağaçtaki her işlemi IP'ye mi bağlamanız gerekiyor LolClient.exe? Mı LolClient.exebir x86veya x64exe? Ben üçüncü taraf dll enjektör ile oynuyor ve belki ben size yardımcı olabilir, ama daha fazla bilgiye ihtiyacım var.
beatcracker

İşlemi VPN arayüzüne mi, yoksa normal arayüze mi bağlamaya çalışıyorsunuz?
MariusMatutiae

Ulaşmaya çalıştığınız belirli bir hedef var mı? Varsayılan olarak, oyunun düzgün çalışması için herhangi bir gelen bağlantıya ihtiyacı yoktur. Oyunları kandırmaya veya kaydetmeye / oynatmaya mı çalışıyorsunuz?
Mario

Bu temel sorunun cevabını arıyordum ama OSX ana bilgisayarları için. Benim kullanım durumum aynı anda LAN ve WiFi var. LAN kısıtlı bir şirket ağında, WAP ağımda wi-fi var. Bazen güvenlik duvarımız tarafından engellenen dosyaları d / l yapabilmem için yalnızca wi-fi kullanmak için bir tarayıcıya veya uygulamaya ihtiyacım var .
SaxDaddy

1
@VictorMarchuk Evet, BindIp.dll32 bit, bu nedenle 64 bit işlemlerle çalışmaz.
beatcracker

Yanıtlar:


10

Güncelleme

Ben ForceBindIp aslında çalıştırılan çalıştırılabilir parametrelere geçiyor bulduk. Sadece ilk parametreyi atlar . Bu yüzden ForceBindIp.exeözel enjektör yerine kullanmak için betiğimi değiştirdim ve şimdi injectoryistisnalarla ilgili tüm sorunlar gitti ve her şey çalışıyor gibi görünüyor .

Değiştirilmiş adımlar ve BindIp.cmdkomut dosyası:

  1. ForceBindIp'i her zamanki gibi yükleyin

  2. BindIp.cmdSürücünüzde herhangi bir yere koyun (ör. C:\BindIp\BindIp.cmd)

BindIp.cmd senaryo:

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

Ardından aşağıdan 2-6 arasındaki adımları izleyin.


Giriş

ForceBindIp otomatik BindIp.dllolarak alt süreçlere enjekte edilemez ve çağrılan yürütülebilir dosyalara parametre iletmez . Ama ben kayıt defteri , toplu komut dosyası ve üçüncü taraf dll enjektör Görüntü Dosyası Yürütme Seçenekleri kullanarak bu başardı . Detaylar aşağıda.

teori

BindIp.dllOlmadan kullanmak ForceBindIp.exeiçin nasıl iletişim kurduklarını öğrenmek gerekir (bir ForceBindIp.exeşekilde dll IP adresi geçmek zorunda).

Ben IDA ücretsiz kullandım ve IP adresi tutan ve hedef sürecinde enjekte ve yürütüldüğünde bu değişkenden IP adresini okur ForceBindIp.exeadıyla ortam değişkeni oluşturur bulundu .FORCEDIPBindIp.dll

Hedef uygulama başlatmayı algılamak Debuggeriçin, bu yürütülebilir dosya için kayıt defterindeki Görüntü Dosyası Yürütme Seçeneklerine bir anahtar ekleyebiliriz :

Kernel32! CreateProcess, DEBUG_PROCESS veya DEBUG_ONLY_THIS_PROCESS oluşturma bayrakları olmadan çağrıldığında, IFEO'nun başlattığı yürütülebilir dosyada ayarlanıp ayarlanmadığını görmek için kayıt defterini kontrol eder. Evetse, çalıştırılabilir dosyanın hata ayıklayıcı yolunu etkin bir şekilde hata ayıklama altında başlatmasını sağlar.

Bizim durumumuzda "Hata Ayıklayıcı", FORCEDIPdeğişken kuracak ve dll-enjektör enjeksiyonu başlatacak bir toplu komut olacak . Daha sonra Injectory işlemi başlatır, komut satırı argümanlarını iletir ve enjekte eder BindIp.dll.

Uygulama

  1. Bir yerde klasör oluşturun ( C:\BindIpörneğin) ve bu üç dosyayı içine yerleştirin:

BindIp.cmd senaryo:

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.exeHedef yürütülebilir dosya için kayıt defteri anahtarı oluşturun (örn. )HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
  2. Bu anahtara Dize Değeri ekleyin:

    • Ad: Debugger
    • Değeri: C:\BindIp\BindIp.cmd
  3. Grant Usersbu anahtarının tam izinleri (script her açılışında değiştirmek zorunda kalacak). Şöyle görünmelidir:IFEO kayıt defteri anahtarı

  4. Gerekli IP adresini BindIp.cmd

  5. Tekrarlayın (bağlama istediğiniz her yürütülebilir için 3. ve 4. adımları rad_user_kernel.exe, LolLauncher.exe, LolPatcher.exevb.)

Şimdi, karşılık gelen kayıt defteri girdisine sahip yürütülebilir dosyayı her başlattığınızda, BindIp.cmdkomut dosyası bunun yerine başlatılır ve bu programı istenen IP adresine bağlar.

Sonuç

Bunu Windows 8.1 x64 çalıştıran dizüstü bilgisayarımda test ettim ve bu tekniği kullanarak çeşitli programları ( AIMP 2 , BersIRC , Opera 12.4 ) Ethernet veya WiFi adaptörüne başarıyla bağlayabildim . Ne yazık ki BindIp.dll32 bit, bu yüzden 64 bit işlemlerle çalışmaz.


Ayrıntılı bir açıklama için çok teşekkür ederim! Ne yazık ki, iğneden bir
Victor Marchuk

@VictorMarchuk Daha fazla test yaptım ve gerçekten de injectorybazen seçenekle ilgili sorunlar var --args. Emin değilim neden.
beatcracker

--argsHerhangi bir uygulama olmadan bile çalıştıramadım
Victor Marchuk

@VictorMarchuk Bir örnek var mı? Opera 12.14 ve komut satırı ile test ettim - iyi çalıştı.
beatcracker

@VictorMarchuk Görünüşe göre ForceBindIpparametreleri geçebilir, güncellenmiş cevabımı görün.
beatcracker

4

HideMyAss'ı buldum ! VPN istemcisi, uygulamaları VPN arayüzüne bağlamaya izin veren Güvenli IP Bağlama özelliğine sahiptir:

Güvenli IP Bağlama, bilgisayarınızdaki seçili uygulamaları yalnızca VPN sunucularımıza bağlandıktan sonra çalışmaya zorlamanıza olanak tanır. Bu, seçilen uygulamaların yalnızca güvenli şifreli bir bağlantının arkasında çalışmasını sağlar. Seçili uygulamaları VPN'imize bağlı olmadan açarsanız, internete erişemezler.

Ben baktım ve özel bir Katmanlı Servis Sağlayıcı (LSP) dll ve kontrol etmek için COM arayüzü dayanmaktadır . Ve (ab) HideMyAss'ın VPN istemcisini kurmadan kullanılabilir.

HideMyAss'ın Güvenli IP Bağlamasını Kurma

  1. En son Windows yükleyicisini edinin: https://www.hidemyass.com/downloads
  2. 7-zip ile ambalajından çıkarın. Aynı ada sahip dosyalar hakkındaki uyarıları yoksayın, bunların üzerine güvenle yazabilirsiniz.
  3. binPaketi açılmış yükleyicideki klasöre gidin
  4. Bu üç dosyayı diskinizdeki bir klasöre kopyalayın ( C:\HMA_Bind)

    • ForceInterfaceCOM.dll
    • ForceInterfaceLSP.dll
    • InstallLSP.exe
  5. Install.cmdVe Uninstall.cmdbu klasöre koy

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 Yönetici olarak çalıştır . Doğrulamak için, yüklemenin başarılı olduğunu, kullanabilirsiniz Autoruns :

AUtoruns'ta Winsock Sağlayıcıları

  1. Güvenli IP Bağlamasını kontrol etmek için COM arabirimi yöntemlerini çağırmanız gerekir. Bu, PowerShell'de yapılabilir. Eğer x64 OS üzerinde iseniz, emin başlatmak için olmak Windows PowerShell ISE (x86)ya da Windows PowerShell (x86)COM bileşeni 32 bit olduğu için.

İlk olarak, yeni Güvenli IP Bağlama nesnesi oluşturmanız gerekir:

# Create new Secure IP Bind COM object
$HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop

Ve sonra onun yöntemleri diyebilirsiniz:

# 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 yazılımını kaldırmak

  1. Uninstall.cmd Yönetici olarak çalıştır , Otomatik Çalıştırma ile kaldırma işleminin başarılı olduğunu doğrulayın.

Örnekler:

Her PowerShell oturumu için yalnızca bir kez güvenli IP Bağlama COM nesnesi oluşturmanız gerektiğini unutmayın. Aşağıdaki örneklerde, bunları yeni bir PowerShell oturumunda yürüttüğünüz varsayılır, böylece her zaman yeni COM nesnesi oluştururlar.

  • IP'yi bağlanacak, firefoxbağlı uygulamalara eklenecek , bağlanmayı etkinleştirecek şekilde ayarlayın.

    # 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 bağlayıcıyı global olarak etkinleştir:

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Enable binding
    $HmaFbi.SetEnabled($true)
    
  • IP bağlanmasını genel olarak devre dışı bırakın:

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Disable binding
    $HmaFbi.SetEnabled($false)
    
  • Uygulamayı listeden kaldır (bu uygulama için bağlanmayı durdur):

    # 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()
    

notlar

Güvenli IP Bağlama özel Katmanlı Hizmet Sağlayıcı (LSP) dll olarak uygulandığından, bu sınırlamalar geçerlidir:

LSP'ler Windows Server 2012'den beri kullanımdan kaldırılmıştır. LSP içeren sistemler Windows logo denetimlerini geçmez. Ağ kullanan Windows 8 stili "metro" uygulamaları tüm LSP'leri otomatik olarak atlar.

Bu yöntemi karışık sonuçlarla çeşitli uygulamalarla test ettim: 32 bit uygulamalar çalışıyor, ancak 64 bit değil, yani 64 bit Explorer'ı bağlayabildim (muhtemelen sekme işlemleri varsayılan olarak 32 bit olduğu için), ancak 64 bit Waterfox tarayıcısı veya diğer 64 bit uygulamalar değil.


3

Soruna iki çözüm düşünebilirim:

  1. Oyunu çalıştırmak için yalnızca bir ağ bağdaştırıcısını kullanan bir sanal makine oluşturun.

  2. Oyunun kullandığı IP adresleri aralığını biliyorsanız, bu aralığı belirli bir bağdaştırıcının ağ geçidine yönlendiren bir ağ yolu oluşturun.

Tercihlerinizi öğrendikten sonra daha fazla bilgi ekleyebilirim. Örneğin, 1. noktada tercih ettiğiniz sanal makine ürünüdür.


1
VM kullanmak, düşük performans ve birkaç GB RAM'in sürekli kullanımı gibi birçok ek sorun yaratacaktır. Bu benim son çare seçeneğim, gerçekten başka bir şekilde başarmayı tercih ederim. Bağlamam gereken IP'lerin tam aralığını bilmiyorum, çünkü p2p paylaşım yazılımı (torrentler) dahil olmak üzere her türlü uygulama için ihtiyacım var. Belki de her uygulamanın oluşturduğu bağlantılara göre rota oluşturmanıza izin veren bir güvenlik duvarı vardır?
Victor Marchuk

Performans: Bir VM, eski Sanal PC'yi kullanmazsa düşük performansa neden olmaz. Bellek: VMware ve VirtualBox tüm belleği hemen ayırmaz, bu nedenle yalnızca VM'nin gerçekten ihtiyaç duyduğu bellek ayrılır. Ayrıca, VM / oyunu daha sonra askıya alma ve devam ettirme oyununun ek avantajına da sahiptir, bu da çoğu oyunun kaydetme yeteneklerinden çok daha iyidir. IP aralıkları için: Bunların çoğuna sahipseniz, yukarıdakiler pratik değildir veya bir proxy değildir.
harrymc

1
@harrymc Öykünülmüş GPU kullanarak VM'den kabul edilebilir bir 3D performans elde edebileceğinden şüpheliyim. Ve grafik kartına doğrudan erişim kurulumu zor ve VT-D (Intel) veya AMD-Vi özellikli CPU gerektiriyor (ve bunlar ucuz değil).
beatcracker

Bu tür CPU'lar düşündüğünüzden daha yaygındır: IOMMU destekli donanımların listesi , ancak doğrudan geçiş video için iki GPU gerekebilir. Ancak, performans gereksinimleri muazzam değilse, günümüzde bir VM iyi video performansı sağlar. VM kullanmak, gelişmiş bir GPU'umu kabul etmekte zorlanan aksiyon oyunları için fark edilir bir gecikmeyle karşılaşmadan çözümümdür. Çoğu VM ürünü, video belleği miktarı gibi taklit kartın bir miktar kontrolüne izin verir
harrymc

2
Cevap evet ve bazı insanlar bunu başardı. İşte bir referans: GPU geçişi ile bir Windows VM kurma , ancak daha fazlası bulunabilir.
harrymc

3

İki Windows kullanıcı hesabınız olduğunu varsayalım:

  • HomeUser
  • VpnUser

VpnUserHesaba giriş yaptığınızda uygulamaları (özellikle bahsettiğiniz oyunları) HomeUser(yürütülebilir dosyada Shift + RMB -> Diğer kullanıcı olarak çalıştır) olarak çalıştırabilirsiniz ve bu uygulamalar alt işlemlerini şu şekilde çalıştırır HomeUser. Standart bir şekilde çalıştıracağınız uygulamalara (kısayollar, yürütülebilir dosyaya çift tıklayın) sahip olunacaktır VpnUser.

Windows ağ bağlantılarını tanımlarken, diğer kullanıcıların bu bağlantıyı kullanmasına izin verme seçeneğiniz vardır. Diyelim ki tanımladığınız:

  • HomeNetwork münhasıran HomeUser
  • VpnNetwork münhasıran VpnUser

ve basitleştirmek için:

  • Bilgisayarınızda başka ağ bağlantısı yok.

Şu anda üzerinde çok karışıklık olamaz tek bir Windows makine var ve ben feryat deyimi doğru olup olmadığından emin değilim bu yüzden açıklanan ayarı hiç kontrol etmedim.

Tahminim Windows dahili VPN İstemcisi ile sınırlı olabilir - herhangi bir üçüncü taraf VPN istemcisi daha fazla araştırma gerektirir.

Ben sanırım o uygulamaları:

  • Sahip olunan VpnUsersadece kullanmalısınız VpnNetwork.
  • Sahip olunan HomeUsersadece kullanmalısınız HomeNetwork.

Benim ise spekülasyon doğrudur şuraya giriş yaptığınızda, daha sonra VpnUserhesap uygulamaları kullanacak VpnNetworkuygulamalar olarak çalıştırdığınızda, HomeUserdan VpnUserkullanmalıdır hesaba HomeNetwork.


Neyi kastettiğinden emin değilim. Farklı bir Windows kullanıcı hesabı kullanmamı mı öneriyorsunuz? Bu, belirli uygulamaların bağlanmasına nasıl yardımcı olur? Çözümünüz yalnızca tüm uygulamalar için VPN'yi etkinleştirmeye / devre dışı bırakmaya izin veriyor gibi görünüyor, ancak bunu zaten VPN'ye bağlanıp bağlantısını keserek yapabilirim.
Victor Marchuk

2
@VictorMarchuk Cevabımı düzenledim - Umarım şimdi daha açıktır ...
g2mk

0

forcebindip.exe kullanılabilir, ancak bir yardımcı uygulamayı kodlamanız gerekir (başka bir seçenek yoktur).

  1. Uygulama, komut satırından alınan parametreleri kaydeder
  2. Uygulama adını almak yani XXXX.EXE
  3. Uygulama ie içeren XXX.ini dosyasını yükler

    app_to_run = C:\path1\app_to_run.exe
    ForceBindIP = C:\path2\ForceBindIP.exe 
    IP          = 192.168.10.21
    
  4. Uygulama çalışır

    C: \ path1 \ app_to_run.exe 192.168.10.21 C: \ path1 \ app_to_run.exe Kaydedildi_Command_line

  5. Uygulama sona eriyor

SORUN: ForcebindIP çağrılan programa parametre iletmiyor. parametreleri app_to_run.exe'ye geçirmeniz gerekiyorsa, XXX.exe'nin app_to_run.exe ve geçirilen parametreler de dahil olmak üzere bir toplu iş dosyası oluşturduğu daha gelişmiş bir yaklaşıma ihtiyacınız vardır, bu toplu iş daha sonra 4. noktada app_to_run.exe yerine çağrılır.

ForcebindIP'i saran bazı GUI uygulamalarına da göz atabilirsiniz. Bazıları birden fazla uygulama ile çalışabilir, ancak ihtiyacınız olanı yapmazlar.

https://www.raymond.cc/blog/bind-windows-application-to-specific-network-adapter-with-forcebindip/


Yardımcı uygulamanın bir alt süreç oluşturma girişimini durdurup bunun yerine ForceBindIP üzerinden çalıştırmasını mı kastediyorsunuz? Eğer öyleyse, buna nasıl yaklaşacağınız konusunda herhangi bir öneriniz var mı?
Victor Marchuk

Haklısın. yardımcı uygulama her sarılmış exe adını alacak ve ForceBind aracılığıyla ilgili orijinal exe çağırmak sona erecek. Tabii ki burada aynı ad altında aynı adla 2 exes önlemek için bazı yeniden adlandırma veya dizin oyunu gerekir. Bu yardımcı uygulama kolayca kodlanabilir yani C
Pat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.