Я не буду долго графоманить.
Спор на тему гипотетического вируса будет офтопиком.
Если для кого-то COM слишком сложен то GINA ему противопоказана во избежании 50 ребутов и нервного срыва.
Опять же про сложность — судите сами — вот код что я набросал 2 года назад когда хотел пощупать что за зверь такой SENS.
CComBSTR GuidToBSTR(REFGUID guid)
{
// 39 — length of string representation of GUID + 1
CComBSTR b(39,L"");
int nRet = StringFromGUID2(guid, b.m_str, 39);
return b;
}
LD>Роман, спасибо за пример к статье. Он мне помог избавиться от трояна, ставящегося как Winlogon notification package. При удалении его записи из реестра, троян восстанавливал ее снова. Я скачал ваш пример (самому было лень писать , поменял имена функций и с помощью MoveFileEx заменил после перезагрузки оригинальный package на ваш. После перезагрузки все стало нормально.
Просто попался плохой троян, раз не мониторит эту ветку
PS Я мониторю с Winlogona, хоть и не троян
Все должно быть просто
Re: mpr.exe
От:
Аноним
Дата:
22.08.06 02:06
Оценка:
Здравствуйте, Роман Бурда, Вы писали:
РБ>Стоит отметить, что этого ключа не существует в ОС Win9x, но существует недокументированный аналог – HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\MPRServices. С помощью этого ключа можно указать процессу mpr.exe (этот процес является некоторым аналогом Winlogon для Win9x, поскольку также отвечает за вход пользователей в систему) загружать в свое адресное пространство необходимую динамическую библиотеку. Таким образом, теоретически можно получить доступ к событиям входа и выхода пользователя из системы.
Можно узнать подробнее как использовать это. В голову приходит только одно: загрузиться используя mpr.exe и поставить хук на все сообщения.Можно ли сделать по другому? Мне нужно мониторить загрузку\выключение компьютера и вход\выход пользователя в win9x.
Буду благодарен за совет.
Здравствуйте, Аноним, Вы писали:
А>Можно узнать подробнее как использовать это. А>В голову приходит только одно: загрузиться используя mpr.exe и поставить хук на все сообщения.Можно ли сделать по другому? Мне нужно мониторить загрузку\выключение компьютера и вход\выход пользователя в win9x. А>Буду благодарен за совет.
Вход в систему мониторится очень просто — можно положить что вход в систему произведен когда была вызвана функция EntryPoint. В принципе так оно и есть. Функция вызываеться в какой то момент до появления приглашения для входа пользователя в систему.
Во всех остальных случаях мне неизвестны механизмы обработки событий с использованием указанного метода.
P.S. Я писал програмку, которая создавала отдельный поток в адресном пространстве mpr.exe и мониторила вход и выход пользователя. Но сделано было это не очень хорошо, поскольку я опрашивал текущего пользователя в цикле с паузой. Но я заметил одну интересную вещь. До какого-то момента (не помню какого именно) функция GetUserName не могла получить имя пользователя (возвращала FALSE). Может это чем то поможет в ваших поисках...
Любая задача имеет решение, даже когда решения не существует
А>Описанный метод весьма опсен,
этот метод опасен только тем, что код исполняется в контексте winlogon и взрыв в таких местах фактически приравнивается к падению ОС или как минимум приведет к неработающему функционалу. справедливости ради отмечу, что некоторые падения не скажутся на стабильности ОС в силу
итого: если писать аккуратно то опаснотей особых нет. в любом случае по дизайну это часто гораздо лучше чем получать эту же ф-ть через драйвера и залежи любопытного кода в user mode, потому статья, считаю, нужная даже если в MSDN все это и есть, как тут кто-то заметил выше по ветке. Там вообще сейчас почти все есть, кстати — но это ж не значит что надо всем теперь молчать, не так ли?
А>Если вы не собираетесь заменять метод входа в систему а нужны только события то есть SENS API А>см MSDN поиск ISensLogon
да, это интересный вариант, но просто хочу отметить, что winlogon notification packages
— предоставляют гораздо больше информации, чем можно получить через SENS. например, имя windows station, desktop & token handles (чего в SENS не найдете). Зачастую идентификатора сессии и имени пользователя, вошедшего в систему (собственно это все что есть в SENS) недостаточно для решения задач. А получение такой информации вполне может оказаться неоправданной тратой ресурсов (речь о времени разработчиков) по сравнению с использованием WNLP.
— не требуют COM+ Event System service running (который часто просто отключен со всеми вытекающими)
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Slava Antonov, Вы писали:
SA>В статье нет самого главного — как с этой написанной библиотекой общаться другим программам. От библиоекти, которая просто пишет что-то в лог толку нет никакого.
Это все сами себе сделают, если надо. Статья же не о том как писать такую библиотеку, мало ли чего еще где нет? А то что обозвали WLNP библиотекой — это конечно лучше бы было заменить на что нибудь менее сбивающее с толку, тут согласен полностью.
SA>Так же кто-то говорил, что ловится будет не все. Но я проверял, ловится и Fast User Switching, и удаленные подключения.
не могли бы Вы мне напомнить, если проверяли, конечно: ловятся ли на всех ОС, начиная, скажем, с 2000 SP3, логоны всех основных типов, перечисленных в параметре DWORD dwLogonType ф-ии LogonUser:
или только LOGON32_LOGON_INTERACTIVE?
SA>Ну и, наконец, в статье нет про события "Reconnect" и "Disconnect" (это как раз при Fast User Switching).
да, автору не мешало бы пошарить просто по установленным на последних ОС с последними SP & updates записям в реестре — на предмент какие еще есть, кроме перечисленных в статье? это бы позволило обнаружить еще "PostShell" в пару к упомянутому "StartShell" — не правда ли, логично чтобы все события тут были парными и если у кого-то пары не хватает, то это же не значит что ее нет
... << RSDN@Home 1.2.0 alpha rev. 655>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Hello Valery A. Boronin, you wrote:
> не могли бы Вы мне напомнить, если проверяли, конечно: ловятся ли на всех ОС, начиная, скажем, с 2000 SP3, логоны всех основных типов,перечисленных в параметре DWORD dwLogonType ф-ии LogonUser:
Нет не проверял.
Я проверял на Win XP:
1) Обычный вход в систему находящуюся в домене.
2) Обычный вход в систему не в домене.
3) Fast user switching.
4) Вход через Remote Desktop.
--
Всего хорошего, Слава.
Если в вопросе нет никакого смысла, то не стоит его искать и в ответе. http://deadbeef.narod.ru (ICQ: 197577902)
Здравствуйте, Slava Antonov, Вы писали:
>> не могли бы Вы мне напомнить, если проверяли, конечно: ловятся ли на всех ОС, начиная, скажем, с 2000 SP3, логоны всех основных типов,перечисленных в параметре DWORD dwLogonType ф-ии LogonUser:
SA>Нет не проверял. SA>Я проверял на Win XP: SA>1) Обычный вход в систему находящуюся в домене. SA>2) Обычный вход в систему не в домене. SA>3) Fast user switching. SA>4) Вход через Remote Desktop.
все верно, Слава! для Ваших целей все тут как надо
и большое спасибо за замечания к статье — они очень качественно дополняют перевод из MSDN.
Кстати, еще есть моменты, которые мне не нравятся в статье до конца — уже замечания по коду т.к. буквально только что посмотрел как сделан вариант с логом в файл — это же просто не всегда работает! Жалею что не получилось ознакомиться со статьей по техническим причинам и не глянул код к статье, когда ее подписывали в печать. Тем кто сомневается предлагаю вывести отладочные сообщения в отладчик через OutputDebugString и сравнить потом с логами в файле, позаходить разными юзерами в параллель... ладно, пусть будет домашним заданием экспериментаторам.
поясню, почему задал вопрос: сессии, запущенные с помощью методов типа RunAs — а именно отличного от interactive logon session типа — не поймаются через WLNP в принципе. просто потому что дизайн связки winlogon+GINA предназначен для обслуживания LSA для поддержки именно LSA interactive logons. Для non-interactive logon sessions нужны другие методы. Вероятно, именно этот момент Вы и слышали: SA>Так же кто-то говорил, что ловится будет не все. Но я проверял, ловится и Fast User Switching, и удаленные подключения.
получается правы и Вы и Ваш источник. Просто, возможно, разные вещи имелись ввиду и этот момент на всякий случай в этой ветке отмечаю для будущих читателей.
... << RSDN@Home 1.2.0 alpha rev. 653>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
по блокировке приложений вспомнил и вот решил переиспользовать свой старый WLNP проектик, а заодно и делюсь им со всеми желающими. Надеюсь кому-то код окажется полезным!
РБ>Статья: РБ>Winlogon notification package
РБ>Авторы: РБ> Роман Бурда
РБ>Аннотация: РБ>Рассматривается использование Winlogon notification package для обработки событий входа и выхода пользователей, включения и выключения операционной системы и некоторых других.
Альтернативный пример к статье:
Исходники берем здесь
PPS Мастер от студии генерит немножко не то, там def файла нет
... << RSDN@Home 1.2.0 alpha rev. 655>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.