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.exeanstelle des benutzerdefinierten Injektors verwendet wird. Nun scheinen alle Probleme mit injectoryAusnahmen behoben zu sein und alles funktioniert.
Hier ist modifizierte Schritte und BindIp.cmdSkript:
Installieren Sie ForceBindIp wie gewohnt
Stellen Sie BindIp.cmdirgendwo 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.dllin 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.dllohne zu verwenden ForceBindIp.exe, müssen wir herausfinden, wie sie kommunizieren ( ForceBindIp.exemuss IP-Adresse irgendwie an DLL übergeben).
Ich habe IDA free verwendet und festgestellt, dass ForceBindIp.exeeine Umgebungsvariable mit einem Namen erstellt wird FORCEDIP, der die IP-Adresse enthält und BindIp.dlldie 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 DebuggerSchlü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 FORCEDIPVariable 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:\BindIpzum 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 Usersvollstä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.cmdstarten, 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.dllist 32-Bit, so würde es nicht mit 64-Bit-Prozessen funktionieren.
LolClient.exe? IstLolClient.exeeinx86oder einx64exe? Ich spiele mit einem DLL-Injektor eines Drittanbieters und kann Ihnen vielleicht helfen, aber ich benötige weitere Informationen.