Русский / Russian English / Английский

Сейчас на форуме: jinoweb, bernal1, korsaring, rmn (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

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


Ранг: 324.3 (мудрец)
Статус: Участник

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

Всем привет!

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


Ранг: 335.5 (мудрец)
Статус: Участник
born to be evil

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

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

Ранг: 50.0 (постоянный)
Статус: Участник

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

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

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


Ранг: 71.2 (постоянный)
Статус: Участник

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

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

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

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



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

Посмотрю...

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


Ранг: 335.5 (мудрец)
Статус: Участник
born to be evil

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

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

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

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

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

Ранг: 71.2 (постоянный)
Статус: Участник

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

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

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

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

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

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

Ранг: 71.2 (постоянный)
Статус: Участник

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

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

Ранг: 168.8 (ветеран)
Статус: Участник

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

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


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


Ранг: 324.3 (мудрец)
Статус: Участник

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

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

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

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

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

Ранг: 71.2 (постоянный)
Статус: Участник

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

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

Ранг: 16.3 (новичок)
Статус: Участник

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

CreateProcessInternalW


Ранг: 329.3 (мудрец)
Статус: Участник

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

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

NtCreateProcessEx


Ранг: 2013.0 (!!!!)
Статус: Модератор
retired

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

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

VT-x пишет:
CreateProcessInternalW

difexacaw пишет:
NtCreateProcessEx

Стоят бряки.

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

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


Ранг: 52.0 (постоянный)
Статус: Участник

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

Создано: 1 сентября 2017 14:18 · Поправил: DenCoder New!
Цитата · Личное сообщение · #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 ?

Ранг: 168.8 (ветеран)
Статус: Участник

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

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

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

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


Ранг: 16.3 (новичок)
Статус: Участник

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

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

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

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

Ранг: 168.8 (ветеран)
Статус: Участник

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

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

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


Ранг: 16.3 (новичок)
Статус: Участник

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

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

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

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

Ранг: 168.8 (ветеран)
Статус: Участник

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

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

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

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



Ранг: 329.3 (мудрец)
Статус: Участник

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

VOLKOFF

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

И я не клон.

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

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

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

Ранг: 168.8 (ветеран)
Статус: Участник

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

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

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

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

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

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


Ранг: 329.3 (мудрец)
Статус: Участник

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

VOLKOFF

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

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

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

Ранг: 16.3 (новичок)
Статус: Участник

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

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

Ранг: 143.2 (ветеран)
Статус: Участник

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

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

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

Это задача из разряда - сел и написал. Никаких изысканий и исследований тут не требуется, и уже тем более дурацких форумных тем типа этой.
. 1 . 2 . >>
 eXeL@B —› Программирование —› Перехват запуска процессов с правами администратора

Видеокурс ВЗЛОМ