winapi - Windows Kernel Driver: Er 'HANDLE UniqueThread' i 'CLIENT\_ID CreatingThreadId' det samme under processen indlæsning?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at skrive en APC dll-injektionsdriver, jeg har fundet dette eksempel og tænkt at modificere det til mine behov. [23]


Efter at jeg forstod koden, så tænkte jeg på at ændre det (og mit spørgsmål kommer derfra).


I koden brugte forfatteren PsLookupThreadByThreadId til at modtage en refereret peger til ETHREAD-strukturen i den målrettede proces. [24] [25]


PsLookupThreadByThreadId(pSpi->Threads[0].ClientId.UniqueThread,&Thread)


men for at få SYSTEM\_THREAD\_INFORMATION til UniqueThread håndtaget, brugte han ZwQuerySystemInformation [26] [27] [28]


Jeg vil gerne indlæse min dll lige efter at ntdll er indlæst, så jeg vil bruge PsSetCreateProcessNotifyRoutineEx og gemme UniqueThread fra PS\_CREATE\_NOTIFY\_INFO. Jeg fik da tilbagekaldelsen er kaldet til den proces, jeg målretter mod. [29] [30] [31]


Og efter at ntdll er indlæst, som jeg vil vide takket være PsSetLoadImageNotifyRoutineEx, kunne jeg injicere min dll ved hjælp af sin APC-indsprøjtningslogik. [32]


mit mål er at indsprøjte min dll i PloadImageNotifyRoutine tilbagekaldelsen, men brug ikke ZwQuerySystemInformation som han gør for at få UniqueThread, men gem det i PcreateProcessNotifyRoutineEx tilbagekaldelsen. [33] [34] [35] [[[36]


Så mit spørgsmål er: Kan jeg stole på det unikke tråd, jeg får fra PS\_CREATE\_NOTIFY\_INFO, er det samme under hele procesindlæsningstiden? [37] [38]

Bedste reference



  Jeg vil bruge PsSetCreateProcessNotifyRoutineEx og gemme
  UniqueThread fra PS\_CREATE\_NOTIFY\_INFO Jeg fik da
  tilbagekald er kaldt til den proces, jeg målretter mod.



omkring CreatingThreadId fra PS\_CREATE\_NOTIFY\_INFO



  Proces ID og tråd ID for processen og tråden der
   oprettet den nye proces



dette id ikke til nyoprettet proces/tråd, men for skaberen. hvis du vil injicere selvdll i PloadImageNotifyRoutine callback - er PcreateProcessNotifyRoutineEx ubrugelig for dig.


PloadImageNotifyRoutine kaldes, når billedet er kortlagt til målprocessen - indenfor ZwMapViewOfSection. Du skal kontrollere, at ProcessId ( anden parameter af PcreateProcessNotifyRoutineEx - proces-id'en til processen hvor billedet er indlæst ) er lig med PsGetCurrentProcessId(). dette betyder, at billedet er indlæst i den nuværende proces, og du kan bruge KeGetCurrentThread() - du ikke brug for PsLookupThreadByThreadId overhovedet [39] [40] [41]]]



  Jeg vil gerne indlæse min dll lige efter at ntdll er indlæst



i øjeblikket er alle brugermodusstrukturer i gang, men endnu ikke initialiseret. fordi den initialiserede af ntdll. Som resultat - hvis du injicerer din apc og kraft udfører det i øjeblikket - har du kollision af processen. intet mere


Jeg kan rådgive dig med at injicere din dll, når kernel32.dll er indlæst. og her skal du kontrollere, at dette er belastning som dll, ikke blot billedkortlægning - tjek ArbitraryUserPointer i tråd teb - det peger på L"*\kernel32.dll": smss.exe kort kernel32.dll under oprette \KnownDlls (ArbitraryUserPointer == 0 i dette tilfælde), wow64 behandler flere tidskort kernel32.dll (32 og 64 bit) med L"WOW64\_IMAGE\_SECTION" eller L"NOT\_AN\_IMAGE" navne i ArbitraryUserPointer