Vectored Overloading PE Injection
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die π¬ Discord groep of die telegram groep of volg ons op Twitter π¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Oorsig van die tegniek
Vectored Overloading is a Windows PE injection primitive wat klassieke Module Overloading met Vectored Exception Handlers (VEHs) en hardware breakpoints saamvoeg. In plaas daarvan om LoadLibrary te patch of βn eie loader te skryf, die aanvaller:
- Skep βn
SEC_IMAGEsection wat deur βn wettige DLL ondersteun word (bv.wmp.dll). - Oorskryf die gemapte view met βn volledig hergelokiseerde kwaadwillige PE, maar hou die section object wat na die onskadelike image op skyf wys.
- Registreer βn VEH en programmeer debug registers sodat elke oproep na
NtOpenSection,NtMapViewOfSection, en opsioneelNtCloseβn user-mode breakpoint veroorsaak. - Roep
LoadLibrary("amsi.dll")op (of enige ander onskadelike teiken). Wanneer die Windows loader daardie syscalls aanroep, slaag die VEH daarby in om die kernel-oorgang oor te slaan en die handles en basisadresse van die voorbereide kwaadwillige image terug te gee.
Omdat die loader steeds glo dit het die versoekte DLL gekarteer, sien tooling wat net na section backing files kyk wmp.dll, al bevat geheue nou die aanvaller se payload. Intussen word imports/TLS callbacks steeds deur die ware loader opgelos, wat die hoeveelheid pasgemaakte PE-parsing logika wat die aanvaller moet handhaaf beduidend verminder.
Fase 1 β Bou die vermomde section
- Create and map a section for the decoy DLL
NtCreateSection(&DecoySection, SECTION_ALL_ACCESS, NULL,
0, PAGE_READWRITE, SEC_IMAGE, L"\??\C:\\Windows\\System32\\wmp.dll");
NtMapViewOfSection(DecoySection, GetCurrentProcess(), &DecoyView, 0, 0,
NULL, &DecoySize, ViewShare, 0, PAGE_READWRITE);
- Kopieer die kwaadwillige PE in daardie view section-vir-section, respekteer
SizeOfRawData/VirtualSizeen werk die protections daarna by (PAGE_EXECUTE_READ,PAGE_READWRITE, ens.). - Pas relocations toe en los imports op presies soos βn reflective loader sou doen. Omdat die view reeds as
SEC_IMAGEgemap is, stem section alignments en guard pages ooreen met wat die Windows loader later verwag. - Normaliseer die PE-header:
- Indien die payload βn EXE is, stel
IMAGE_FILE_HEADER.Characteristics |= IMAGE_FILE_DLLen nul die entry point om te verhoed datLdrpCallTlsInitializersin EXE-spesifieke stubs spring. - DLL payloads kan hul headers ongemoeid laat.
Op hierdie punt het die proses βn RWX-vaardige view waarvan die backing object nog steeds wmp.dll is, maar die bytes in geheue is deur die aanvaller beheer.
Fase 2 β Kaap die loader met VEHs
- Registreer βn VEH en aktieweer hardware breakpoints: programmeer
Dr0(of βn ander debug register) met die adres vanntdll!NtOpenSectionen stelDR7sodat elke uitvoeringSTATUS_SINGLE_STEPveroorsaak. Herhaal later virNtMapViewOfSectionen opsioneelNtClose. - Trigger DLL loading met
LoadLibrary("amsi.dll").LdrLoadDllsal uiteindelikNtOpenSectionaanroep om die regte section handle te kry. - VEH hook vir
NtOpenSection:
- Lokaliseer die stack-slot vir die
[out] PHANDLE SectionHandleargument. - Skryf die vooraf geskepte
DecoySectionhandle in daardie slot. - Advance
RIP/EIPna dieretinstruksie sodat die kernel nooit aangeroep word nie. - Heraktiveer die hardware breakpoint om volgende na
NtMapViewOfSectionte kyk.
- VEH hook vir
NtMapViewOfSection:
- Oorskryf die
[out] PVOID *BaseAddress(en size/protection uitvoerparameters) met die adres van die reeds gemapte kwaadwillige view. - Slaan die syscall-lichaam oor soos tevore.
- (Opsioneel) VEH hook vir
NtCloseverifieer dat die fop section handle skoongemaak word, voorkom resource leaks en bied βn finale sanity check.
Aangesien die syscalls nooit uitgevoer word nie, sien kernel callbacks (ETWti, minifilter, ens.) nie die verdagte NtOpenSection/NtMapViewOfSection gebeure nie, wat telemetry drasties verlaag. Vanuit die loader se oogpunt het alles geslaag en is amsi.dll in geheue, dus gaan dit voort met import/TLS-oplossing teenoor die aanvaller se bytes.
Fase 3 β Voer die payload uit
- EXE payload: Die injector spring eenvoudig na die oorspronklike entry point sodra relocations gedoen is. Wanneer die loader dink dit sou
DllMainoproep, voer die pasgemaakte kode in plaas daarvan die EXE-styl entry uit. - DLL payload / Node.js addon: Los die bedoelde export op en roep dit aan (Kidkadi gee βn benoemde funksie aan JavaScript). Omdat die module reeds by
LdrpModuleBaseAddressIndexgeregistreer is, sien opvolg-lookup dit as die onskadelike DLL.
Wanneer dit met βn Node.js native addon (.node lΓͺer) gekombineer word, bly al die swaar Windows-internals werk buite die JavaScript-laag, wat die bedreigingsakteur help om dieselfde loader met baie verskillende obfuskeerde Node-wrappers te gebruik.
References
- Check Point Research β GachiLoader: Defeating Node.js Malware with API Tracing
- VectoredOverloading β PoC implementation
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die π¬ Discord groep of die telegram groep of volg ons op Twitter π¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


