Можно ли указать полный путь к исполняемому файлу в «Параметры выполнения образа \ * \ Отладчик»?

1388
0xC0000022L

Image Execution Options( HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options) с ключом, названным в честь исполняемого файла, и значением string ( REG_SZ), как известно, будет хорошим входным сигналом, если вам нужно изменить поведение запускаемого приложения.

Однако, если у меня есть очень распространенное имя для исполняемого файла, например launcher.exe, как я могу быть более конкретным? Могу ли я вообще?

Я хотел бы убедиться, что будет затронут только тот конкретный двоичный файл, который я имею в виду, хотя в моем конкретном случае это будет лишь умеренное влияние, если я не смогу ограничить его точным исполняемым файлом.

Я хотел бы написать себе небольшую программу-обертку, которая, подобно Process Explorer от Sysinternals, заменяет стандартное поведение моего приложения launcher.exeтем, что оно устанавливает переменную среды, аналогичную set __COMPAT_LAYER=RUNASINVOKERоболочке.

Теперь я знаю, как написать обертку и все, главный вопрос заключается в том, есть ли способ указать в реестре, используя некоторую магию Image Execution Options, чтобы ограничить область действия Debuggerзначения "hack", или мне нужно отфильтровать это в моя обертка?


Имеет отношение к:

1

2 ответа на вопрос

3
E. Grechnikov

Начиная с Windows 7, есть способ ограничить параметры выполнения файла изображения точным путем.

  1. Создайте слово с именем «UseFilter» и ненулевым значением в ... \ Параметры выполнения файла изображения \ filename.exe.
  2. Создайте подраздел с произвольным именем, например ... \ Параметры выполнения файла изображения \ filename.exe \ MyFilter.
  3. Под этим подразделом создайте строку с именем «FilterFullPath» и полным путем в качестве значения, например «C: \ mypath \ filename.exe». Кроме того, создайте все необходимые параметры, «Отладчик» в вашем случае, там.

Теперь, когда система запускает «filename.exe», она проверяет, соответствует ли полный путь «FilterFullPath» из любого подраздела. (Для разных путей может быть несколько подключей.) Если есть совпадение, используются параметры из соответствующего подключа. В противном случае, как обычно, используются параметры из базового ключа IFEO \ filename.exe.

0
David Marshall

Кажется, можно сделать это так

enter image description here

На снимке экрана показано, как создать подключи, соответствующие полному пути двоичного файла HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options, например:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe 

под которым затем Debuggerможно было бы создать и установить строковое значение.

Вы проверяли это или просто предполагаете, что это работает? Я имею в виду, я понимаю, что это то, как вы можете * создать * ключ и значение, но похоже, что загрузчик фактически не соблюдает это * вообще *. Какую систему вы пробовали эту? Если вы переименуете ключ «верхнего уровня» в «AcroRd32.exe» (прямо под «Параметры выполнения изображения») в «AcroRd32.exe__» (`F2`) и оставите тот, у которого полный путь на месте, с помощью« Отладчика » например, «procxp.exe», это работает? 0xC0000022L 10 лет назад 0
К сожалению, даже после создания ключа с использованием файла `.reg` вместо ручного создания, чтобы убедиться, что в пути нет опечаток, он просто не будет работать. Я знаю это, потому что если я использую имя `launcher.exe` вместо полного пути, поведение будет таким, как ожидалось, и запущенная программа больше не требует повышения прав. Извините, если это не ясно из вопроса, но я не просто спросил, возможно ли теоретически создать ключ, но чтобы создать ключ и получить ожидаемое поведение. 0xC0000022L 10 лет назад 0
@ 0xC0000022L Извините за задержку. Я пошел спать после публикации. Я не проверял это с помощью ключа отладчика. Я просто заметил это, глядя на эту область реестра. Я подозреваю, что он был создан EMET, который может использовать его для своих собственных целей, и он не работает для подключения отладчика. David Marshall 10 лет назад 0
хорошая точка зрения. Я заметил, что у вас там было несколько записей EMET. 0xC0000022L 10 лет назад 0
@ 0xC0000022L Я проверил другую систему без EMET. Эти записи не существуют. Я также обнаружил, что есть 32-битная версия ключа в "HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows NT \ CurrentVersion \ Опции выполнения файла образа \""в 64-битных системах. Это используется, если процесс, вызывающий CreateProcess, является 32-битным. http://blogs.msdn.com/b/mithuns/archive/2010/03/24/image-file-execution-options-ifeo.aspx David Marshall 10 лет назад 0
это тот же ключ на самом деле. Реестр допускает ссылки между ключами, и вот что, похоже, происходит там. Ни инструмент Win32, ни API не обрабатывают ссылки на реестр IIRC. Вы можете увидеть это, перейдя к предполагаемой «родной» (64-битной) версии и создав нечто уникальное, например, значение «64-битный», а затем перейдя к файлу в разделе «Wow6432Node» и найдя его там. Это как минимум верно в Windows 7 SP1, x64. 0xC0000022L 10 лет назад 0