Atualizar
Descobri que o ForceBindIp, na verdade, está passando parâmetros para os executáveis chamados. Apenas omite o primeiro parâmetro . Então modifiquei meu script para usar ForceBindIp.exe
em vez de um injetor personalizado e agora parece que todos os problemas com injectory
exceções foram eliminados e tudo funciona.
Aqui estão os passos modificados e BindIp.cmd
script:
-
Instale o ForceBindIp como de costume
-
Coloque
BindIp.cmd
em qualquer lugar na sua unidade (por exemplo,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
Em seguida, siga as etapas de 2 a 6 abaixo.
Introdução
O ForceBindIp não pode injetar BindIp.dll
automaticamente nos processos-filhos e não passa os parâmetros para os executáveis chamados . Mas eu fui capaz de contornar isso usando Image Opções de Execução de Arquivos no Registro , script em lote e injetor de dll de terceiros . Detalhes abaixo.
Teoria
Para usar BindIp.dll
sem ForceBindIp.exe
, precisamos descobrir como eles se comunicam ( ForceBindIp.exe
tem que passar o endereço IP para dll de alguma forma).
Eu usei o IDA gratuito e descobri que ForceBindIp.exe
cria uma variável de ambiente com o nome FORCEDIP
que contém o endereço IP e BindIp.dll
lê o endereço IP dessa variável quando é injetado e executado no processo de destino.
Para detectar o lançamento do aplicativo de destino, podemos adicionar uma chave Debugger
nas Opções de Execução de Arquivo de Imagem no registro para este executável:
Kernel32!CreateProcess when called without the DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS creation flags, checks the registry to see if IFEO has been set on the executable that it is launching. If yes, then it simply prepends the debugger path to the executable name, effectively getting the executable to launch under the debugger.
O "Depurador", no nosso caso, será um script em lote, que irá definir a variável FORCEDIP
e lançar a injectoria dll-injector. O Injector então iniciará o processo, passará os argumentos da linha de comando e injetará BindIp.dll
.
Pratique
-
Crie uma pasta em algum lugar (
C:\BindIp
, por exemplo) e coloque esses três arquivos nela:-
BindIp.dll
- injectory.x86.exe
-
BindIp.cmd
-
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
- Crie a chave de registro (por exemplo,
LolClient.exe
) para o executável de destino emHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
-
Adicione um valor de string a esta chave:
- Nome:
Debugger
- Valor:
C:\BindIp\BindIp.cmd
- Nome:
-
Conceder
Users
Permissões completas nessa chave (o script precisará modificá-lo a cada lançamento). Ele deve ficar assim: DefinaoendereçoIPobrigatórioem
BindIp.cmd
Repitaasetapas3e4paracadaexecutávelquevocêdesejavincular(
rad_user_kernel.exe
,LolLauncher.exe
,LolPatcher.exe
,etc.).
Agora,todavezquevocêiniciaroexecutávelquetiveraentradaderegistrocorrespondente,oscriptBindIp.cmd
seráiniciadoevinculadoaesseprogramaaoendereçoIPdesejado.
Conclusão
EutesteiissonomeulaptopexecutandooWindows8.1x64efoicapazdevincularcomêxitováriosprogramas(BindIp.dll
é de 32 bits, então não funcionaria com processos de 64 bits.