Возможно ли подменить результаты в ядре для функций ? Код (Text): GetUserName GetWindowsDirectory GetComputerName Пробовал их трейсить но мало чего понял, похоже что они в ядро вообще не обращяются. Но всётаки, может кто сталкивался и чтонить подскажет?
Функция GetComputerName использует функцию RtlQueryEnvironmentVariable_U для получения имени компьютера с параметром _CLUSTER_NETWORK_NAME_. Код (Text): NTSTATUS RtlQueryEnvironmentVariable_U( IN PVOID Environment OPTIONAL, IN PUNICODE_STRING Name, IN OUT PUNICODE_STRING Value ); эта функция обращается к Peb->ProcessParameters->Environment.
gpTermsrvGetComputerName gpTermsrvGetWindowsDirectoryA gpTermsrvGetWindowsDirectoryW - GetUserName() и прочие функции связанные с авторизацией это запросы к lsass насколько помню. Тут немеряно способов.
gpTermsrvGetComputerName gpTermsrvGetWindowsDirectoryA gpTermsrvGetWindowsDirectoryW это службы терминалов адреса, они обнулены обычно. в адвари есть похожий механизм при вызове некоторых функций работы с реестром. Заполняются они в случае определенного флага в KUSER_SHARED_DATA.SuiteMask.
lhc645 Загружается при этом провайдер, для которого устанавливаются эти стабы. Это не важно. Просто нужно найти ссылки и загрузить туда хэндлеры. Хотя всёже я использовал бы исключения
Дада, об этом и было написано в предыдущем моем посте. А, вы это имели ввиду (меня сбила фраза про lsass). Нехваток сна сказывается на концентрации внимания
n0name Не, она из переменной читает BaseWindowsDirectory, которая заполняется при коннекте к csrss из его инфы.
А загрузщик откуда значение берёт чтобы заполнить "Peb->ProcessParameters->Environment" ? Если из реестра то можно просто перехватить NtQueryValueKey.
Блок переменных окружения либо при создании процесса из параметра Environment берется или копируется блок процесса-родителя.
GetUserName получает информацию с помощью ZwRequestWaitReplyPort (для LsaAuthenticationPort). В юзермоде можно было бы изменить SecpLsaDispatchFn и получить управление раньше, но вы, как я понимаю, не хотите делать в юзермоде.