Algemene API’s wat in Malware gebruik word
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.
Generies
Netwerk
| Raw Sockets | WinAPI Sockets |
|---|---|
| socket() | WSAStratup() |
| bind() | bind() |
| listen() | listen() |
| accept() | accept() |
| connect() | connect() |
| read()/recv() | recv() |
| write() | send() |
| shutdown() | WSACleanup() |
TLS pinning and chunked transport
Baie loaders verpak hul TCP-stroom in SslStream en pin die bediener se leaf sertifikaat teen ’n ingebedde kopie (certificate pinning). Bot inligting/take word gekompresseer (bv. GZip). Wanneer antwoorde ’n drempel oorskry (~1 MB), word data in klein stukkies gefragmenteer (bv. 16 KB segmente) om grootte-gebaseerde heuristieke te omseil en geheuepieke tydens deserialisering te verminder.
Persistensie
| Registry | File | Service |
|---|---|---|
| RegCreateKeyEx() | GetTempPath() | OpenSCManager |
| RegOpenKeyEx() | CopyFile() | CreateService() |
| RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
| RegDeleteKeyEx() | WriteFile() | |
| RegGetValue() | ReadFile() |
Enkripsie
| Name |
|---|
| WinCrypt |
| CryptAcquireContext() |
| CryptGenKey() |
| CryptDeriveKey() |
| CryptDecrypt() |
| CryptReleaseContext() |
Anti-analise/VM
| Function Name | Assembly Instructions |
|---|---|
| IsDebuggerPresent() | CPUID() |
| GetSystemInfo() | IN() |
| GlobalMemoryStatusEx() | |
| GetVersion() | |
| CreateToolhelp32Snapshot [Check if a process is running] | |
| CreateFileW/A [Check if a file exist] |
Locale/keyboard-gebaseerde uitvoeringswag
Baie stealers/loaders maak onklaar by sekere locales om navorsers te ontduik en aan dreig-aktor beperkings te voldoen. Tipiese kontroles:
GetKeyboardLayoutom geïnstalleerde layouts te enumereer (per-thread/user)GetLocaleInfoA/Wom land/streek-kodes op te losGetSystemDefaultLangID/GetUserDefaultLangID
As enigeen ooreenstem met ’n geblokkeerde lys (gewoonlik CIS-lande), sluit die loader dadelik voordat netwerk IOCs of injeksie plaasvind.
Verdediging/jag
- Merk prosesse wat veelvuldige locale/sleutelbord-API’s vroeg in uitvoering bevraagteken en dan klaarmaak sonder waarneembare aktiwiteit.
- Korreleer met anti-VM kontroles (BIOS-stringe, PnP-toestelle, skyfmodel, dienste) hergebruik uit open-source projekte (bv. VMDetector) om gated uitvoering vas te vang.
Emulator API fingerprinting & slaap-ontduiking
Malware vingerdruk dikwels sandbox emulators deur na Defender se virtualised exports te soek (gesien in die Malware Protection Emulator). As enige van hierdie simbole teenwoordig is (case-insensitive skandering van die proses), word uitvoering vertraag vir 10–30 minute en weer nagegaan om ontledingstyd te verspil.
Voorbeelde van API-name wat as kanaries gebruik word:
MpVmp32Entry,MpVmp32FastEnter,MpCallPreEntryPointCode,MpCallPostEntryPointCode,MpFinalize,MpReportEvent*,MpSwitchToNextThread*VFS_*familie:VFS_Open,VFS_Read,VFS_MapViewOfFile,VFS_UnmapViewOfFile,VFS_FindFirstFile/FindNextFile,VFS_CopyFile,VFS_DeleteFile,VFS_MoveFileThrdMgr_*:ThrdMgr_GetCurrentThreadHandle,ThrdMgr_SaveTEB,ThrdMgr_SwitchThreads
Typical delay primitive (user-land):
cmd /c timeout /t %RANDOM_IN_[600,1800]% > nul
Argument-toegangsbeheer
- Operateurs vereis soms dat ’n onskynend onskadelike CLI-skakelaar teenwoordig is voordat die payload uitgevoer word (bv.
/i:--type=rendererom Chromium-child-processes na te boots). As die skakelaar afwesig is, sluit die laaier onmiddellik, wat naïewe sandbox-uitvoering belemmer.
Stealth
| Naam | |
|---|---|
| VirtualAlloc | Allokeer geheue (packers) |
| VirtualProtect | Verander geheue-toestemming (packer wat ’n afdeling uitvoeringspermit gee) |
| ReadProcessMemory | Inspuiting in eksterne prosesse |
| WriteProcessMemoryA/W | Inspuiting in eksterne prosesse |
| NtWriteVirtualMemory | |
| CreateRemoteThread | DLL/Process injection… |
| NtUnmapViewOfSection | |
| QueueUserAPC | |
| CreateProcessInternalA/W |
Uitvoering
| Function Name |
|---|
| CreateProcessA/W |
| ShellExecute |
| WinExec |
| ResumeThread |
| NtResumeThread |
Divers
- GetAsyncKeyState() – Key logging
- SetWindowsHookEx – Key logging
- GetForeGroundWindow – Kry die naam van die lopende venster (of die webwerf vanaf ’n browser)
- LoadLibrary() – Laai biblioteek
- GetProcAddress() – Laai biblioteek
- CreateToolhelp32Snapshot() – Lys lopende prosesse
- GetDC() – Skermskoot
- BitBlt() – Skermskoot
- InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() – Toegang tot die Internet
- FindResource(), LoadResource(), LockResource() – Toegang tot hulpbronne van die uitvoerbare lêer
Malware-tegnieke
DLL Injection
Execute an arbitrary DLL inside another process
- Vind die proses om die kwaadwillige DLL in te spuit: CreateToolhelp32Snapshot, Process32First, Process32Next
- Open die proses: GetModuleHandle, GetProcAddress, OpenProcess
- Skryf die pad na die DLL in die proses: VirtualAllocEx, WriteProcessMemory
- Skep ’n thread in die proses wat die kwaadwillige DLL sal laai: CreateRemoteThread, LoadLibrary
Other functions to use: NTCreateThreadEx, RtlCreateUserThread
Reflective DLL Injection
Load a malicious DLL without calling normal Windows API calls.
Die DLL word binne ’n proses gemap, dit sal die importadresse oplos, die relocations regmaak en die DllMain-funksie aanroep.
Thread Hijacking
Find a thread from a process and make it load a malicious DLL
- Vind ’n teikendraad: CreateToolhelp32Snapshot, Thread32First, Thread32Next
- Open die draad: OpenThread
- Skort die draad op: SuspendThread
- Skryf die pad na die kwaadwillige DLL in die slagofferproses: VirtualAllocEx, WriteProcessMemory
- Hervat die draad wat die biblioteek laai: ResumeThread
PE Injection
Portable Execution Injection: Die uitvoerbare lêer sal in die geheue van die slagofferproses geskryf word en daarvandaan uitgevoer word.
Process Hollowing (a.k.a RunPE)
Process Hollowing is one of the favourite defence-evasion / execution tricks used by Windows malware. Die idee is om ’n legitieme proses in die suspended toestand te loods, sy oorspronklike image uit die geheue te verwyder (hollow) en ’n arbitrary PE in sy plek te kopieer. Wanneer die primêre draad uiteindelik hervat word, voer die kwaadwillige entry-point uit onder die verskyning van ’n vertroude binêre (dikwels deur Microsoft geteken).
Tipiese werkvloeisel:
- Skep ’n onskadelike gasheer (bv.
RegAsm.exe,rundll32.exe,msbuild.exe) suspended sodat geen instruksies nog loop nie.
STARTUPINFOA si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcessA("C:\\Windows\\Microsoft.NET\\Framework32\\v4.0.30319\\RegAsm.exe",
NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
- Lees die kwaadwillige payload in geheue en parse die PE-headers om
SizeOfImage, sections en die nuweEntryPointte verkry. - NtUnmapViewOfSection / ZwUnmapViewOfSection – ontkoppel die oorspronklike image-basis van die geskortte proses.
- VirtualAllocEx – reserveer RWX-geheue van
SizeOfImagebinne die remote proses. - WriteProcessMemory – kopieer eers die
Headers, daarna loop oor die sections en kopieer hul raw data. - SetThreadContext – patch die waarde van
EAX/RAX(RCXon x64) ofRipin die kontekststruktuur sodatEIPna die payload seEntryPointwys. - ResumeThread – die draad gaan voort en voer die deur die aanvaller voorsiene kode uit.
Minimale proof-of-concept (x86) raamwerk:
void RunPE(LPCSTR host, LPVOID payload, DWORD payloadSize){
// 1. create suspended process
STARTUPINFOA si = {sizeof(si)}; PROCESS_INFORMATION pi;
CreateProcessA(host, NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi);
// 2. read remote PEB to get ImageBaseAddress
CONTEXT ctx; ctx.ContextFlags = CONTEXT_FULL;
GetThreadContext(pi.hThread,&ctx);
PVOID baseAddr;
ReadProcessMemory(pi.hProcess,(PVOID)(ctx.Ebx+8),&baseAddr,4,NULL);
// 3. unmap original image & allocate new region at same base
NtUnmapViewOfSection(pi.hProcess,baseAddr);
PVOID newBase = VirtualAllocEx(pi.hProcess,baseAddr,pHdr->OptionalHeader.SizeOfImage,
MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
// 4-5. copy headers & sections …
// 6. write new image base into PEB and set Eip
WriteProcessMemory(pi.hProcess,(PVOID)(ctx.Ebx+8),&baseAddr,4,NULL);
ctx.Eax = (DWORD)(newBase) + pHdr->OptionalHeader.AddressOfEntryPoint;
SetThreadContext(pi.hThread,&ctx);
// 7. run!
ResumeThread(pi.hThread);
}
Praktiese opmerkings waargeneem in die DarkCloud Stealer veldtog:
- Die loader het
RegAsm.exe(deel van die .NET Framework) as gasheer gekies – ’n gesigneerde binary wat onwaarskynlik aandag sal trek. - Die gedekodeerde VB6 stealer (
holographies.exe) word nie op skyf afgegooi nie; dit bestaan net binne die hollowed proses, wat statiese opsporing moeiliker maak. - Sensitiewe stringe (regexes, paths, Telegram credentials) is RC4-encrypted per-string en word slegs tydens runtime gedekodeer, wat geheueskandering verder bemoeilik.
Opsporingsidees:
- Waarsku vir
CREATE_SUSPENDEDprosesse wat nooit GUI/console-vensters skep voordat ’n geheuegebied as RWX toegeken word nie (skaars vir bénigne kode). - Soek na ’n aanroepvolgorde
NtUnmapViewOfSection ➜ VirtualAllocEx ➜ WriteProcessMemoryoor verskillende prosesse. - Ongereelde gebruik van vertroude developer utilities as hollowing hosts, veral
MSBuild.exe,RegAsm.exe,rundll32.exe, geparent deur kortlewende loaders. - Jaag vir
msbuild.exewat van user-writable paths gespawn is of sonder ooreenstemmende.sln/.projkonteks en dan uitgaande verbindings maak (ATT&CK T1127.001 + T1055.012).
Common host processes and path resolution
MSBuild.exeword gereeld gekies as ’n hollowing host om by developer tooling in te meng. Loaders soek dikwels argitektuur-geskikte plekke:C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exeC:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exeC:\Windows\System32\MSBuild.exeC:\Windows\SysWOW64\MSBuild.exe- Kies die host wat ooreenstem met die huidige payload/OS-argitektuur voordat
CreateProcess(..., CREATE_SUSPENDED, ...)aangeroep word.
Hooking
- Die SSDT (System Service Descriptor Table) wys na kernel-funksies (ntoskrnl.exe) of GUI-driver (win32k.sys) sodat gebruikersprosesse hierdie funksies kan aanroep.
- ’n rootkit kan hierdie wysigers verander na adresse wat dit beheer.
- IRP (I/O Request Packets) dra datastukke van een komponent na ’n ander oor. Byna alles in die kernel gebruik IRPs en elke device object het sy eie functietabel wat ge-hook kan word: DKOM (Direct Kernel Object Manipulation)
- Die IAT (Import Address Table) is nuttig om afhanklikhede op te los. Dit is moontlik om hierdie tabel te hook om die kode wat aangeroep sal word te kap.
- EAT (Export Address Table) Hooks. Hierdie hooks kan vanaf userland gedoen word. Die doel is om ge-exporteerde funksies deur DLLs te hook.
- Inline Hooks: Hierdie tipe is moeilik om te bereik. Dit behels die wysiging van die funksies se eie kode. Byvoorbeeld deur ’n jump aan die begin daarvan te plaas.
Verwysings
- Unit42 – New Infection Chain and ConfuserEx-Based Obfuscation for DarkCloud Stealer
- Check Point Research – Under the Pure Curtain: From RAT to Builder to Coder
- Unit 42 – PhantomVAI Loader Delivers a Range of Infostealers
- MITRE ATT&CK – Trusted Developer Utilities Proxy Execution: MSBuild (T1127.001)
- VMDetector – virtualization checks (open-source)
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.
HackTricks

