Как сделать ключ-флешку

Вход в систему по подключению определенной флешки

Одним ужасным пятничным вечером мне стало интересно как реализован вход в систему(Windows 7) по отпечатку пальца, так часто использующийся на ноутбуках. Что меня большего всего интересовало – как сделана такая прозрачная интеграция с WinLogon(механизм входа в систему).

С помощью знакомого я узнал что сие называется Credential Provider(по крайней мере начиная с Vista, до неё – был другой механизм). И тут-то я вспомнил что давно хотел сделать чтобы система разблокировалась при подключении одной определенной флешки. Поэтому я захотел быстренько наваять такой проект.

Первое что я сделал – это поискал примеры реализации Credential Provider. Они быстро нашлись в Windows SDK, а так же отдельно примеры(но устаревшие – для висты).

Среди примеров был наиболее близкий мне – SampleHardwareEventCredentialProvider.

Расскажу вкратце как устроен механизм провайдеров учетных записей(Credential Provider).

В реестре(HKLMSoftwareMicrosoft WindowsCurrentVersionAuthentification) есть две ветки – собственно Credential Providers и Credential Provider Filters. В каждом из них набор вида “ветка-GUID”(GUID – уникальный идентификатор) с дефолтным параметром – названием провайдера или фильтра. Тут надо пояснить что такое провайдеры и фильтры.

Провайдер – он дает нам возможность входа в систему. Например по отпечатку пальца, по вводу пароля(дефолтное поведение), по смарткарте, и т.д.

Фильтры – фильтруют “лишнее” поведение от пользователя. Пример – если политикой безопасности запрещен вход по смарткарте – фильтр может отключить такой провайдер.

Далее, в реестре в всем известном страшном месте HKCRCLSID описаны GUIDы, а в нашем случае – для идентификаторов фильтров и провайдеров прописаны их названия, название файла — dll-ки, и модель потоков(ThreadingModel=Apartment).

Фильтры мы рассматривать не будем, перейдем конкретно к провайдеру.

В проекте у нас есть несколько классов:
CSampleProvider, реализующий интерфейс ICredentialProvider. Именно он отвечает за механизм входа и предоставление удостоверения(Credential)
CSampleCredential, реализующий труднопроизносимый интерфейс ICredentialProviderCredential. Собственно тут указаны имя пользователя, пароль(или токен авторизации, что лучше). Экземпляр этого класса мы отдаем WinLogon для входа в систему.
CommandWindow, класс окна-заглушки.

По умолчанию в SampleHardwareEventCredentialProvider такое поведение:
При создании главного класса механизмом входа WinLogon – в другом потоке создается окно с кнопкой, которая симулирует событие подключения устройства. При нажатии на кнопку – происходит переход на логин с учетной записью “Administrator”.

Что мне надо минимально поменять из этого поведения чтобы было рабочее решение для меня?
Скрыть окно, сменить жёстко прописанную учетную запись “Administrator” на мою(с автовводом пароля), включить автовход, и реализовать событие WM_DEVICECHANGE.

Скрыть окно было просто – всего лишь найти ShowWindow(hWnd, SW_SHOW); и заменить на SW_HIDE
Сменить жёстко прописанную учетную запись – тоже было просто – я создал отдельный файл consts.h, где прописал:

static const wchar_t* USERNAME = (L «Кирилл Орлов» );
static const wchar_t* PASSWORD = (L «Сорок тысяч обезьян в жопу сунули банан.» );

* This source code was highlighted with Source Code Highlighter .

Включить автовход тоже было несложно:

HRESULT CSampleCredential::SetSelected(__out BOOL* pbAutoLogon)
*pbAutoLogon = TRUE; //тут было FALSE
return S_OK;
>

* This source code was highlighted with Source Code Highlighter .

Этот метод вызывается при выборе пользователя для входа.

Осталось единственное сложное – реализовать событие WM_DEVICECHANGE.
В нем мне надо найти некий уникальный идентификатор флешки, сравнить с эталонным, и в случае совпадения – поставить флаг что нужное устройство подключено, который затем прочитает CSampleCredential.

Что может быть уникальным у флешки? Вобщем-то много всего, VendorID/ProductID(уникальны на продукт, т.е. у одной и той же серии флешек – совпадает), номер серийника раздела(сбрасывается при переформатировании). Я сравниваю PNPID через механизм WMI(Windows Management Instrumentation).

