Aktualizacja
Odkryłem, że ForceBindIp faktycznie przekazuje parametry do wywoływanych plików wykonywalnych. Po prostu pomija pierwszy parametr . Zmodyfikowałem więc skrypt, aby używał ForceBindIp.exe
zamiast niestandardowego wtryskiwacza i teraz wygląda na to, że wszystkie problemy z injectory
wyjątkami zniknęły i wszystko działa.
Oto zmodyfikowane kroki i BindIp.cmd
skrypt:
Zainstaluj ForceBindIp jak zwykle
Umieść w BindIp.cmd
dowolnym miejscu na dysku (np. C:\BindIp\BindIp.cmd
)
BindIp.cmd
scenariusz:
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
Następnie wykonaj kroki 2-6 od dołu.
Wprowadzenie
ForceBindIp nie może automatycznie wstrzykiwać BindIp.dll
do procesów potomnych i nie przekazuje parametrów do wywoływanych plików wykonywalnych . Ale udało mi się to obejść, używając opcji wykonania pliku obrazu w rejestrze , skrypcie wsadowym i aplikatorze DLL innej firmy . Szczegóły są poniżej.
Teoria
Aby korzystać BindIp.dll
bez ForceBindIp.exe
, musimy dowiedzieć się, w jaki sposób się komunikują ( ForceBindIp.exe
musi jakoś przekazać adres IP do dll).
Użyłem IDA za darmo i odkryłem, że ForceBindIp.exe
tworzy zmienną środowiskową o nazwie, FORCEDIP
która przechowuje adres IP i BindIp.dll
odczytuje adres IP z tej zmiennej po jej wstrzyknięciu i wykonaniu w procesie docelowym.
Aby wykryć uruchomienie aplikacji docelowej, możemy dodać Debugger
klucz w Opcjach wykonania pliku obrazu w rejestrze dla tego pliku wykonywalnego:
Jądro32! CreateProcess, gdy jest wywoływane bez flag tworzenia DEBUG_PROCESS lub DEBUG_ONLY_THIS_PROCESS, sprawdza rejestr, aby sprawdzić, czy IFEO został ustawiony w pliku wykonywalnym, który uruchamia. Jeśli tak, to po prostu przygotowuje ścieżkę debugera do nazwy pliku wykonywalnego, skutecznie uruchamiając plik wykonywalny w debugerze.
„Debugger” w naszym przypadku będzie skryptem wsadowym, który ustawi FORCEDIP
zmienną i uruchomi wtryskowy dll-injector. Wtrysk następnie rozpocznie proces, przekaże argumenty wiersza poleceń i wstrzykuje BindIp.dll
.
Ćwiczyć
Utwórz folder gdzieś ( C:\BindIp
na przykład) i umieść w nim te trzy pliki:
BindIp.cmd
scenariusz:
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
- Utwórz klucz rejestru (np.
LolClient.exe
) Dla docelowego pliku wykonywalnego wHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
Dodaj wartość ciągu do tego klucza:
- Nazwa:
Debugger
- Wartość:
C:\BindIp\BindIp.cmd
Przyznaj Users
pełne uprawnienia do tego klucza (skrypt będzie musiał go modyfikować przy każdym uruchomieniu). To powinno wyglądać tak:
Ustaw wymagany adres IP w BindIp.cmd
Powtórz kroki 3 i 4 dla każdego pliku wykonywalnego, który chcesz bind ( rad_user_kernel.exe
, LolLauncher.exe
, LolPatcher.exe
, itd.).
Teraz za każdym razem, gdy uruchamiasz plik wykonywalny, który ma odpowiedni wpis rejestru, BindIp.cmd
skrypt uruchamia się zamiast tego i wiąże ten program z pożądanym adresem IP.
Wniosek
Przetestowałem to na moim laptopie z systemem Windows 8.1 x64 i byłem w stanie z powodzeniem powiązać różne programy ( AIMP 2 , BersIRC , Opera 12.4 ) z Ethernetem lub kartą WiFi za pomocą tej techniki. Niestety BindIp.dll
jest 32-bitowy, więc nie działałby z procesami 64-bitowymi.
LolClient.exe
? Czy lub exe? Zabawiam się aplikatorem DLL innej firmy i może mogę ci pomóc, ale potrzebuję więcej informacji.LolClient.exe
x86
x64