Bind aplikasi ke antarmuka jaringan tertentu

17

Saya telah mencoba ForceBindIP, tetapi memiliki kelemahan yang signifikan - ini tidak mempengaruhi anak-anak dari aplikasi yang saya coba ikat, itu hanya mempengaruhi aplikasi itu sendiri. Itu juga tidak bisa memaksa aplikasi untuk selalu dijalankan melalui antarmuka yang ditentukan, itu harus dijalankan forcebindip.exesetiap saat. Ini menjadi masalah dengan aplikasi seperti League of Legends di mana pohon proses terlihat seperti itu:

tangkapan layar

Peluncur menjalankan patcher, patcher menjalankan klien, dll. Saya hanya dapat memengaruhi induk dari semua proses ini di pohon, sehingga permainan sebenarnya tidak terikat dengan antarmuka yang saya inginkan, membuat seluruh usaha ini sia-sia.

Apakah ada alternatif yang lebih modern untuk ForceBindIP untuk Windows 7? Ada banyak pertanyaan yang mirip dengan yang ini di situs ini, tetapi kebanyakan sudah tua. Mungkin sekarang ada cara yang lebih baik untuk menyelesaikan masalah ini?

Ide saya saat ini adalah melakukan hal berikut:

  1. Siapkan server 3proxy lokal yang terikat ke antarmuka yang diinginkan.

  2. Jalankan game melalui Proxifier atau perangkat lunak serupa yang dikonfigurasi untuk dijalankan melalui proxy lokal itu.

Saya tidak yakin apakah itu akan berhasil, tetapi bahkan jika itu akan berhasil, sepertinya solusi yang kurang optimal. Apakah kalian punya ide yang lebih baik?

