Actualizar
Descubrí que ForceBindIp de hecho está pasando parámetros a los ejecutables llamados. Simplemente omite el primer parámetro . Así que modifiqué mi script para usarlo en ForceBindIp.exe
lugar del inyector personalizado y ahora parece que todos los problemas con injectory
excepciones han desaparecido y todo funciona.
Aquí hay pasos y BindIp.cmd
guiones modificados :
Instale ForceBindIp como de costumbre
Poner en BindIp.cmd
cualquier lugar de su disco (por ejemplo C:\BindIp\BindIp.cmd
)
BindIp.cmd
guión:
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
Luego siga los pasos 2-6 desde abajo.
Introducción
ForceBindIp no puede inyectar automáticamente BindIp.dll
a procesos secundarios y no pasa parámetros a los ejecutables llamados . Pero pude evitar esto mediante el uso de las opciones de ejecución de archivos de imagen en el registro , secuencia de comandos por lotes e inyector dll de terceros . Los detalles están abajo.
Teoría
Para usar BindIp.dll
sin ForceBindIp.exe
necesidad de averiguar cómo se comunican ( ForceBindIp.exe
tiene que pasar la dirección IP para dll de alguna manera).
Utilicé IDA gratis y descubrí que ForceBindIp.exe
crea una variable de entorno con un nombre FORCEDIP
que contiene la dirección BindIp.dll
IP y lee la dirección IP de esta variable cuando se inyecta y ejecuta en el proceso de destino.
Para detectar el inicio de la aplicación de destino, podemos agregar una Debugger
clave en las Opciones de ejecución de archivos de imagen en el registro para este ejecutable:
Kernel32! CreateProcess cuando se llama sin los indicadores de creación DEBUG_PROCESS o DEBUG_ONLY_THIS_PROCESS, comprueba el registro para ver si IFEO se ha configurado en el ejecutable que se está iniciando. En caso afirmativo, simplemente antepone la ruta del depurador al nombre del ejecutable, logrando que el ejecutable se inicie bajo el depurador.
El "depurador" en nuestro caso, será un script por lotes, que establecerá FORCEDIP
variables y lanzará el inyector dll inyector. Inyector comenzará el proceso, pasará los argumentos de la línea de comandos e inyectará BindIp.dll
.
Práctica
Cree una carpeta en algún lugar ( C:\BindIp
por ejemplo) y ponga esos tres archivos en ella:
BindIp.cmd
guión:
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
- Crear clave de registro (por ejemplo
LolClient.exe
) para el ejecutable de destino enHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
Agregue valor de cadena a esta clave:
- Nombre:
Debugger
- Valor:
C:\BindIp\BindIp.cmd
Otorgue Users
permisos completos sobre esta clave (el script deberá modificarla en cada lanzamiento). Debe tener un aspecto como este:
Establecer la dirección IP requerida en BindIp.cmd
Repita los pasos 3 y 4 para cada archivo ejecutable que desea bind ( rad_user_kernel.exe
, LolLauncher.exe
, LolPatcher.exe
, etc.).
Ahora, cada vez que inicie un ejecutable que tenga la entrada de registro correspondiente, el BindIp.cmd
script se iniciará y vinculará este programa a la dirección IP deseada.
Conclusión
Probé esto en mi computadora portátil con Windows 8.1 x64 y pude vincular con éxito varios programas ( AIMP 2 , BersIRC , Opera 12.4 ) a un adaptador Ethernet o WiFi utilizando esta técnica. Lamentablemente BindIp.dll
es de 32 bits, por lo que no funcionaría con procesos de 64 bits.
LolClient.exe
? EsLolClient.exe
unx86
ox64
exe? Estoy jugando con un inyector dll de terceros y tal vez pueda ayudarte, pero necesito más información.