Сейчас на форуме: jinoweb, bartolomeo, rmn (+5 невидимых)

 eXeL@B —› Программирование —› Перехват запуска процессов с правами администратора
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 01 сентября 2017 11:38
· Личное сообщение · #1

Всем привет!

Хочу перехватить запуск процессов из-под проводника с админскими правами. Перехват решил сначала проверить в ольке. На обычном запуске по двойному щелчку запуск перехватывается нормально - срабатывает бряк на CreateProcess. Но вот странное дело, при запуске через ПКМ->С правами администратора не срабатывает бряк ни на CreateProcess, ни на CreateProcessAsUser, CreateProcessWithLogonW и CreateProcessWithTokenW. Бряки на CreateProcessInternal(A|W), на NtCreateProcess и NtCreateUserProcess также не срабатывает. Как же тогда запускается процесс из проводника?

-----
IZ.RU





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 01 сентября 2017 11:53
· Личное сообщение · #2

DenCoder гадать, чем перехватывать? ну, и цель задачи
ps: тяпница - есть время почитать форум

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 01 сентября 2017 11:59
· Личное сообщение · #3

в тяпницу накатывать нужно

| Сообщение посчитали полезным: ajax

Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 01 сентября 2017 11:59
· Личное сообщение · #4

Поглядите в Process Monitor.
Там будет видно, в каком процессе создали новый процесс и, если повезет, стек вызовов.




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 01 сентября 2017 12:04 · Поправил: DenCoder
· Личное сообщение · #5

ajax пишет:
гадать, чем перехватывать?

DenCoder пишет:
Перехват решил сначала проверить в ольке.



kunix пишет:
Поглядите в Process Monitor.

Посмотрю...

Добавлено спустя 6 минут
Очень странно - в стеке явно показывается CreateProcessAsUserW, но бряк в ольке почему-то не срабатывает Видимо, блокируется дебаг-сервис перед вызовом UAC... Других версий нет

-----
IZ.RU





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 01 сентября 2017 12:13 · Поправил: ajax
· Личное сообщение · #6

DenCoder пишет:
при запуске через ПКМ->С правами администратора не срабатывает бряк

тоже в ольке? что есть тогда ПКМ?
бред - запуск в отладчике переносить на систему. еще со времен доса были нюансы

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 01 сентября 2017 12:18
· Личное сообщение · #7

ajax пишет:
тоже в ольке? что есть тогда ПКМ?
бред - запуск в отладчике переновить на систему. еще со времен доса были нюансы

Блин, что не понятно-то? Приаттачился олькой к explorer.exe, установил точки останова, в том числе и на CreateProcessAsUserW, правой кнопкой мышки щёлкаю на файле образа test.exe, выбираю из контекстного меню "Запуск от имени администратора", появляется UAC, при нажатии Да процесс запускается, а бряк нигде не срабатывает.

-----
IZ.RU




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 01 сентября 2017 12:19 · Поправил: kunix
· Личное сообщение · #8

DenCoder.
Да ну, бред.
Как будто бряк в начале функции куда-то исчезнет, если заблокируется отладчик.
Скорее, цепочка вызовов какая-то странная и обходит ваш бряк.
Или вызовы происходят в другом процессе.




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 01 сентября 2017 12:20
· Личное сообщение · #9

ajax пишет:
бред - запуск в отладчике переносить на систему.

Ну, explorer.exe - просто виндовая оболочка, неужели так тесно с осью работает, что система блокирует в некоторых случаях дебаг?

Добавлено спустя 2 минуты
kunix пишет:
Или вызовы происходят в другом процессе.

Да нет - Procmon показывает, что именно из explorer.exe идёт вызов. Avast также отключён, его aswhook.dll не внедрена в explorer.

-----
IZ.RU




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 01 сентября 2017 12:23 · Поправил: kunix
· Личное сообщение · #10

Я намекаю, что может быть там два Explorer.exe.
Также попробуйте поставить бряки по всей длине CreateProcessAsUserW.



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 01 сентября 2017 12:37
· Личное сообщение · #11

DenCoder пишет:
Хочу перехватить запуск процессов из-под проводника


Ваш перехват правильнее будет сделать через IFEO, как это делают Process Explorer и Process Hacker, есличо.




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 01 сентября 2017 12:38
· Личное сообщение · #12

kunix пишет:
Я намекаю, что может быть там два Explorer.exe.

неа, проверил

kunix пишет:
Также попробуйте поставить бряки по всей длине CreateProcessAsUserW.

ничего не даёт

-----
IZ.RU




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 01 сентября 2017 12:41 · Поправил: kunix
· Личное сообщение · #13

А куда указывает таблица импорта explorer?
Смутно помню, что в новомодных виндах реализации функций раскидали по разным dll.
Типа api-ms-win-downlevel-advapi32-l1-1-0.dll.
Вообще попробуйте потрейсить, начиная с explorer.exe



