Re[3]: К сожалению это малополезная информация
От: Аноним  
Дата: 07.08.06 18:29
Оценка:
Я не буду долго графоманить.
Спор на тему гипотетического вируса будет офтопиком.
Если для кого-то 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;
}

class CNotify : private ISensLogon
{
STDMETHOD_(ULONG,AddRef)() { return 1; }
STDMETHOD_(ULONG,Release)() { return 1; }
STDMETHOD (GetTypeInfoCount)(UINT*) { return E_NOTIMPL; }

STDMETHOD (GetTypeInfo)(UINT,LCID,ITypeInfo**){ return E_NOTIMPL; }
STDMETHOD (GetIDsOfNames)(REFIID,LPOLESTR*,UINT,LCID,DISPID*){ return E_NOTIMPL; }
STDMETHOD (Invoke)(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*){ return E_NOTIMPL; }


STDMETHOD(QueryInterface)(REFIID riid, void** ppvObject)
{
*ppvObject = NULL;
if (riid == IID_IUnknown || riid == IID_IDispatch ||
riid == IID_ISensLogon)
{ *ppvObject = this; }
return (*ppvObject != NULL)? S_OK : E_NOINTERFACE;
}

STDMETHOD(Logon)(BSTR bstrUserName){ return S_OK; }
STDMETHOD(Logoff)(BSTR bstrUserName){ return S_OK; }
STDMETHOD(StartShell)(BSTR bstrUserName){ return S_OK; }
STDMETHOD(DisplayLock)(BSTR bstrUserName){ return S_OK; }
STDMETHOD(DisplayUnlock)(BSTR bstrUserName){ return S_OK; }
STDMETHOD(StartScreenSaver)(BSTR bstrUserName){ return S_OK; }
STDMETHOD(StopScreenSaver)(BSTR bstrUserName){ return S_OK; }
public:
bool Init()
{
CComPtr<IEventSystem> es;
CComPtr<IEventSubscription> ess;
HRESULT hr;

es.CoCreateInstance(PROGID_EventSystem);
ess.CoCreateInstance(PROGID_EventSubscription);

ess->put_SubscriptionName(CComBSTR("SADFSDF"));

ess->put_EventClassID(GuidToBSTR(SENSGUID_EVENTCLASS_LOGON));
ess->put_SubscriberInterface(this);
es->Store(PROGID_EventSubscription,ess);
return true;
}
}x;

int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
x.Init();

MSG msg;
while(GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 0;
}

PS:Я его проверил — на моем 2к3 server отлично работает.
Re[2]: Winlogon notification package
От: acronim  
Дата: 08.08.06 21:25
Оценка:
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.
Буду благодарен за совет.
Re[2]: mpr.exe
От: Burd Украина http://proxysearcher.sourceforge.net
Дата: 22.08.06 16:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Можно узнать подробнее как использовать это.

А>В голову приходит только одно: загрузиться используя mpr.exe и поставить хук на все сообщения.Можно ли сделать по другому? Мне нужно мониторить загрузку\выключение компьютера и вход\выход пользователя в win9x.
А>Буду благодарен за совет.

Вход в систему мониторится очень просто — можно положить что вход в систему произведен когда была вызвана функция EntryPoint. В принципе так оно и есть. Функция вызываеться в какой то момент до появления приглашения для входа пользователя в систему.
Во всех остальных случаях мне неизвестны механизмы обработки событий с использованием указанного метода.

P.S. Я писал програмку, которая создавала отдельный поток в адресном пространстве mpr.exe и мониторила вход и выход пользователя. Но сделано было это не очень хорошо, поскольку я опрашивал текущего пользователя в цикле с паузой. Но я заметил одну интересную вещь. До какого-то момента (не помню какого именно) функция GetUserName не могла получить имя пользователя (возвращала FALSE). Может это чем то поможет в ваших поисках...
Любая задача имеет решение, даже когда решения не существует
Re[2]: К сожалению это малополезная информация
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 12.10.06 13:42
Оценка:
А>Описанный метод весьма опсен,
этот метод опасен только тем, что код исполняется в контексте winlogon и взрыв в таких местах фактически приравнивается к падению ОС или как минимум приведет к неработающему функционалу. справедливости ради отмечу, что некоторые падения не скажутся на стабильности ОС в силу
try
{
    Boot->Notify->EntryPoints[ Boot->Operation ]( &Info );
}
except( WlpNotifyExceptionFilter( GetExceptionInformation(), Boot ) )
{
    NOTHING ;
}


