Aggiornare
Ho scoperto che ForceBindIp in effetti sta passando parametri ai file eseguibili chiamati. Omette solo il primo parametro . Quindi ho modificato il mio script per usarlo al ForceBindIp.exe
posto dell'iniettore personalizzato e ora sembra che tutti i problemi con le injectory
eccezioni siano spariti e tutto funzioni .
Ecco passaggi e BindIp.cmd
script modificati :
Installa ForceBindIp come al solito
Metti BindIp.cmd
ovunque sul tuo disco (ad es. C:\BindIp\BindIp.cmd
)
BindIp.cmd
script:
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
Quindi seguire i passaggi 2-6 dal basso.
introduzione
ForceBindIp non può iniettare automaticamente BindIp.dll
nei processi figlio e non passa parametri ai file eseguibili chiamati . Ma sono stato in grado di aggirare questo problema utilizzando le opzioni di esecuzione dei file di immagine nel registro , negli script batch e nell'iniettore di dll di terze parti . I dettagli sono sotto.
Teoria
Per utilizzarlo BindIp.dll
senza, ForceBindIp.exe
dobbiamo scoprire come comunicano ( ForceBindIp.exe
deve in qualche modo passare l'indirizzo IP alla dll).
Ho usato IDA gratuitamente e ho scoperto che ForceBindIp.exe
crea una variabile di ambiente con nome FORCEDIP
che contiene l'indirizzo BindIp.dll
IP e legge l'indirizzo IP da questa variabile quando viene iniettato ed eseguito nel processo di destinazione.
Per rilevare l'avvio dell'applicazione di destinazione, è possibile aggiungere una Debugger
chiave nelle Opzioni di esecuzione del file immagine nel registro per questo eseguibile:
Kernel32! CreateProcess quando chiamato senza i flag di creazione DEBUG_PROCESS o DEBUG_ONLY_THIS_PROCESS, controlla il registro per verificare se IFEO è stato impostato sull'eseguibile che sta avviando. In caso affermativo, semplicemente antepone il percorso del debugger al nome dell'eseguibile, facendo in modo che l'eseguibile si avvii sotto il debugger.
Il "Debugger" nel nostro caso sarà uno script batch, che imposterà la FORCEDIP
variabile e lancerà l' iniettore dll-injector. Injectory quindi avvierà il processo, passerà gli argomenti della riga di comando e inietterà BindIp.dll
.
Pratica
Crea una cartella da qualche parte ( C:\BindIp
ad esempio) e inserisci questi tre file:
BindIp.cmd
script:
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
- Creare una chiave di registro (ad es.
LolClient.exe
) Per l'eseguibile di destinazione inHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
Aggiungi valore stringa a questa chiave:
- Nome:
Debugger
- Valore:
C:\BindIp\BindIp.cmd
Concedi le Users
autorizzazioni complete per questa chiave (lo script dovrà modificarlo ad ogni avvio). Dovrebbe sembrare come questo:
Impostare l'indirizzo IP richiesto in BindIp.cmd
Ripetere i punti 3 e 4 per ogni file eseguibile che si desidera bind ( rad_user_kernel.exe
, LolLauncher.exe
, LolPatcher.exe
, etc.).
Ora, ogni volta che avvii un file eseguibile con la corrispondente voce di registro, lo BindIp.cmd
script verrà invece avviato e assocerà questo programma all'indirizzo IP desiderato.
Conclusione
Ho provato questo sul mio laptop con Windows 8.1 x64 e sono riuscito a legare con successo vari programmi ( AIMP 2 , BersIRC , Opera 12.4 ) all'adattatore Ethernet o WiFi usando questa tecnica. Purtroppo BindIp.dll
è a 32 bit, quindi non funzionerebbe con i processi a 64 bit.
LolClient.exe
? ÈLolClient.exe
unx86
ox64
exe? Sto giocando con iniettore dll di terze parti e forse posso aiutarti, ma ho bisogno di maggiori informazioni.