Sunting: Ide saya tidak berfungsi :(

Sunting 2: Pada dasarnya, apa yang saya coba capai adalah mengikat beberapa aplikasi ke antarmuka biasa, sementara VPN sedang berjalan. Alasannya adalah saya harus terhubung melalui VPN hampir sepanjang waktu, tetapi beberapa aplikasi (seperti game) tidak berfungsi dengan baik dengan cara ini, karena ping yang lebih tinggi dan masalah lainnya.

Victor Marchuk
sumber
Apakah Anda perlu mengikat IP setiap proses di pohon atau hanya LolClient.exe? Apakah LolClient.exea x86atau x64exe? Saya bermain-main dengan injector pihak ketiga dll dan mungkin saya dapat membantu Anda, tapi saya butuh info lebih lanjut.
beatcracker
Apakah Anda mencoba untuk mengikat proses ke antarmuka VPN, atau ke antarmuka biasa?
MariusMatutiae
Apakah ada tujuan spesifik yang ingin Anda capai? Secara default, gim ini tidak membutuhkan koneksi masuk untuk bekerja dengan benar. Apakah Anda mencoba untuk menipu atau merekam / memutar game?
Mario
Saya sudah mencari jawaban untuk pertanyaan dasar ini tetapi untuk host OSX. Kasus penggunaan saya adalah saya memiliki LAN dan WiFi secara bersamaan. LAN ada di jaringan perusahaan terbatas, wi-fi di WAP saya. Saya kadang-kadang membutuhkan browser atau aplikasi untuk hanya menggunakan wi-fi sehingga saya dapat file d / l diblokir oleh firewall kami.
SaxDaddy
1
@ ViktorMarchuk Ya, BindIp.dlladalah 32-bit, sehingga tidak akan bekerja dengan proses 64-bit.
beatcracker

Jawaban:

10

Memperbarui

Saya telah menemukan bahwa ForceBindIp sebenarnya meneruskan parameter ke executable yang disebut. Itu hanya menghilangkan parameter pertama . Jadi saya telah memodifikasi skrip saya untuk digunakan ForceBindIp.exealih-alih injektor khusus dan sekarang sepertinya semua masalah dengan injectorypengecualian telah hilang dan semuanya berfungsi.

Berikut langkah dan BindIp.cmdskrip yang dimodifikasi :

  1. Instal ForceBindIp seperti biasa

  2. Letakkan di BindIp.cmdmana saja di drive Anda (mis. C:\BindIp\BindIp.cmd)

BindIp.cmd naskah:

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

Kemudian ikuti langkah 2-6 dari bawah.


pengantar

ForceBindIp tidak bisa secara otomatis menyuntikkan BindIp.dllke proses anak dan tidak meneruskan parameter ke executable yang disebut . Tapi saya bisa menghindari ini dengan menggunakan Opsi Eksekusi File Gambar di registri , skrip batch dan injector pihak ketiga dll . Detailnya di bawah.

Teori

Untuk menggunakannya BindIp.dlltanpa ForceBindIp.exekita perlu mengetahui bagaimana mereka berkomunikasi ( ForceBindIp.exeentah bagaimana harus mengirimkan alamat IP ke dll).

Saya telah menggunakan IDA gratis dan menemukan bahwa ForceBindIp.exemenciptakan variabel lingkungan dengan nama FORCEDIPyang menyimpan alamat IP dan BindIp.dllmembaca alamat IP dari variabel ini ketika disuntikkan dan dieksekusi dalam proses target.

Untuk mendeteksi peluncuran aplikasi target, kita dapat menambahkan Debuggerkunci di Opsi Eksekusi File Gambar di registri untuk eksekusi ini:

Kernel32! Buat Proses ketika dipanggil tanpa flag penciptaan DEBUG_PROCESS atau DEBUG_ONLY_THIS_PROCESS, periksa registri untuk melihat apakah IFEO telah diatur pada executable yang diluncurkannya. Jika ya, maka itu hanya menambahkan path debugger ke nama yang dapat dieksekusi, secara efektif membuat executable untuk diluncurkan di bawah debugger.

"Debugger" dalam kasus kami, akan menjadi skrip batch, yang akan mengatur FORCEDIPvariabel dan meluncurkan injector, dll-injector. Injeksi kemudian akan memulai proses, meneruskan argumen baris perintah dan menyuntikkan BindIp.dll.

Praktek

  1. Buat folder di suatu tempat ( C:\BindIpmisalnya) dan masukkan ketiga file di dalamnya:

BindIp.cmd naskah:

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. Buat kunci registri (mis. LolClient.exe) Untuk target yang dapat dieksekusi diHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
  2. Tambahkan Nilai String ke kunci ini:

    • Nama: Debugger
    • Nilai: C:\BindIp\BindIp.cmd
  3. Berikan Usersizin penuh pada kunci ini (skrip harus memodifikasinya di setiap peluncuran). Seharusnya terlihat seperti ini:Kunci registri IFEO

  4. Setel alamat IP yang diperlukan di BindIp.cmd

  5. Ulangi langkah 3 dan 4 untuk setiap executable Anda ingin mengikat ( rad_user_kernel.exe, LolLauncher.exe, LolPatcher.exe, dll).

Sekarang, setiap kali Anda meluncurkan executable yang memiliki entri registri yang sesuai, BindIp.cmdskrip akan memulai dan mengikat program ini ke alamat IP yang diinginkan.

Kesimpulan

Saya telah menguji ini pada laptop saya yang menjalankan Windows 8.1 x64 dan berhasil mengikat berbagai program ( AIMP 2 , BersIRC , Opera 12.4 ) ke Ethernet atau adaptor WiFi menggunakan teknik ini. Sayangnya BindIp.dll32-bit, jadi itu tidak akan bekerja dengan proses 64-bit.

beatcracker
sumber
Terima kasih banyak atas penjelasan terperinci! Sayangnya, saya mendapatkan semacam pengecualian dari injeksi: github.com/blole/injectory/issues/4
Victor Marchuk
@ ViktorMarchuk Saya melakukan lebih banyak tes, dan memang, injectoryterkadang ada masalah dengan --argsopsi. Tidak yakin kenapa.
beatcracker
Saya tidak dapat menjalankannya bahkan tanpa --argsdengan aplikasi apa pun
Victor Marchuk
@VictorMarchuk Apakah Anda punya contoh? Saya baru saja mengujinya dengan Opera 12.14 dan command-line - itu berfungsi dengan baik.
beatcracker
@ ViktorMarchuk Tampaknya ForceBindIpbenar - benar dapat melewati parameter, lihat jawaban saya yang diperbarui.
beatcracker
4

Saya telah menemukan HideMyAss! Klien VPN memiliki fitur Secure IP Bind yang memungkinkan untuk mengikat aplikasi ke antarmuka VPN:

Secure IP Bind memungkinkan Anda untuk memaksa aplikasi yang dipilih di komputer Anda hanya berfungsi satu kali terhubung ke server VPN kami. Ini memastikan aplikasi yang dipilih hanya akan bekerja di belakang koneksi terenkripsi yang aman. Jika Anda membuka aplikasi yang dipilih tanpa terhubung ke VPN kami, mereka tidak akan dapat mengakses internet.

Saya telah melihatnya dan didasarkan pada LSP ( kustom Layered Service Provider) dll dan antarmuka COM untuk mengendalikannya. Dan itu dapat (ab) digunakan tanpa menginstal klien VPN HideMyAss.

Menginstal Secure IP Bind HideMyAss '

  1. Dapatkan penginstal Windows terbaru: https://www.hidemyass.com/downloads
  2. Bongkar dengan 7-zip. Abaikan peringatan tentang file dengan nama yang sama, Anda dapat dengan aman menimpanya.
  3. Buka binfolder di penginstal yang belum dikemas
  4. Salin ketiga file tersebut ke folder di disk Anda ( C:\HMA_Bind)

    • ForceInterfaceCOM.dll
    • ForceInterfaceLSP.dll
    • InstallLSP.exe
  5. Masukkan Install.cmddan Uninstall.cmdke folder ini

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. Jalankan Install.cmd sebagai Administrator . Untuk memverifikasi, instalasi berhasil, Anda dapat menggunakan Autoruns :

Penyedia Winsock dalam AUtoruns

  1. Untuk mengontrol Secure IP Bind, Anda harus memanggil metode antarmuka COM. Ini bisa dilakukan di PowerShell. Jika Anda menggunakan OS x64, pastikan untuk meluncurkan Windows PowerShell ISE (x86)atau Windows PowerShell (x86), karena komponen COM adalah 32-bit.

Pertama, Anda harus membuat objek Secure IP Bind baru:

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

Dan kemudian Anda dapat memanggil metode itu:

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

Menghapus Instalasi Secure IP Bind HideMyAss

  1. Jalankan Uninstall.cmd sebagai Administrator , verifikasi bahwa penghapusan instalasi berhasil dengan Autoruns.

Contoh:

Catatan, bahwa Anda harus membuat objek COM IP Bind aman hanya sekali per sesi PowerShell. Contoh di bawah ini mengasumsikan bahwa Anda mengeksekusi mereka dalam sesi PowerShell baru, sehingga mereka selalu membuat objek COM baru.

  • Atur IP untuk diikat, tambahkan firefoxke aplikasi yang terikat, aktifkan pengikatan.

    # 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)
    
  • Aktifkan secara global pengikatan IP:

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Enable binding
    $HmaFbi.SetEnabled($true)
    
  • Nonaktifkan pengikatan IP secara global:

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Disable binding
    $HmaFbi.SetEnabled($false)
    
  • Hapus aplikasi dari daftar (berhenti mengikat untuk aplikasi ini):

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

Catatan

Karena Secure IP Bind diimplementasikan sebagai dll. LSP) , batasan itu berlaku:

LSP telah ditinggalkan sejak Windows Server 2012. Sistem yang menyertakan LSP tidak akan lulus pemeriksaan logo Windows. Aplikasi "metro" gaya Windows 8 yang menggunakan jaringan akan secara otomatis mem-bypass semua LSP.

Saya telah menguji metode ini dengan berbagai aplikasi dengan hasil beragam: aplikasi 32-bit bekerja, tetapi 64-bit tidak, yaitu saya dapat mengikat Explorer 64-bit (mungkin karena proses tabnya 32-bit secara default), tetapi bukan browser Waterfox 64-bit atau aplikasi 64-bit lainnya.

beatcracker
sumber
3

Saya dapat memikirkan dua solusi untuk masalah ini:

  1. Buat mesin virtual untuk menjalankan game, yang hanya menggunakan satu adapter jaringan.

  2. Jika Anda tahu kisaran alamat IP yang digunakan game, buat rute jaringan yang mengarahkan rentang ini ke gateway adaptor khusus.

Saya dapat menambahkan lebih banyak informasi setelah saya tahu preferensi Anda. Misalnya, dalam poin 1 produk mesin virtual pilihan Anda.

harrymc
sumber
1
Menggunakan VM akan menciptakan banyak masalah tambahan, seperti penurunan kinerja dan penggunaan konstan beberapa GB RAM. Ini pilihan terakhir saya, saya benar-benar lebih suka mencapainya dengan cara lain. Saya tidak tahu kisaran pasti IP yang perlu saya ikat, karena saya membutuhkannya untuk semua jenis aplikasi, termasuk perangkat lunak berbagi P2P (torrents). Mungkin ada firewall yang memungkinkan Anda membuat rute berdasarkan koneksi yang dibangun oleh setiap aplikasi?
Victor Marchuk
Kinerja: VM tidak akan mengurangi kinerja jika tidak menggunakan Virtual PC lama. Memori: VMware dan VirtualBox tidak segera mengalokasikan semua memori, jadi hanya memori yang benar-benar dibutuhkan oleh VM yang dialokasikan. Mereka juga memiliki keunggulan tambahan untuk game yang dapat menangguhkan dan melanjutkan VM / game di lain waktu, yang jauh lebih baik daripada kemampuan menyimpan sebagian besar game. Untuk rentang IP: Jika Anda memiliki banyak dari mereka maka hal di atas tidak praktis, juga bukan proxy.
harrymc
1
@harrymc Saya ragu seseorang akan bisa mendapatkan kinerja 3D yang dapat diterima dari VM menggunakan GPU yang diemulasi. Dan akses langsung ke kartu grafis sulit untuk diatur dan membutuhkan VT-D (Intel) atau AMD-Vi yang mampu CPU (dan itu tidak murah).
beatcracker
CPU seperti itu lebih umum daripada yang Anda pikirkan: Daftar perangkat keras yang mendukung IOMMU , tetapi video pass-through mungkin memerlukan dua GPU. Namun, kecuali persyaratan kinerja sangat besar, VM saat ini memberikan kinerja video yang bagus. Menggunakan VM adalah solusi saya untuk game aksi yang kesulitan menerima GPU lanjutan saya, tanpa menemui jeda yang nyata. Sebagian besar produk VM memungkinkan kontrol kartu emulasi, seperti jumlah memori video,
harrymc
2
Jawabannya adalah ya, dan beberapa orang telah berhasil melakukannya. Berikut ini satu referensi: Menyiapkan Windows VM dengan GPU passthrough , tetapi lebih banyak dapat ditemukan.
harrymc
3