Вообще про WMI можно говорить долго, скажу только что это средство получения информации и управления кучей компонентов ОС и не только, и имеет свой SQL-подобный язык запросов, называемый WQL. Есть замечательная утилита от Microsoft под названием WMI Browser, очень советую поставить – можно узнать много нового о том, что можно узнать с помощью WMI.

Вот модифицированная процедура потока, в которой помимо создания окна теперь ещё и инициализация глобальных статичных переменных для работы с WMI:

static IEnumWbemClassObject* pEnumerator ;
static IWbemLocator *pLoc ;
static IWbemServices *pSvc;
static IWbemClassObject *pclsObj;

DWORD WINAPI CCommandWindow::_ThreadProc(__in LPVOID lpParameter)
CCommandWindow *pCommandWindow = static_cast(lpParameter);
if (pCommandWindow == NULL)
return 0;
>

HRESULT hres;
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
return 1; // Program has failed.

hres = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) &(pLoc));
if (FAILED(hres))
CoUninitialize();
return 1; // Program has failed.
>
hres = pLoc->ConnectServer(
_bstr_t(L «ROOT\CIMV2» ), // Object path of WMI namespace
NULL, // User name. NULL = current user
NULL, // User password. NULL = current
0, // Locale. NULL indicates current
NULL, // Security flags.
0, // Authority (e.g. Kerberos)
0, // Context object
&pSvc // pointer to IWbemServices proxy
);

if (FAILED(hres))
pLoc->Release();
CoUninitialize();
return 1; // Program has failed.
>

hres = CoSetProxyBlanket(
pSvc, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // client identity
EOAC_NONE // proxy capabilities
);

if (FAILED(hres))
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1; // Program has failed.
>

HRESULT hr = S_OK;

// Create the window.
pCommandWindow->_hInst = GetModuleHandle(NULL);
if (pCommandWindow->_hInst != NULL)
<
hr = pCommandWindow->_MyRegisterClass();
if (SUCCEEDED(hr))
hr = pCommandWindow->_InitInstance();
>
>
else
hr = HRESULT_FROM_WIN32(GetLastError());
>
ShowWindow(pCommandWindow->_hWnd, SW_HIDE);

if (SUCCEEDED(hr))
<
while (pCommandWindow->_ProcessNextMessage())
>
>
else
if (pCommandWindow->_hWnd != NULL)
pCommandWindow->_hWnd = NULL;
>
>

return 0;
>

* This source code was highlighted with Source Code Highlighter .

соответственно в деструкторе CommandWindow освобождаем ресурсы:

pSvc->Release();
pLoc->Release();
pEnumerator->Release();
pclsObj->Release();

* This source code was highlighted with Source Code Highlighter .

И теперь самое интересное – обработчик события WM_DEVICECHANGE:

case WM_DEVICECHANGE:
HRESULT hres = pSvc->ExecQuery(
bstr_t( «WQL» ),
bstr_t( «SELECT * FROM Win32_DiskDrive» ),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres))
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1; // Program has failed
>

ULONG uReturn = 0;

while (pEnumerator)
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn);

hr = pclsObj->Get(L «PNPDeviceID» , 0, &vtProp, 0, 0);
if (wcscmp(vtProp.bstrVal,PNPID) == 0)
PostMessage(hWnd, WM_TOGGLE_CONNECTED_STATUS, 0, 0);
>
VariantClear(&vtProp);

pclsObj->Release();
>
>
break ;

* This source code was highlighted with Source Code Highlighter .

Здесь происходит выполнение WQL-запроса к Win32_DiskDrive – списку наших дисков. Т.е. по PNPID мы можем привязаться к флешке, внешнему харду, но не к примеру usb-мышке(хотя это тоже можно реализовать!).

После выполенения запроса я сравниваю полученную строку(vtProp.bstrVal) с захардкоженным PNPID в consts.h:

static const wchar_t* PNPID = (L «USBSTOR\DISK&VEN_CBM&PROD_FLASH_DISK&REV_5.00\192023004CB4C702&0» );

* This source code was highlighted with Source Code Highlighter .

PNPID можно подсмотреть в том же WMI Browser или можно воспользоваться средствами Visual Studio для работы с WMI.

Если они совпали – то я отправляю сообщение для включения флага подключения нужной флешки, по которому устанавливается этот флаг и вызывается метод обновления у провайдера.

Далее остался финальный штрих – заменить GUID нашей библиотеки с дефолтного на случайный в register.reg/unregister.reg и в guid.h.

Вот и всё. Далее дело за малым – скомпилировать проект, скопировать полученную библиотеку в System32, и выполнить register.reg. Потом нажимаем Win+L(блокировка системы) и наслаждаемся 🙂

