c ++ - Injected DLL er straks losset

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger C++ til at injicere en DLL i en løbende proces. En god kildekode base til dette er her (det er det jeg bruger.) For et kort eksempel kan du bruge koden fra dette spørgsmål. Mit problem er, at DLL efter injektion straks aflæses igen. Jeg kan observere indlæste DLL s i x64Dbg for eksempel når debuggeren er vedhæftet, og det sagde følgende: [18] [20]


Thread 7CC8 created, Entry: <kernel32.LoadLibraryA>
DLL Loaded: 0000000001110000 D:MyDLL.dll
DLL Unloaded: 0000000001110000 mydll.dll
Thread 7CC8 exit


Jeg debugged injektionen, og det skete altid på CreateRemoteThread() eller en lignende metode til opsætning og kørsel af tråden.


Hvorfor sker dette og hvordan man forhindrer processen i at aflæse DLL? Jeg har set kommentarer som denne, der antyder at bruge GetModuleHandleEx, men jeg er ikke sikker på, hvor jeg skal bruge den i koden og hvordan. Når man finder adressen til LoadLibrary i målprocessen eller skal den kaldes i den injicerede DLL? Hvordan vil metoden kalde ligne så? [22]


loadLibAddr = GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryA");


Et andet forslag var at gentagne gange kalde LoadLibrary, men når præcist? Processen har allerede aflæst DLL efter tråddannelsen, så jeg er ikke sikker på, hvordan dette kunne gøres.


Reflective injection virker ikke (for eksempel GetReflectiveLoaderOffset() returnerer 0). Jeg arbejder også med helt 64-bit applikationer. [24]


Jeg ved, at dette er muligt, da jeg har set en vedvarende injektion sket ved en anden ansøgning.

Bedste reference