Mari kita asumsikan bahwa Anda memiliki dua akun pengguna Windows:

  • HomeUser
  • VpnUser

Saat Anda masuk ke VpnUserakun, Anda dapat menjalankan aplikasi (terutama game yang Anda sebutkan) sebagai HomeUser(Shift + RMB pada file yang dapat dieksekusi -> Jalankan sebagai pengguna lain) dan aplikasi ini menjalankan proses anak-anak mereka sebagai HomeUser. Aplikasi yang akan Anda jalankan dengan cara standar (pintasan, klik dua kali pada file yang dapat dieksekusi) akan dimiliki oleh VpnUser.

Saat Anda mendefinisikan koneksi jaringan Windows, Anda memiliki opsi untuk mengizinkan pengguna lain menggunakan koneksi ini. Mari kita asumsikan bahwa Anda mendefinisikan:

  • HomeNetwork khusus untuk HomeUser
  • VpnNetwork khusus untuk VpnUser

dan untuk penyederhanaan:

  • Tidak ada koneksi jaringan lain di komputer Anda.

Saat ini saya memiliki satu mesin Windows di mana saya tidak bisa banyak mengacaukan dan saya tidak pernah memeriksa pengaturan yang dijelaskan sehingga saya tidak yakin apakah pernyataan di bawah ini benar.