Ранг: 16.3 (новичок), 2thx
Активность: 0.030
Статус: Участник

Создано: 01 сентября 2017 12:44
· Личное сообщение · #14

CreateProcessInternalW




Ранг: 338.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 сентября 2017 13:28
· Личное сообщение · #15

> NtCreateProcess и NtCreateUserProcess также не срабатывает.

NtCreateProcessEx

-----
vx





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 01 сентября 2017 13:47
· Личное сообщение · #16

Запрос через ALPC уходит в другой процесс, скачал бы символы да посмотрел уже.




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 01 сентября 2017 13:54
· Личное сообщение · #17

VT-x пишет:
CreateProcessInternalW

difexacaw пишет:
NtCreateProcessEx

Стоят бряки.

Archer пишет:
Запрос через ALPC уходит в другой процесс

Вот тут я не грамотен, начинаю ликбезироваться

-----
IZ.RU





Ранг: 52.0 (постоянный), 146thx
Активность: 0.030.08
Статус: Участник

Создано: 01 сентября 2017 14:06 · Поправил: UniSoft
· Личное сообщение · #18

ShellExecute(hwnd, "runas", "C:\Windows\Notepad.exe", 0, 0, SW_SHOWNORMAL);




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 01 сентября 2017 14:18 · Поправил: DenCoder
· Личное сообщение · #19

UniSoft
ProcMon показывает стек вызовов
CreateProcessAsUserW -> CreateProcessInternalW -> ZwCreateUserProcess
Вызывается эта известная цепочка из региона памяти, не принадлежащего ни одному модулю. Ниже только RPC

Добавлено спустя 17 минут
В блоге некоего Павла написано так:
A process can use WMI APIs to create a new process, which involves the WMI service hosted in a standard Svchost process, which will ask the WMI provider host process (WmiPrvSE) to do the actual work. So, in our driver we would see the final process created (e.g. cmd.exe), but its parent would be WmiPrvSE – not our web browser process, which means we have no easy way of knowing who really initiated the creation of cmd.exe. This is where ALPC comes in.
Да, неоднократно замечал при запуске процесса появление на короткое время WmiPrvSE.exe в списке процессов. Но непонятно, получается, что реальный родитель - WmiPrvSE, а почему тогда procmon и procexp показывают, что это explorer, и procmon показывает в стеке CreateProcessAsUserW -> CreateProcessInternalW -> ZwCreateUserProcess ?

-----
IZ.RU




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 01 сентября 2017 14:44
· Личное сообщение · #20

DenCoder пишет:
а почему тогда procmon и procexp показывают, что это explorer

потому что
VOLKOFF пишет:
перехват правильнее будет сделать через IFEO, как это делают Process Explorer и Process Hacker, есличо


| Сообщение посчитали полезным: DenCoder

Ранг: 16.3 (новичок), 2thx
Активность: 0.030
Статус: Участник

Создано: 01 сентября 2017 17:48
· Личное сообщение · #21

ку... я сразу не вкурил
дык причем тут explorer.exe ковыряйте сервер подсистемы или вообще ловите через дров

Добавлено спустя 2 минуты
VOLKOFF
дык они там через натив смотрят всё
для данной задачи - только драйвер уместен, имхо челу нужен перехват СОЗДАНИЯ процесса




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 01 сентября 2017 18:15
· Личное сообщение · #22

Есть функа NtAlpcConnectPort, которая вызывается в explorer'е при создании процесса с правами админа. Можно покурить исходники, но их не так много на эту тему.

-----
IZ.RU




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 01 сентября 2017 18:20
· Личное сообщение · #23

VT-x, почитайте доки, ну или хотябы --> это <--

| Сообщение посчитали полезным: sefkrd

Ранг: 16.3 (новичок), 2thx
Активность: 0.030
Статус: Участник

Создано: 01 сентября 2017 21:20 · Поправил: VT-x
· Личное сообщение · #24

DenCoder
ну хайендсофту в лом, вы недокуриваете просто немного, просто рейтинги тут делаете, а то что эксплорер перхватывать
VOLKOFF
тьфу параша, ваше ЭТО я дажен читать не собираюсь.

Инде да куда им ))))
мож проще Ps функи из дрова?

ЗЫ: куда мир катится?
например то что там типа либы другие, тьфу, все идет к kernell32 и далее в ntdll что тут доказывать , если люди трейсить разучились на кряклабе



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 01 сентября 2017 22:10 · Поправил: VOLKOFF
· Личное сообщение · #25

