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 em ForceBindIp.exe
vez do injetor personalizado e agora parece que todos os problemas com injectory
exceções se foram e tudo funciona.
Aqui estão as etapas e o BindIp.cmd
script modificados :
Instale o ForceBindIp como de costume
Coloque em BindIp.cmd
qualquer lugar da sua unidade (por exemplo C:\BindIp\BindIp.cmd
)
BindIp.cmd
roteiro:
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 2 a 6 abaixo.
Introdução
O ForceBindIp não pode injetar automaticamente BindIp.dll
processos filho e não passa parâmetros para os executáveis chamados . Mas consegui contornar isso usando as Opções de execução de arquivo de imagem no registro , script em lote e injetor de DLL de terceiros . Os detalhes estão 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 a DLL de alguma forma).
Usei o IDA gratuitamente e descobri que ForceBindIp.exe
cria uma variável de ambiente com o nome FORCEDIP
que contém o endereço BindIp.dll
IP e lê o endereço IP dessa variável quando injetada e executada no processo de destino.
Para detectar o lançamento do aplicativo de destino, podemos adicionar uma Debugger
chave nas Opções de execução do arquivo de imagem no registro para este executável:
O Kernel32! CreateProcess, quando chamado sem os sinalizadores de criação DEBUG_PROCESS ou DEBUG_ONLY_THIS_PROCESS, verifica o registro para ver se o IFEO foi definido no executável que está sendo iniciado. Se sim, simplesmente precede o caminho do depurador ao nome do executável, efetivamente fazendo com que o executável seja iniciado no depurador.
O "Depurador", no nosso caso, será um script em lote, que definirá a FORCEDIP
variável e iniciará o injetor dll-injector. O injetor iniciará o processo, transmitirá argumentos da linha de comando e injetará BindIp.dll
.
Prática
Crie uma pasta em algum lugar ( C:\BindIp
por exemplo) e coloque esses três arquivos nela:
BindIp.cmd
roteiro:
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 do registro (por exemplo
LolClient.exe
) para o executável de destino noHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
Adicione o valor da cadeia a esta chave:
- Nome:
Debugger
- Valor:
C:\BindIp\BindIp.cmd
Conceda Users
permissões totais a essa chave (o script precisará modificá-lo a cada inicialização). Deve ficar assim:
Defina o endereço IP necessário em BindIp.cmd
Repita os passos 3 e 4 para cada arquivo executável que você deseja bind ( rad_user_kernel.exe
, LolLauncher.exe
, LolPatcher.exe
, etc.).
Agora, toda vez que você iniciar o executável com entrada de registro correspondente, o BindIp.cmd
script será iniciado e vinculará esse programa ao endereço IP desejado.
Conclusão
Eu testei isso no meu laptop executando o Windows 8.1 x64 e consegui vincular vários programas ( AIMP 2 , BersIRC , Opera 12.4 ) ao adaptador Ethernet ou WiFi usando esta técnica. Infelizmente, BindIp.dll
é de 32 bits, portanto não funcionaria com processos de 64 bits.
LolClient.exe
? ÉLolClient.exe
umx86
oux64
exe? Estou brincando com o injetor de DLL de terceiros e talvez eu possa ajudá-lo, mas preciso de mais informações.