Dugaan saya mungkin terbatas pada Klien VPN bawaan Windows - klien VPN pihak ketiga mana pun memerlukan penyelidikan lebih lanjut.

Saya kira aplikasi itu:

  • Dimiliki oleh VpnUserharus menggunakan saja VpnNetwork.
  • Dimiliki oleh HomeUserharus menggunakan saja HomeNetwork.

Jika spekulasi saya benar, maka ketika Anda masuk ke VpnUseraplikasi akun akan menggunakan VpnNetwork, ketika aplikasi dijalankan HomeUserdari VpnUserakun harus digunakan HomeNetwork.

g2mk
sumber
Saya tidak yakin apa yang Anda maksud. Apakah Anda menyarankan saya harus menggunakan akun pengguna Windows yang berbeda? Bagaimana hal itu membantu mengikat aplikasi spesifik? Sepertinya solusi Anda hanya akan memungkinkan untuk mengaktifkan / menonaktifkan VPN untuk semua aplikasi, tetapi saya sudah dapat melakukannya dengan menghubungkan ke VPN dan memutuskan sambungan darinya.
Victor Marchuk
2
@ ViktorMarchuk Saya telah mengedit jawaban saya - Saya harap ini lebih jelas sekarang ...
g2mk
0

forcebindip.exe dapat digunakan tetapi Anda harus kode aplikasi pembantu (tidak ada opsi lain).

  1. Aplikasi menyimpan parameter yang telah diterima dari baris perintahnya
  2. Aplikasi mendapatkan namanya yaitu XXXX.EXE
  3. Aplikasi memuat XXX.ini yang berisi mis

    app_to_run = C:\path1\app_to_run.exe
    ForceBindIP = C:\path2\ForceBindIP.exe 
    IP          = 192.168.10.21
    
  4. Aplikasi berjalan

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

  5. Aplikasi berakhir

MASALAH: ForcebindIP tidak meneruskan parameter ke program yang dipanggil. maka jika Anda perlu meneruskan parameter ke app_to_run.exe Anda memerlukan pendekatan yang lebih berkembang di mana XXX.exe membuat file batch termasuk app_to_run.exe dan parameter berlalu, batch ini kemudian dipanggil bukan app_to_run.exe pada titik 4.

Anda juga dapat melihat beberapa aplikasi GUI yang membungkus ForcebindIP. Beberapa dari mereka dapat bekerja dengan lebih dari satu aplikasi tetapi mereka tidak melakukan apa yang Anda butuhkan.

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

Menepuk
sumber
Apakah maksud Anda bahwa aplikasi pembantu akan mencegat upaya membuat proses anak dan menjalankannya melalui ForceBindIP? Jika demikian, apakah Anda punya saran tentang cara pendekatan ini?
Victor Marchuk
Kamu benar. aplikasi helper akan memiliki nama setiap exe yang dibungkus dan itu akan berakhir memanggil exe asli yang sesuai melalui ForceBind. Tentu saja Anda perlu beberapa permainan mengganti nama atau direktori untuk menghindari 2 ongkos dengan nama yang sama di bawah direktori yang sama. Aplikasi pembantu ini dapat dengan mudah dikodekan yaitu dalam C
Pat