Вот тут можно скачать исходники.

Как сделать ключ-флешку

Компьютер является своего рода средством хранения важных данных. Чтобы обезопасить свой компьютер от «утечки данных», если это рабочий компьютер, можно воспользоваться многообразием существующих способов: блокировка входа в систему при помощи сложного пароля, обесточивание компьютера, установка детектора отпечатка пальцев на современном переносном компьютере и т.д. Совсем недавно появился интересный способ блокировки доступа – программирование usb-носителя. Принцип этого способа заключается в создании кода на стандартной флешке любого размера. Вход в операционную систему произойдет только в том случае, когда нужная флешка будет вставлена в usb-разъем.

Как сделать ключ-флешку

  • Как сделать ключ-флешку
  • Как сделать копию ключа usb
  • Как скопировать usb ключ
  • Программное обеспечение Predator, flash-носитель.

Утилита Predator позволяет кодировать флешку, создавая некий usb-ключ, без этого ключа будет невозможно открыть доступ к компьютеру. Это весьма удобное решение не только для настольного, но и для переносного компьютера. Интересный факт, с которым сталкиваются пользователи этой программы – программа запоминает usb-порт, использованный для создания ключа. После его создания программа запоминает переданный код. После безопасного извлечения флешки, экран отключается, становятся недоступными клавиатура и мышь.

Стоит отметить, что программа абсолютно бесплатная, но требует установки дополнительных надстроек. Для корректной работы этой утилиты вам понадобится пакет Microsoft .NET Framework 3.5. Это дополнение можно скачать с официального сайта разработчика – Microsoft.com. После запуска программы достаточно указать родной вам язык в главном окне программы. Настройки по умолчанию являются самыми оптимальными, поэтому можете их использовать всегда.

Не забудьте задать пароль, который будет выводить программу из спящего состояния. Нажмите кнопку «Создать ключ». Помните, во время работы flash-носитель должен всегда присутствовать в usb-порту, каждый полчаса Predator генерирует новые пароли.

Защита учетной записи Windows с помощью USB-ключа

Защита учетной записи Windows с помощью USB-ключа

У обычного пароля, защищающего учетную Windows, есть некоторые недостатки. Например, простой пароль легко подобрать, а сложный трудно запомнить. Предлагаю заменить пароль на USB-ключ. С помощью программы Rohos Logon Key мы создадим специальный ключ, который будет записан на usb флешку. Для загрузки операционной системы достаточно подключить флешку к компьютеру и вход будет выполнен автоматически.

Итак, загружаем программу Rohos Logon Key с официального сайта разработчика. Обратите внимание, что это бесплатная версия программы с некоторыми ограничениями, но необходимые функции доступны! При установке выберите русскоязычный интерфейс.

Далее устанавливаем пароль на свою учетную запись Windows. Если пароль уже есть, пропускаем данный этап. Подключаем usb флешку к компьютеру и запоминаем название (букву) съемного диска.

Защита учетной записи Windows с помощью USB-ключа

Советую выделить отдельную флешку под данную программу и ничего на нее не записывать. Использовать только для входа в учетную запись! Запускаем программу Rohos Logon Key и нажимаем на кнопку «Настроить USB Ключ«.

Защита учетной записи Windows с помощью USB-ключа

На экране появится небольшое окно с настройками. Проверяем правильно ли определилась usb флешка (например, съемный диск G). Если нет, то выбираем ее вручную. Ниже вводим пароль, который сейчас используется для входа в учетную запись Windows. И нажимаем на кнопку «Настроить USB Ключ«.

Защита учетной записи Windows с помощью USB-ключа

Через несколько секунд появится сообщением об успешном создании ключа.

Защита учетной записи Windows с помощью USB-ключа

Готово! Теперь можно перезагрузить компьютер и использовать USB-ключ. Когда потребуется ввести пароль, вставляем флешку в usb порт.

Создание USB-ключа доступа к Windows

Теперь настроим Windows на хранение её ключа запуска на флешке и создадим сам этот ключ. Запускаем утилиту SysKey. Жмём Win + R и вводим:

syskey

В окошке утилиты жмём «Обновить».

Syskey

Далее выбираем первый пункт «Хранить ключ запуска на дискете». Жмём «Ок».

Обновить

Если флешка ещё не вставлена в USB -порт компьютера, то вставляем её. Если вставлена, просто жмём «Ок» в следующем окошке.

Хранение ключа запуска

Жмём «Ок» в отчётном окошке о создании ключа. И ещё раз «Ок» — в уведомлении об изменении ключа.

Сохранение ключа

Достоинства и недостатки такого решения

Защищая себя только паролями, большая оплошность безопасности. Даже если вы создаете хорошие пароли и практикуете хорошие привычки безопасности , есть один недостаток пароля: как только вы засветили пароль, любой может им воспользоваться. В этом смысле, физический ключ труднее украсть, чем нематериальный.
Но не без изъянов.
С одной стороны, вы получаете лишний геморрой, если вы вдруг потеряете или сломаете ключ USB: восстановить такой ключ более сложно, чем пароль. Другой недостаток, захотите предоставить кому-либо еще доступ, вы должны передать им ключ. Сказать по телефону пароль уже не получится, но тем не менее, не трудно же передать ключи от квартиры другу, если понадобится.

Predator является одним из самых популярных инструментов для превращения флешки в устройство контроля доступа.

Принцип работы следующий: пока флешка подключена в USb доступ к компьютеру разрешается. Тут возможна двухэтапная аутентификация, то есть иметь USB ключ мало, еще необходимо ввести пароль.
Чтобы настроить первый ключ USB:

  • Установите Predator .
  • Запустите
  • Вставьте диск USB
  • Введите пароль для этого пользователя
  • Выберите диск, который представляет собой устройство USB.
  • Нажмите кнопку Register Key.

usb-key-dongle-tools-predator

Накопитель используемый в качестве ключа останется полностью без изменений. Никакие файлы не будут удалены или изменены.
Расширенные функции включают в себя:

  • Один USB накопитель может быть использован для блокировки /разблокирования нескольких компьютеров.
  • Несколько флешек могут быть использованы для одного компьютера, разными пользователями
  • Встроенный планировщик, может ограничить доступ к компьютеру в определенное время суток, причем расписание может быть определено для определенного пользователя
  • В случае потери или поломки ключа USB, существует аварийный пароль
  • Все попытки входа протоколируются и записываются в журнал. Кроме того можно настроить, чтобы при попытке разблокирования веб камера делала снимок ,и отправляла одним из доступным образом

predato

В общем, Predator является хорошим выбором, если вы хотите быстрое и простое решение.

Как сбросить пароль Windows с помощью установочной флешки или диска

Привет, друзья. Как получить доступ к локальной учётной записи Windows, если пароль к ней забыт, а съёмный носитель сброса ранее не создавался? Или, например, не работает пароль от учётной записи Microsoft из-за того, что мошенники своровали почтовый ящик и сменили пароли на аккаунтах различных интернет-сервисов, включая аккаунт Microsoft. Эта статья пополнит уже имеющуюся на сайте Remontcompa.Ru копилку знаний о сбросе пароля доступа к компьютеру. Отличием этого способа от других станет использование для этих целей в качестве инструмента не стороннего ПО, а родного установочного диска или флешки Windows 7, 8.1 или 10. Все те автоматические процессы, которые происходят при использовании специального софта для сброса паролей, мы проделаем вручную путём правки системного реестра.

Важно: друзья, изложенные ниже действия предлагаются сугубо в конструктивных целях – когда необходимо сбросить пароль к учётной записи Windows на вашем личном устройстве. Либо же когда вас об этом просят менее опытные владельцы компьютеров. Взлом не принадлежащих вам устройств против воли их владельцев уголовно наказуем и является вашей личной ответственностью.

Итак, нужно сбросить пароль локальной учётной записи Windows 7, 8.1 или 10 или подключённой учётной записи Microsoft. Что делаем? В первую очередь необходимо иметь в наличии или специально для этих целей подготовить загрузочный носитель с любой из этих версий Windows, например, с версией 10. Либо же можно отыскать где-нибудь в закромах какой-то Live-диск на базе WinPE, где есть редактор реестра системы.

Загружаться с установочного носителя в случае с Windows 8.1 и 10 необходимо только после перезагрузки компьютера.

Т.е. вставляем съёмный носитель, перезагружаемся и сразу же входим в BOIS для выставления загрузки с носителя. Версии 8.1 и 10, в отличие от версии 7, при выборе опции «Завершение работы» не выключаются полностью. По умолчанию они настроены на быстрый запуск – использование технологии на базе режима гибернации с выгрузкой из оперативной памяти системного ядра в файл на диске и загрузкой снова в память при включении питания. Так что перезагрузка для смены устройства запуска компьютера имеет принципиальное значение. Иначе все предложенные ниже операции не будут применены.

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector