Vectored Overloading PE Injection
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Tip
Unatafuta mbinu za Windows 11 LFH heap shaping na VMware Workstation PVSCSI (vmware-vmx) escape techniques?
{{#ref}} vmware-workstation-pvscsi-lfh-escape.md {{#endref}}
Muhtasari wa mbinu
Vectored Overloading ni Windows PE injection primitive inayochanganya classic Module Overloading na Vectored Exception Handlers (VEHs) na hardware breakpoints. Badala ya kupachika LoadLibrary au kuandika loader yake mwenyewe, mshambuliaji:
- Anaunda section ya
SEC_IMAGEinayoungwa mkono na DLL halali (mfano,wmp.dll). - Anakandamiza mapped view na PE mbaya iliyosogezwa kikamilifu lakini akaweka section object ikielekea picha nzuri kwenye diski.
- Anasajili VEH na kuendesha debug registers ili kila simu ya
NtOpenSection,NtMapViewOfSection, na hiariNtCloseifanye breakpoint ya user-mode. - Anaita
LoadLibrary("amsi.dll")(au DLL nyingine yoyote isiyo-hasimu). Wakati loader ya Windows inapoita syscalls hizo, VEH inapitia kernel transition na kurudisha handles na base addresses za picha mbaya zilizotayarishwa.
Kwa kuwa loader bado inaamini ilirambia DLL iliyoombwa, zana ambazo zinatafuta tu section backing files zinaona wmp.dll ingawa memory sasa ina payload ya mshambuliaji. Wakati huo huo, imports/TLS callbacks bado zinafunguliwa na loader halisi, hivyo kupunguza kiasi cha PE-parsing ya custom mshambuliaji anapaswa kudumisha.
Hatua ya 1 – Tengeneza sehemu iliyofichwa
- Tengeneza na ramisha section kwa DLL ya kisingizio
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);
- Nakili PE mbaya ndani ya view hiyo section kwa section, ukiheshimu
SizeOfRawData/VirtualSizena kusasisha ulinzi baadae (PAGE_EXECUTE_READ,PAGE_READWRITE, nk.). - Tumia relocations na tatua imports kwa usahihi kama reflective loader ingefanya. Kwa kuwa view tayari imemapishwa kama
SEC_IMAGE, alignments za section na guard pages zinaendana na matarajio ya Windows loader baadaye. - Sanitiza header ya PE:
- Ikiwa payload ni EXE, weka
IMAGE_FILE_HEADER.Characteristics |= IMAGE_FILE_DLLna weka entry point kuwa sifuri ili kuzuiaLdrpCallTlsInitializerskuruka ndani ya stubs maalumu za EXE. - DLL payloads zinaweza kuendelea kutumia headers zao bila mabadiliko.
Kwa hatua hii mchakato unamiliki view yenye uwezo wa RWX lakini backing object bado ni wmp.dll, huku bytes za memory zikidhibitiwa na mshambuliaji.
Hatua ya 2 – Rivalisha loader kwa VEHs
- Sajili VEH na weka hardware breakpoints: panga
Dr0(au register nyingine ya debug) kwa anwani yantdll!NtOpenSectionna wekaDR7ili kila utekelezaji uleteSTATUS_SINGLE_STEP. Rudia baadaye kwaNtMapViewOfSectionna hiariNtClose. - Inua mzigo wa DLL kwa kutumia
LoadLibrary("amsi.dll").LdrLoadDllhatimaye itaweka simu yaNtOpenSectionkupata section handle halisi. - VEH hook kwa
NtOpenSection:
- Tafuta slot ya stack ya hoja ya
[out] PHANDLE SectionHandle. - Andika handle ya
DecoySectioniliyotengenezwa hapo awali ndani ya slot hiyo. - Endesha
RIP/EIPhadi kwa maagizo yaretili kernel isishiriki. - Re-arm hardware breakpoint kuona
NtMapViewOfSectionifuatayo.
- VEH hook kwa
NtMapViewOfSection:
- Kandika tena
[out] PVOID *BaseAddress(na outputs za size/protection) na anwani ya view mbaya iliyokuwepo tayari. - Ruka sehemu ya syscall kama kabla.
- (Hiari) VEH hook kwa
NtCloseinathibitisha kuwa fake section handle imetolewa, kuzuia resource leaks na kutoa ukaguzi wa mwisho wa busara.
Kwa kuwa syscalls hazitekelezeki, callback za kernel (ETWti, minifilter, nk.) haziona matukio ya NtOpenSection/NtMapViewOfSection yenye shaka, hivyo kupunguza telemetry kwa kiasi kikubwa. Kwa mtazamo wa loader kila kitu kilifanikiwa na amsi.dll iko katika memory, hivyo inaendelea na utatuzi wa imports/TLS dhidi ya bytes za mshambuliaji.
Maelezo ya utekelezaji ya PoC (2025)
PoC ya umma inaonyesha baadhi ya maelezo ya vitendo yanayoweza kupitwa wakati wa kutekeleza tena mbinu:
- HWBPs ni kwa kila thread. PoC inaweka
CONTEXT_DEBUG_REGISTERSkwenye thread ya sasa kabla ya kuitaLoadLibrary, hivyo VEH lazima iendeshwe kwenye thread ile ile inayochochea loader. - Emulation ya syscall: VEH inaweka
RAX = 0na kuendeshaRIPhadiretndani ya stub yantdll(inatafuta0xC3) ili kernel transition isitokee, kisha inaendelea kwaNtContinue. - Parameters za output: kwa
NtMapViewOfSection, VEH inaandika upyaBaseAddress,ViewSize, naWin32Protectzilizorejeshwa ili loader iaiamini mapping ilifanikiwa na kuendelea na imports/TLS ikitumia view ya mshambuliaji.
Minimal HWBP setup used by the PoC (x64):
CONTEXT ctx = {0};
ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS;
GetThreadContext(GetCurrentThread(), &ctx);
ctx.Dr0 = (DWORD64)NtOpenSection;
ctx.Dr7 = 1;
SetThreadContext(GetCurrentThread(), &ctx);
AddVectoredExceptionHandler(1, VehHandler);
Tofauti ya kujificha
Utafiti wa hivi karibuni juu ya VEH unaonyesha kwamba watunzaji wanaweza kusajiliwa kwa kuendesha kwa mkono orodha ya VEH badala ya kuita AddVectoredExceptionHandler, jambo linalopunguza utegemezi wa user-mode APIs ambazo zinaweza kufuatiliwa au ku-hook. Hii si lazima kwa Vectored Overloading lakini inaweza kuchanganywa nayo kupunguza shughuli za API zinazoonekana.
Hatua 3 – Tekeleza payload
- EXE payload: injector anaruka tu kwenye original entry point mara relocations zimekamilika. Wakati loader inadhani itaitisha
DllMain, badala yake code maalum hufanya entry ya mtindo wa EXE. - DLL payload / Node.js addon: Tengeneza na itumie export iliyokusudiwa (Kidkadi inaonyesha function yenye jina kwa JavaScript). Kwa kuwa module tayari imesajiliwa kwa
LdrpModuleBaseAddressIndex, uchunguzi unaofuata unaiona kama DLL isiyo hatari.
Wakati ikichanganywa na Node.js native addon (.node file), mzigo mzito wa Windows-internals unabaki nje ya tabaka la JavaScript, na hivyo kuwasaidia threat actor kusafirisha loader ile ile pamoja na wrappers nyingi za Node zilizo obfuscated.
References
- Check Point Research – GachiLoader: Defeating Node.js Malware with API Tracing
- VectoredOverloading – PoC implementation
- IBM X-Force – You just got vectored: Using VEH for defense evasion and process injection
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.


