По следам этого. Конечная задача такая: аутентифицировать Васю Пупкина с целью выполнить некие действия от его лица, при этом нельзя в каком-либо [восстановимом] виде хранить пароль Васи Пупкина. В лоб эта задача не решается. Думаю о двух теоретически возможных путях: 1. Сохранять некий "криденшл", из которого невозможно получить пароль Васи Пупкина, но который возможно использовать для аутентификации, скажем, как-нибудь хитро передав его, например, в AcquireCredentialsHandle. 2. Добавить собственный провайдер аутентификации. Прошу какой-нибудь информации на эти темы, направьте плз в нужную сторону.
хэш Хэшируешь пароль, оригинал пароля удаляешь, до конца сессии пользуешься хэшэм. Пароль из хэша невосстановим.
причем тут хэш. где он сможет пользоваться им? Сделай себе конфиг с записями типа "пользователь-задача". на старте проверяей если пользователи совпадают, имперсонируйся и запускай задачу. Или ты хочешь выполнять задачу даже когда загружен не тот пользователь что нужно?
Тогда нужен пасс. А зачем такая привязка к пользователю если есть админ-права, может легче пропатчить ф-цию какую-то чтобы она возвращала что процесс запущен от того кто тебе нужен?
Слишком много придется патчить. К тому же, нужна проверка прав доступа к объектам, правильные записи в системном логе, и т.п.
драйвером наверное можно напрямую пропатчить токен-обджект но задачка нетривиальная я не слышал про такое и даже если сделать - будет это некомпатибабельно легче в 1000 раз пассворд заиметь и вызвать логонюзер
Логонюзер и керберос иже с ним, хады, требуют плейнтекст пароль, в этом и состоит основная проблема и требование - чтобы его не было на машине в восстановимом виде.
На ум приходит разве что трюк с патчем MSV1_0.DLL чтобы она хавала белиберду вместо пароля. Правда не знаю получится ли например из службы пропатчить в памяти, вызвать LogonUser с белибердой вместо пароля и отменить патч, ибо патчить на диске - это грязный хак и фактически отключение авторизации как таковой.
Я перехватывал RtlCompareMemory в CSRSS.exe, и вбиваем любой пароль, потом убеждаемся что хеш в параметре RtlCompareMemory такой какой мы ождаем - возвращаем 0 и все) аутентификация пройдена)