итого: если писать аккуратно то опаснотей особых нет. в любом случае по дизайну это часто гораздо лучше чем получать эту же ф-ть через драйвера и залежи любопытного кода в 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.
Re[2]: Winlogon notification package
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 12.10.06 14:33
Оценка:
Здравствуйте, Slava Antonov, Вы писали:

SA>В статье нет самого главного — как с этой написанной библиотекой общаться другим программам. От библиоекти, которая просто пишет что-то в лог толку нет никакого.

Это все сами себе сделают, если надо. Статья же не о том как писать такую библиотеку, мало ли чего еще где нет? А то что обозвали WLNP библиотекой — это конечно лучше бы было заменить на что нибудь менее сбивающее с толку, тут согласен полностью.

SA>Так же кто-то говорил, что ловится будет не все. Но я проверял, ловится и Fast User Switching, и удаленные подключения.

не могли бы Вы мне напомнить, если проверяли, конечно: ловятся ли на всех ОС, начиная, скажем, с 2000 SP3, логоны всех основных типов, перечисленных в параметре DWORD dwLogonType ф-ии LogonUser:

LOGON32_LOGON_BATCH
LOGON32_LOGON_INTERACTIVE
LOGON32_LOGON_NETWORK
LOGON32_LOGON_SERVICE

или только 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.
Re[3]: Winlogon notification package
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 13.10.06 00:04
Оценка:
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)
Posted via RSDN NNTP Server 2.0
Re[4]: Winlogon notification package
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 14.10.06 01:45
Оценка:
Здравствуйте, 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.
Windows Logon Notification Package Sample
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 22.01.07 19:44
Оценка:
Приветствую всех!

Ради проверки информации
Автор: Andrew.W Worobow
Дата: 18.01.07
по блокировке приложений вспомнил и вот решил переиспользовать свой старый WLNP проектик, а заодно и делюсь им со всеми желающими. Надеюсь кому-то код окажется полезным!

РБ>Статья:

РБ>Winlogon notification package
Автор(ы): Роман Бурда
Дата: 23.05.2006
Рассматривается использование Winlogon notification package для обработки событий входа и выхода пользователей, включения и выключения операционной системы и некоторых других.


РБ>Авторы:

РБ> Роман Бурда

РБ>Аннотация:

РБ>Рассматривается использование Winlogon notification package для обработки событий входа и выхода пользователей, включения и выключения операционной системы и некоторых других.

Альтернативный пример к статье:
Исходники берем здесь

Автор:
Валерий Боронин

Аннотация:
Пример иллюстрирует и дополняет
Автор: Valery A. Boronin
Дата: 12.10.06
оригинальную статью
Автор(ы): Роман Бурда
Дата: 23.05.2006
Рассматривается использование Winlogon notification package для обработки событий входа и выхода пользователей, включения и выключения операционной системы и некоторых других.
.
Представляет собой проект Win32 DLL, экспортирующей некоторый API, подлежащий проверке.

краткая инструкция: кладем wlnp.dll в %systemroot%\system32. Если хотим тестить WLNP — пускаем wlnp.reg, если хотим тестить блокировку приложений, регистрируемся через AppCertDlls.reg. Reboot. Достаем DbgView/WinDbg и смотрим логи.


PS Идеально подходит в качестве быстрого старта для подобных тестовых нужд, потому и родился на свет. Например см. 2 в 1: Блокировка запуска приложений и WLNP. Test App.
Автор: Valery A. Boronin
Дата: 22.01.07


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.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.