Mise à jour
J'ai trouvé que ForceBindIp transmet en fait des paramètres aux exécutables appelés. Il omet simplement le premier paramètre . J'ai donc modifié mon script pour l'utiliser à la ForceBindIp.exe
place de l'injecteur personnalisé et maintenant il semble que tous les problèmes avec les injectory
exceptions ont disparu et que tout fonctionne.
Voici les étapes et le BindIp.cmd
script modifiés :
Installez ForceBindIp comme d'habitude
Mettez BindIp.cmd
n'importe où sur votre disque (par exemple C:\BindIp\BindIp.cmd
)
BindIp.cmd
scénario:
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
Suivez ensuite les étapes 2 à 6 ci-dessous.
introduction
ForceBindIp ne peut pas injecter automatiquement BindIp.dll
dans les processus enfants et ne transmet pas de paramètres aux exécutables appelés . Mais j'ai pu contourner cela en utilisant les options d'exécution de fichier image dans le registre , le script de traitement par lots et l' injecteur de DLL tiers . Les détails sont ci-dessous.
Théorie
Pour l'utiliser BindIp.dll
sans, ForceBindIp.exe
nous devons savoir comment ils communiquent ( ForceBindIp.exe
doit passer l'adresse IP à la DLL en quelque sorte).
J'ai utilisé IDA gratuitement et j'ai découvert qu'il ForceBindIp.exe
crée une variable d'environnement avec un nom FORCEDIP
qui contient l'adresse BindIp.dll
IP et lit l'adresse IP de cette variable lorsqu'elle est injectée et exécutée dans le processus cible.
Pour détecter le lancement de l'application cible, nous pouvons ajouter une Debugger
clé dans les options d'exécution du fichier image dans le registre pour cet exécutable:
Kernel32! CreateProcess lorsqu'il est appelé sans les indicateurs de création DEBUG_PROCESS ou DEBUG_ONLY_THIS_PROCESS, vérifie le registre pour voir si IFEO a été défini sur l'exécutable qu'il lance. Si oui, il ajoute simplement le chemin du débogueur au nom de l'exécutable, ce qui permet de lancer efficacement l'exécutable sous le débogueur.
Le «débogueur» dans notre cas, sera un script batch, qui définira la FORCEDIP
variable et lancera l' injecteur dll-injector. L' injection démarre alors le processus, passe les arguments de ligne de commande et injecte BindIp.dll
.
Entraine toi
Créez un dossier quelque part ( C:\BindIp
par exemple) et mettez-y ces trois fichiers:
BindIp.cmd
scénario:
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
- Créer une clé de registre (par exemple
LolClient.exe
) pour l'exécutable cible dansHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
Ajoutez une valeur de chaîne à cette clé:
- Nom:
Debugger
- Valeur:
C:\BindIp\BindIp.cmd
Accordez des Users
autorisations complètes sur cette clé (le script devra la modifier à chaque lancement). Ça devrait ressembler à ça:
Définissez l'adresse IP requise dans BindIp.cmd
Répétez les étapes 3 et 4 pour chaque exécutable que vous souhaitez lier ( rad_user_kernel.exe
, LolLauncher.exe
, LolPatcher.exe
, etc.).
Désormais, à chaque fois que vous lancez un exécutable possédant une entrée de registre correspondante, le BindIp.cmd
script se lance à la place et lie ce programme à l'adresse IP souhaitée.
Conclusion
J'ai testé cela sur mon ordinateur portable exécutant Windows 8.1 x64 et j'ai réussi à lier divers programmes ( AIMP 2 , BersIRC , Opera 12.4 ) à un adaptateur Ethernet ou WiFi en utilisant cette technique. Malheureusement, BindIp.dll
c'est 32 bits, donc cela ne fonctionnerait pas avec les processus 64 bits.
LolClient.exe
? EstLolClient.exe
unx86
oux64
exe? Je joue avec un injecteur de DLL tiers et je peux peut-être vous aider, mais j'ai besoin de plus d'informations.