Уважаемый очередной клон инде, вам не раз намекали, что пора поотрывать листочки в календарике и осознать (внезапно), что на дворе 2к17 и ваши SSDT хуки уже нафег никому не упали, мы не ищем приключений с пачгардами и прочими ежедневными приколюхами МС, а решаем задачи. Решать их лучше эффективно (что значит получать результат испытывая минимум геморроя), поэтому юзаем любезно предоставленные МС механизмы. На выходе абсолютно тот же результат, но анальных резей значительно меньше и работать будет и завтра (с выходом апдейтов ОС).
Да можно писать дров, который нужно подписывать, или делать то, что делать не надо. Да можно юзать глобальный хук, внедряясь в каждый процесс, что вообще не комильфо. Можно хукать целевой процесс и даже можно поюзать WMI, или (что в принципе нормально и правильно) kernel-mode колбэки PsSetCreateProcessNotifyRoutineEx для создания/уничтожения процессов. Но... зачем?

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

| Сообщение посчитали полезным: shellstorm, DenCoder


Ранг: 338.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 02 сентября 2017 01:43 · Поправил: difexacaw
· Личное сообщение · #26

VOLKOFF

О чём вы говорите не пойму. Я лишь указал что тс пропустил сервис.

И я не клон.

> что на дворе 2к17 и ваши SSDT хуки уже нафег никому не упали,

Я уже много лет назад забыл что это такое. Признавайтесь чего вдули ?
День начала обучения, пятница - но это не повод для сочинений, не нужно мне пиписывать смысл, которого нет и он только у вас в уме. Не нравится ядерный префикс - да, я тоже так подумал, но это тс использовал Nt, а не Zw.

В стартап посте тс перечислил два сервиса, останов на которых не сработал. Так как пропущен тот, через который процесс запускается(первый deprecated) и учитывая что обьекты наследуются и это можно элементарно видеть в том же процэксп, а сервиса для задания родителя я не знаю, а значит этого нет, то логический вывод один - пропущен сервис и lpc тут не причём.

-----
vx




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 02 сентября 2017 02:25
· Личное сообщение · #27

difexacaw пишет:
Я лишь указал что тс пропустил сервис

Пост предназначался альтер эгу с ником VT-x

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

По запуску процессов в "многострадальной" уже все написано до нас, включая нюансы новых версий ОС, зачем время и нервы тратить на частные случаи, когда есть варианты проще, хз. Бывает нужно точечно отработать, несомненно в большинстве случаев (но не во всех, кстати) предпочтительно перехватывать нативные функции, бывало (особенно в пору бурного обновления вышедшей 10-ки) рукожопы из МС так изгалялись с высокоуровневыми API, что ряд стандартных последовательностей вызовов просто меняли "по фазам луны" и да, приходилось от рекомендованных в MSDN функций отказываться и тупо хукать нативку, до сих пор все как часы работает с XP по последний билд 10-ки, несмотря на грозные сноски в доках.
Тут когда пишешь что "все методы и ЯП лишь инструмент достижения цели", важно и самому про это не забывать и "не плодить сверх необходимого". Если (не для продакшн) можно сделать в 3 строки на батнике, а я знаю способ как понтануться и запилить это методом "теории струн" (а потом еще всем рассказать, какой Сережа молодец), то... правильно так

А грибами все равно не поделюсь и не проси, зимовать еще




Ранг: 338.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 02 сентября 2017 02:46 · Поправил: difexacaw
· Личное сообщение · #28

VOLKOFF

Кому предназначался пост вы упомянули прямо.

Получается что тс забыл одну функцию из 3-х, я напомнил. У вас это действие или само имя апи вызвало батхёрт. Может как обычно, меня забанить ?

К сожалению мне не дали модерку что бы это всё исправить.

-----
vx




Ранг: 16.3 (новичок), 2thx
Активность: 0.030
Статус: Участник

Создано: 02 сентября 2017 04:07 · Поправил: VT-x
· Личное сообщение · #29

VOLKOFF
вы не в теме. пусть банят. мне пофиг. я HiEndSoft aka Sysenter aka RET но никак не инди ака клерыч, мне до него далеко, хоть и немного, сегодня был день школоло - вот вам туда



Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 02 сентября 2017 05:57 · Поправил: Alchemistry
· Личное сообщение · #30

Денкодер, твой процесс когда ты нажимаешь "запустить от имени администратора" стартует сервис appinfo через CreateProcessAsUser с параметрами которые приходят туда через RPC вызов на uac интерфейс runas. Ставь дальше бряки в ольке, давай, они тебе очень помогут в процессе который сам ничего не создает :D Решение твоей задачи документированно, это драйвер с PsSetCreateProcessNotifyRoutine(Ex) нотификатором, все остальное будет работать через жопу, ну и видимо писаться также учитывая кто ТС :D

Почему не предложенный IFEO? Я думаю, что это более универсально, если процесс не один итд.

Это задача из разряда - сел и написал. Никаких изысканий и исследований тут не требуется, и уже тем более дурацких форумных тем типа этой.


. 1 . 2 . >>
 eXeL@B —› Программирование —› Перехват запуска процессов с правами администратора
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати