Обновить
Я обнаружил, что ForceBindIp фактически передает параметры вызываемым исполняемым файлам. Он просто пропускает первый параметр . Поэтому я изменил свой сценарий для использования ForceBindIp.exe
вместо пользовательского инжектора, и теперь похоже, что все проблемы с injectory
исключениями исчезли и все работает.
Вот модифицированные шаги и BindIp.cmd
скрипт:
Установите ForceBindIp как обычно
Поместите в BindIp.cmd
любое место на вашем диске (например C:\BindIp\BindIp.cmd
)
BindIp.cmd
сценарий:
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
Затем выполните шаги 2-6 снизу.
Вступление
ForceBindIp не может автоматически внедрять BindIp.dll
дочерние процессы и не передает параметры вызываемым исполняемым файлам . Но мне удалось обойти это, используя параметры выполнения файлов изображений в реестре , пакетный скрипт и сторонний DLL-инжектор . Подробности ниже.
теория
Для использования BindIp.dll
без ForceBindIp.exe
нас нужно выяснить, как они общаются ( ForceBindIp.exe
нужно как-то передать dll-адрес в dll).
Я использовал IDA free и обнаружил, что ForceBindIp.exe
создает переменную среды с именем, FORCEDIP
которая содержит IP-адрес и BindIp.dll
считывает IP-адрес из этой переменной, когда она вводится и выполняется в целевом процессе.
Чтобы обнаружить запуск целевого приложения, мы можем добавить Debugger
ключ в опциях исполнения файла образа в реестре для этого исполняемого файла:
Kernel32! CreateProcess, когда вызывается без флагов создания DEBUG_PROCESS или DEBUG_ONLY_THIS_PROCESS, проверяет реестр, чтобы узнать, был ли установлен IFEO в исполняемом файле, который он запускает. Если да, тогда он просто добавляет путь отладчика к имени исполняемого файла, фактически выполняя запуск исполняемого файла под отладчиком.
«Отладчик» в нашем случае будет пакетным скриптом, который установит FORCEDIP
переменную и запустит инъекцию dll-injector. Injectory затем начнется процесс, передать аргументы командной строки и впрыснуть BindIp.dll
.
практика
Создайте папку где-нибудь ( C:\BindIp
например) и поместите эти три файла в нее:
BindIp.cmd
сценарий:
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
- Создать ключ реестра (например
LolClient.exe
) для целевого исполняемого файла вHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
Добавьте строковое значение к этому ключу:
- Имя:
Debugger
- Значение:
C:\BindIp\BindIp.cmd
Предоставьте Users
полные разрешения для этого ключа (скрипт должен будет изменять его при каждом запуске). Это должно выглядеть так:
Установите необходимый IP-адрес в BindIp.cmd
Повторите шаги 3 и 4 для каждого исполняемого файла , который вы хотите , чтобы связать ( rad_user_kernel.exe
, LolLauncher.exe
, LolPatcher.exe
и т.д.).
Теперь каждый раз, когда вы запускаете исполняемый файл с соответствующей записью в реестре, BindIp.cmd
вместо этого запускается скрипт и привязывает эту программу к нужному IP-адресу.
Вывод
Я проверил это на своем ноутбуке под управлением Windows 8.1 x64 и смог успешно привязать различные программы ( AIMP 2 , BersIRC , Opera 12.4 ) к адаптеру Ethernet или WiFi, используя эту технику. К сожалению, BindIp.dll
это 32-битный, поэтому он не будет работать с 64-битными процессами.
LolClient.exe
? Является ли или ех? Я играю с сторонним DLL-инжектором и, возможно, я могу вам помочь, но мне нужно больше информации.LolClient.exe
x86
x64