Реализация пользовательского пакета проверки подлинности Windows - PullRequest
5 голосов
/ 13 октября 2010

Я создаю собственный подпакет аутентификации для MSV1_0 для Windows 7. Я использовал пример msvsubauth из Windows SDK и у меня есть 2 вопроса относительно некоторых проблем, с которыми я сталкиваюсь:

  1. Когда я пытаюсь просто убедиться, что процедура get вызвана и установить свойство Auth0 в реестре для моего пакета и добавить простой код в конец Msv1_0SubAuthenticationRoutine, который создает файл:

    //
    // Cleanup up before returning.
    //
    
    
    Cleanup:
    hTestFile = CreateFile(
                  TEXT("C:\\lsa\\lsa.txt"), 
                  GENERIC_READ|GENERIC_WRITE, 0, 
                  NULL, CREATE_ALWAYS, 
                  FILE_ATTRIBUTE_NORMAL, NULL);
    
    
    if(hTestFile != INVALID_HANDLE_VALUE) {
          CloseHandle(hTestFile);
    }
    
    
    return Status;
    
    
    }  // Msv1_0SubAuthenticationRoutine
    

    Очевидно, что пакет вызывается, потому что, когда я ввожу свой пароль, я получаю сообщение об ошибке из окон "параметр неверен", что является хорошим признаком.Но почему я получаю эту ошибку?когда точно такой же код выполняется из отдельного файла .exe, он отлично работает и создает тестовый текстовый файл.Я проверил разрешения и установил «полный контроль» для «всех».Есть идеи?SDK точно не упоминает, какой тип изоляции LSA создает для кода в пакетах аутентификации.

  2. Вторая проблема - тестирование AP.В настоящее время при каждом изменении я перестраиваю библиотеку, копирую ее на тестовую ВМ, а затем в папку System32 и перезагружаю ее.Есть ли более простой способ сделать это?

Спасибо заранее!

Ответы [ 2 ]

3 голосов
/ 31 мая 2011

Отладка в Winlogon и LSASS делает отладку наиболее трудоемкой.

Чтобы упростить отладку, вы можете написать прокси-точку доступа, которая экспортирует те же функции. При загрузке у вас proxy_ap будет

  1. Скопируйте реальный AP из известного местоположения во временное местоположение и.
  2. Загрузите библиотеку этой DLL, GetProcAddress всего и перенаправьте все полученные вызовы в эту недавно загруженную DLL.
  3. Следите за изменениями в каталоге, куда была скопирована исходная точка доступа
  4. Когда происходит изменение (и если ваша точка доступа изменилась) FreeLibrary и переходите к шагу 2

Но вам нужно тщательно следить за тем, что происходит с вашей целью разработки, потому что обработка переключателя dll при обработке запросов, поступающих из многих потоков, может стать худшим кошмаром, чем то, что вы пытаетесь решить.

LogonUI.exe каждый раз запускает новый экземпляр, но LSASS.exe долгое время.

+ Взгляните на исходный код CVSNT (http://cvsnt.sourcearchive.com/). У них довольно симпатичная точка доступа, которая реализует su. Запустите образец в локальной системной учетной записи с помощью psexec -s (из Microsoft / SysInternals pstools suite). )

1 голос
/ 02 апреля 2011

Возможно, ваша проблема в том, что все включают только аутентифицированных пользователей? Это всего лишь предположение.

Я предлагаю вам использовать Process Monitor для отслеживания сообщений об отказе в доступе или вашего пути. Это отлично подходит для отладки разрешений / проблем с путями всех видов.

Если вы столкнулись с проблемой на экранах «Разблокировать рабочую станцию» или «Изменить пароль», и это не мешает вам войти в систему, это должно быть легко сделать - включите его, воспроизведите проблему, войдите в систему эй престо.

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

...