Я хочу использовать PsSetCreateProcessNotifyRoutineEx
и сохранить
UniqueThread
от PS_CREATE_NOTIFY_INFO
Я получил, когда
обратный вызов вызывается для процесса, на который я нацеливаюсь.
о CreatingThreadId
от PS_CREATE_NOTIFY_INFO
Идентификатор процесса и идентификатор потока процесса и потока, который
создал новый процесс
этот идентификатор не для нового созданного процесса / потока, а для создателя. если вы хотите внедрить self dll в PloadImageNotifyRoutine
callback - PcreateProcessNotifyRoutineEx
для вас бесполезен.
PloadImageNotifyRoutine
вызывается, когда изображение отображается на целевой процесс - внутри ZwMapViewOfSection
. вам нужно убедиться, что ProcessId
( второй параметр PcreateProcessNotifyRoutineEx
- идентификатор процесса, в который загружается изображение ), равен PsGetCurrentProcessId()
. это означает, что изображение загружено в текущий процесс, и вы можете использовать KeGetCurrentThread()
- вам не нужно PsLookupThreadByThreadId
вообще
Я хочу загрузить свою DLL сразу после загрузки ntdll
на данный момент любые структуры пользовательского режима в процессе еще не инициализированы. потому что он инициализирован ntdll. В результате - если вы введете свой apc и принудительно выполните его в этот момент - вы получите сбой процесса. не более
Могу посоветовать вам ввести dll при загрузке kernel32.dll . и здесь вам нужно проверить, что это загрузка как dll, а не просто отображение изображений - проверьте ArbitraryUserPointer
в потоке teb - указывают ли они на L"*\\kernel32.dll"
: smss.exe map kernel32.dll во время создания \\KnownDlls
(в данном случае ArbitraryUserPointer == 0
) wow64 обрабатывает несколько временных карт kernel32.dll (32 и 64 бит) с именами L"WOW64_IMAGE_SECTION"
или L"NOT_AN_IMAGE"
в ArbitraryUserPointer