Сейчас на форуме: jinoweb, bartolomeo, rmn (+5 невидимых) |
eXeL@B —› Программирование —› Перехват запуска процессов с правами администратора |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 01 сентября 2017 11:38 · Личное сообщение · #1 Всем привет! Хочу перехватить запуск процессов из-под проводника с админскими правами. Перехват решил сначала проверить в ольке. На обычном запуске по двойному щелчку запуск перехватывается нормально - срабатывает бряк на CreateProcess. Но вот странное дело, при запуске через ПКМ->С правами администратора не срабатывает бряк ни на CreateProcess, ни на CreateProcessAsUser, CreateProcessWithLogonW и CreateProcessWithTokenW. Бряки на CreateProcessInternal(A|W), на NtCreateProcess и NtCreateUserProcess также не срабатывает. Как же тогда запускается процесс из проводника? ----- IZ.RU |
|
Создано: 01 сентября 2017 11:53 · Личное сообщение · #2 |
|
Создано: 01 сентября 2017 11:59 · Личное сообщение · #3 |
|
Создано: 01 сентября 2017 11:59 · Личное сообщение · #4 |
|
Создано: 01 сентября 2017 12:04 · Поправил: DenCoder · Личное сообщение · #5 ajax пишет: гадать, чем перехватывать? DenCoder пишет: Перехват решил сначала проверить в ольке. kunix пишет: Поглядите в Process Monitor. Посмотрю... Добавлено спустя 6 минут Очень странно - в стеке явно показывается CreateProcessAsUserW, но бряк в ольке почему-то не срабатывает Видимо, блокируется дебаг-сервис перед вызовом UAC... Других версий нет ----- IZ.RU |
|
Создано: 01 сентября 2017 12:13 · Поправил: ajax · Личное сообщение · #6 |
|
Создано: 01 сентября 2017 12:18 · Личное сообщение · #7 ajax пишет: тоже в ольке? что есть тогда ПКМ? бред - запуск в отладчике переновить на систему. еще со времен доса были нюансы Блин, что не понятно-то? Приаттачился олькой к explorer.exe, установил точки останова, в том числе и на CreateProcessAsUserW, правой кнопкой мышки щёлкаю на файле образа test.exe, выбираю из контекстного меню "Запуск от имени администратора", появляется UAC, при нажатии Да процесс запускается, а бряк нигде не срабатывает. ----- IZ.RU |
|
Создано: 01 сентября 2017 12:19 · Поправил: kunix · Личное сообщение · #8 |
|
Создано: 01 сентября 2017 12:20 · Личное сообщение · #9 ajax пишет: бред - запуск в отладчике переносить на систему. Ну, explorer.exe - просто виндовая оболочка, неужели так тесно с осью работает, что система блокирует в некоторых случаях дебаг? Добавлено спустя 2 минуты kunix пишет: Или вызовы происходят в другом процессе. Да нет - Procmon показывает, что именно из explorer.exe идёт вызов. Avast также отключён, его aswhook.dll не внедрена в explorer. ----- IZ.RU |
|
Создано: 01 сентября 2017 12:23 · Поправил: kunix · Личное сообщение · #10 |
|
Создано: 01 сентября 2017 12:37 · Личное сообщение · #11 |
|
Создано: 01 сентября 2017 12:38 · Личное сообщение · #12 |
|
Создано: 01 сентября 2017 12:41 · Поправил: kunix · Личное сообщение · #13 |
|
Создано: 01 сентября 2017 12:44 · Личное сообщение · #14 |
|
Создано: 01 сентября 2017 13:28 · Личное сообщение · #15 |
|
Создано: 01 сентября 2017 13:47 · Личное сообщение · #16 |
|
Создано: 01 сентября 2017 13:54 · Личное сообщение · #17 |
|
Создано: 01 сентября 2017 14:06 · Поправил: UniSoft · Личное сообщение · #18 |
|
Создано: 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 |
|
Создано: 01 сентября 2017 14:44 · Личное сообщение · #20 DenCoder пишет: а почему тогда procmon и procexp показывают, что это explorer потому что VOLKOFF пишет: перехват правильнее будет сделать через IFEO, как это делают Process Explorer и Process Hacker, есличо | Сообщение посчитали полезным: DenCoder |
|
Создано: 01 сентября 2017 17:48 · Личное сообщение · #21 |
|
Создано: 01 сентября 2017 18:15 · Личное сообщение · #22 |
|
Создано: 01 сентября 2017 18:20 · Личное сообщение · #23 |
|
Создано: 01 сентября 2017 21:20 · Поправил: VT-x · Личное сообщение · #24 DenCoder ну хайендсофту в лом, вы недокуриваете просто немного, просто рейтинги тут делаете, а то что эксплорер перхватывать VOLKOFF тьфу параша, ваше ЭТО я дажен читать не собираюсь. Инде да куда им )))) мож проще Ps функи из дрова? ЗЫ: куда мир катится? например то что там типа либы другие, тьфу, все идет к kernell32 и далее в ntdll что тут доказывать , если люди трейсить разучились на кряклабе |
|
Создано: 01 сентября 2017 22:10 · Поправил: VOLKOFF · Личное сообщение · #25 Уважаемый очередной клон инде, вам не раз намекали, что пора поотрывать листочки в календарике и осознать (внезапно), что на дворе 2к17 и ваши SSDT хуки уже нафег никому не упали, мы не ищем приключений с пачгардами и прочими ежедневными приколюхами МС, а решаем задачи. Решать их лучше эффективно (что значит получать результат испытывая минимум геморроя), поэтому юзаем любезно предоставленные МС механизмы. На выходе абсолютно тот же результат, но анальных резей значительно меньше и работать будет и завтра (с выходом апдейтов ОС). Да можно писать дров, который нужно подписывать, или делать то, что делать не надо. Да можно юзать глобальный хук, внедряясь в каждый процесс, что вообще не комильфо. Можно хукать целевой процесс и даже можно поюзать WMI, или (что в принципе нормально и правильно) kernel-mode колбэки PsSetCreateProcessNotifyRoutineEx для создания/уничтожения процессов. Но... зачем? Пока есть способ получить гарантированный результат просто, мозг нормального человека выберет экономию энергии и ресурсов Я считаю так | Сообщение посчитали полезным: shellstorm, DenCoder |
|
Создано: 02 сентября 2017 01:43 · Поправил: difexacaw · Личное сообщение · #26 VOLKOFF О чём вы говорите не пойму. Я лишь указал что тс пропустил сервис. И я не клон. > что на дворе 2к17 и ваши SSDT хуки уже нафег никому не упали, Я уже много лет назад забыл что это такое. Признавайтесь чего вдули ? День начала обучения, пятница - но это не повод для сочинений, не нужно мне пиписывать смысл, которого нет и он только у вас в уме. Не нравится ядерный префикс - да, я тоже так подумал, но это тс использовал Nt, а не Zw. В стартап посте тс перечислил два сервиса, останов на которых не сработал. Так как пропущен тот, через который процесс запускается(первый deprecated) и учитывая что обьекты наследуются и это можно элементарно видеть в том же процэксп, а сервиса для задания родителя я не знаю, а значит этого нет, то логический вывод один - пропущен сервис и lpc тут не причём. ----- vx |
|
Создано: 02 сентября 2017 02:25 · Личное сообщение · #27 difexacaw пишет: Я лишь указал что тс пропустил сервис Пост предназначался альтер эгу с ником VT-x Ядерные префиксы мне нравяццо, сам их юзаю, ведь всяко в юзермодном коде они имеют одни и те же адреса. Оговоркой может быть разве что динамическое построение таблицы сисколов, где для фанатичного перфекционизма можно избегать повторов По запуску процессов в "многострадальной" уже все написано до нас, включая нюансы новых версий ОС, зачем время и нервы тратить на частные случаи, когда есть варианты проще, хз. Бывает нужно точечно отработать, несомненно в большинстве случаев (но не во всех, кстати) предпочтительно перехватывать нативные функции, бывало (особенно в пору бурного обновления вышедшей 10-ки) рукожопы из МС так изгалялись с высокоуровневыми API, что ряд стандартных последовательностей вызовов просто меняли "по фазам луны" и да, приходилось от рекомендованных в MSDN функций отказываться и тупо хукать нативку, до сих пор все как часы работает с XP по последний билд 10-ки, несмотря на грозные сноски в доках. Тут когда пишешь что "все методы и ЯП лишь инструмент достижения цели", важно и самому про это не забывать и "не плодить сверх необходимого". Если (не для продакшн) можно сделать в 3 строки на батнике, а я знаю способ как понтануться и запилить это методом "теории струн" (а потом еще всем рассказать, какой Сережа молодец), то... А грибами все равно не поделюсь и не проси, зимовать еще |
|
Создано: 02 сентября 2017 02:46 · Поправил: difexacaw · Личное сообщение · #28 |
|
Создано: 02 сентября 2017 04:07 · Поправил: VT-x · Личное сообщение · #29 |
|
Создано: 02 сентября 2017 05:57 · Поправил: Alchemistry · Личное сообщение · #30 Денкодер, твой процесс когда ты нажимаешь "запустить от имени администратора" стартует сервис appinfo через CreateProcessAsUser с параметрами которые приходят туда через RPC вызов на uac интерфейс runas. Ставь дальше бряки в ольке, давай, они тебе очень помогут в процессе который сам ничего не создает :D Решение твоей задачи документированно, это драйвер с PsSetCreateProcessNotifyRoutine(Ex) нотификатором, все остальное будет работать через жопу, ну и видимо писаться также учитывая кто ТС :D Почему не предложенный IFEO? Я думаю, что это более универсально, если процесс не один итд. Это задача из разряда - сел и написал. Никаких изысканий и исследований тут не требуется, и уже тем более дурацких форумных тем типа этой. |
. 1 . 2 . >> |
eXeL@B —› Программирование —› Перехват запуска процессов с правами администратора |