Aktualisieren
Ich habe festgestellt, dass ForceBindIp tatsächlich Parameter an die aufgerufenen ausführbaren Dateien übergibt. Der erste Parameter wird einfach weggelassen . Deshalb habe ich mein Skript so geändert, dass es ForceBindIp.exe
anstelle des benutzerdefinierten Injektors verwendet wird. Nun scheinen alle Probleme mit injectory
Ausnahmen behoben zu sein und alles funktioniert.
Hier ist modifizierte Schritte und BindIp.cmd
Skript:
Installieren Sie ForceBindIp wie gewohnt
Stellen Sie BindIp.cmd
irgendwo auf Ihrem Laufwerk (zB C:\BindIp\BindIp.cmd
)
BindIp.cmd
Skript:
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
Befolgen Sie dann die Schritte 2-6 von unten.
Einführung
ForceBindIp kann nicht automatisch BindIp.dll
in untergeordnete Prozesse einfügen und übergibt keine Parameter an die aufgerufenen ausführbaren Dateien . Ich konnte dies jedoch umgehen, indem ich die Ausführungsoptionen für Bilddateien in der Registrierung , im Stapelskript und im DLL-Injektor eines Drittanbieters verwendete . Details sind unten.
Theorie
Um BindIp.dll
ohne zu verwenden ForceBindIp.exe
, müssen wir herausfinden, wie sie kommunizieren ( ForceBindIp.exe
muss IP-Adresse irgendwie an DLL übergeben).
Ich habe IDA free verwendet und festgestellt, dass ForceBindIp.exe
eine Umgebungsvariable mit einem Namen erstellt wird FORCEDIP
, der die IP-Adresse enthält und BindIp.dll
die IP-Adresse aus dieser Variablen liest, wenn sie im Zielprozess injiziert und ausgeführt wird.
Um den Start der Zielanwendung zu erkennen, können wir einen Debugger
Schlüssel in den Ausführungsoptionen für Bilddateien in der Registrierung für diese ausführbare Datei hinzufügen :
Wenn Kernel32! CreateProcess ohne die Erstellungsflags DEBUG_PROCESS oder DEBUG_ONLY_THIS_PROCESS aufgerufen wird, wird in der Registrierung überprüft, ob IFEO für die ausführbare Datei festgelegt wurde, die gestartet wird. Wenn ja, wird der Debugger-Pfad einfach dem Namen der ausführbaren Datei vorangestellt, sodass die ausführbare Datei unter dem Debugger gestartet wird.
Der "Debugger" in unserem Fall ist ein Batch-Skript, das die FORCEDIP
Variable setzt und den Injectory- DLL-Injector startet . Injectory startet dann den Prozess, übergibt Befehlszeilenargumente und injiziert BindIp.dll
.
Trainieren
Erstellen Sie irgendwo einen Ordner ( C:\BindIp
zum Beispiel) und legen Sie diese drei Dateien darin ab:
BindIp.cmd
Skript:
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
- Erstellen Sie einen Registrierungsschlüssel (z. B.
LolClient.exe
) für die ausführbare Zieldatei inHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
Fügen Sie diesem Schlüssel einen Zeichenfolgewert hinzu:
- Name:
Debugger
- Wert:
C:\BindIp\BindIp.cmd
Gewähren Sie die Users
vollständigen Berechtigungen für diesen Schlüssel (das Skript muss sie bei jedem Start ändern). Es sollte so aussehen:
Stellen Sie die gewünschte IP-Adresse ein BindIp.cmd
Wiederholen Sie die Schritte 3 und 4 für jede ausführbare Sie binden wollen ( rad_user_kernel.exe
, LolLauncher.exe
, LolPatcher.exe
, etc.).
Jedes Mal, wenn Sie eine ausführbare Datei mit einem entsprechenden Registrierungseintrag BindIp.cmd
starten, wird stattdessen das Skript gestartet und dieses Programm an die gewünschte IP-Adresse gebunden.
Fazit
Ich habe dies auf meinem Laptop unter Windows 8.1 x64 getestet und konnte mit dieser Technik verschiedene Programme ( AIMP 2 , BersIRC , Opera 12.4 ) erfolgreich an Ethernet- oder WiFi-Adapter binden . Leider BindIp.dll
ist 32-Bit, so würde es nicht mit 64-Bit-Prozessen funktionieren.
LolClient.exe
? IstLolClient.exe
einx86
oder einx64
exe? Ich spiele mit einem DLL-Injektor eines Drittanbieters und kann Ihnen vielleicht helfen, aber ich benötige weitere Informationen.