Common API used in Malware
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Generico
Networking
| 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
Molti loader avvolgono il loro stream TCP in SslStream e pinzano il certificato leaf del server contro una copia embedded (certificate pinning). Le info/attività dei bot sono compresse (es. GZip). Quando le risposte superano una soglia (~1 MB), i dati vengono frammentati in piccoli chunk (es. segmenti da 16 KB) per evitare heuristics basate sulla dimensione e ridurre i picchi di memoria durante la deserializzazione.
Persistence
| Registro | File | Servizio |
|---|---|---|
| RegCreateKeyEx() | GetTempPath() | OpenSCManager |
| RegOpenKeyEx() | CopyFile() | CreateService() |
| RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
| RegDeleteKeyEx() | WriteFile() | |
| RegGetValue() | ReadFile() |
Encryption
| Nome |
|---|
| WinCrypt |
| CryptAcquireContext() |
| CryptGenKey() |
| CryptDeriveKey() |
| CryptDecrypt() |
| CryptReleaseContext() |
Anti-Analysis/VM
| Nome funzione | Istruzioni Assembly |
|---|---|
| IsDebuggerPresent() | CPUID() |
| GetSystemInfo() | IN() |
| GlobalMemoryStatusEx() | |
| GetVersion() | |
| CreateToolhelp32Snapshot [Check if a process is running] | |
| CreateFileW/A [Check if a file exist] |
Controlli basati su locale/tastiera per l’esecuzione
Molti stealers/loader abortiscono su certe localizzazioni per eludere i ricercatori e rispettare vincoli dell’actor di minaccia. Controlli tipici:
GetKeyboardLayoutper enumerare i layout installati (per thread/utente)GetLocaleInfoA/Wper risolvere codici paese/regioneGetSystemDefaultLangID/GetUserDefaultLangID
Se una corrispondenza appare in una lista bloccata (comunemente paesi CIS), il loader esce immediatamente prima che si vedano IOCs di rete o injection.
Difesa/hunting
- Segnalare i processi che interrogano multiple API di locale/tastiera nelle prime fasi di esecuzione e poi escono senza attività osservabile.
- Correlare con controlli anti-VM (stringhe BIOS, dispositivi PnP, modello disco, servizi) riutilizzati da progetti open-source (es. VMDetector) per intercettare esecuzioni gated.
Emulator API fingerprinting & sleep evasion
Il malware spesso fingerprinta gli emulatori sandbox cercando le esportazioni virtualizzate di Defender (osservate nel Malware Protection Emulator). Se uno di questi simboli è presente (scansione case-insensitive del processo), l’esecuzione viene ritardata di 10–30 minuti e ricontrollata per consumare tempo di analisi.
Esempi di nomi di API usati come canari:
MpVmp32Entry,MpVmp32FastEnter,MpCallPreEntryPointCode,MpCallPostEntryPointCode,MpFinalize,MpReportEvent*,MpSwitchToNextThread*- famiglia
VFS_*:VFS_Open,VFS_Read,VFS_MapViewOfFile,VFS_UnmapViewOfFile,VFS_FindFirstFile/FindNextFile,VFS_CopyFile,VFS_DeleteFile,VFS_MoveFile ThrdMgr_*:ThrdMgr_GetCurrentThreadHandle,ThrdMgr_SaveTEB,ThrdMgr_SwitchThreads
Primitiva tipica di delay (user-land):
cmd /c timeout /t %RANDOM_IN_[600,1800]% > nul
Controllo degli argomenti
- Gli operatori a volte richiedono che sia presente uno switch CLI dall’aspetto innocuo prima di eseguire il payload (es.,
/i:--type=rendererper imitare i processi figli di Chromium). Se lo switch è assente, il loader termina immediatamente, ostacolando l’esecuzione ingenua in sandbox.
Stealth
| Name | |
|---|---|
| VirtualAlloc | Alloca memoria (packers) |
| VirtualProtect | Cambia i permessi di memoria (packer che concede permesso di esecuzione a una sezione) |
| ReadProcessMemory | Iniezione in processi esterni |
| WriteProcessMemoryA/W | Iniezione in processi esterni |
| NtWriteVirtualMemory | |
| CreateRemoteThread | DLL/Process injection… |
| NtUnmapViewOfSection | |
| QueueUserAPC | |
| CreateProcessInternalA/W |
Execution
| Function Name |
|---|
| CreateProcessA/W |
| ShellExecute |
| WinExec |
| ResumeThread |
| NtResumeThread |
Miscellaneous
- GetAsyncKeyState() – Registrazione tasti
- SetWindowsHookEx – Registrazione tasti
- GetForeGroundWindow – Ottiene il nome della finestra attiva (o il sito web da un browser)
- LoadLibrary() – Carica una libreria
- GetProcAddress() – Recupera l’indirizzo di una funzione
- CreateToolhelp32Snapshot() – Elenca i processi in esecuzione
- GetDC() – Cattura schermata
- BitBlt() – Cattura schermata
- InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() – Accesso a Internet
- FindResource(), LoadResource(), LockResource() – Accesso alle risorse dell’eseguibile
Malware Techniques
DLL Injection
Execute an arbitrary DLL inside another process
- Individuare il processo in cui iniettare la DLL dannosa: CreateToolhelp32Snapshot, Process32First, Process32Next
- Aprire il processo: GetModuleHandle, GetProcAddress, OpenProcess
- Scrivere il percorso della DLL all’interno del processo: VirtualAllocEx, WriteProcessMemory
- Creare un thread nel processo che caricherà la DLL dannosa: CreateRemoteThread, LoadLibrary
Other functions to use: NTCreateThreadEx, RtlCreateUserThread
Reflective DLL Injection
Load a malicious DLL without calling normal Windows API calls.
The DLL is mapped inside a process, it will resolve the import addresses, fix the relocations and call the DllMain function.
Thread Hijacking
Find a thread from a process and make it load a malicious DLL
- Find a target thread: CreateToolhelp32Snapshot, Thread32First, Thread32Next
- Open the thread: OpenThread
- Suspend the thread: SuspendThread
- Write the path to the malicious DLL inside the victim process: VirtualAllocEx, WriteProcessMemory
- Resume the thread loading the library: ResumeThread
PE Injection
Portable Execution Injection: The executable will be written in the memory of the victim process and it will be executed from there.
Process Hollowing (a.k.a RunPE)
Process Hollowing è uno dei trucchi preferiti per evasione delle difese / esecuzione usati dal malware su Windows. L’idea è avviare un processo legittimo nello stato sospeso, rimuovere (hollow) la sua immagine originale dalla memoria e copiare al suo posto un arbitrary PE. Quando il thread principale viene infine ripreso, l’entry point maligno viene eseguito sotto le spoglie di un binario attendibile (spesso firmato da Microsoft).
Flusso tipico:
- Spawn a benign host (e.g.
RegAsm.exe,rundll32.exe,msbuild.exe) suspended so that no instructions run yet.
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);
- Read the malicious payload into memory and parse its PE headers to obtain
SizeOfImage, sections and the newEntryPoint. - NtUnmapViewOfSection / ZwUnmapViewOfSection – rimuovere la mappatura dell’immagine originale della base del processo sospeso.
- VirtualAllocEx – riservare memoria RWX di
SizeOfImageall’interno del processo remoto. - WriteProcessMemory – copiare prima gli
Headers, poi iterare sulle sezioni copiando i loro dati grezzi. - SetThreadContext – patchare il valore di
EAX/RAX(RCXon x64) oRipnella struttura di contesto in modo cheEIPpunti all’EntryPointdel payload. - ResumeThread – il thread continua, eseguendo il codice fornito dall’attaccante.
Minimal proof-of-concept (x86) skeleton:
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);
}
Note pratiche osservate nella campagna DarkCloud Stealer:
- Il loader ha scelto
RegAsm.exe(parte del .NET Framework) come host – un binario firmato poco probabile che attiri attenzione. - Lo stealer VB6 decriptato (
holographies.exe) non viene scritto su disco; esiste solo all’interno del processo hollowed, rendendo più difficile la rilevazione statica. - Le stringhe sensibili (regexes, paths, credenziali Telegram) sono RC4-encrypted per stringa e vengono decriptate solo a runtime, complicando ulteriormente la scansione della memoria.
Idee per il rilevamento:
- Segnalare i processi creati con
CREATE_SUSPENDEDche non creano mai finestre GUI/console prima che una regione di memoria venga allocata come RWX (raro per codice benigno). - Cercare la sequenza di chiamate
NtUnmapViewOfSection ➜ VirtualAllocEx ➜ WriteProcessMemorytra processi diversi. - Usi insoliti di utility di sviluppo fidate come host per hollowing, in particolare
MSBuild.exe,RegAsm.exe,rundll32.exe, con genitore rappresentato da loader di breve durata. - Cercare
msbuild.exelanciato da percorsi scrivibili dall’utente o senza il corrispondente contesto.sln/.projche poi effettua connessioni outbound (ATT&CK T1127.001 + T1055.012).
Common host processes and path resolution
MSBuild.exeviene frequentemente scelto come host per hollowing per mimetizzarsi con gli strumenti di sviluppo. I loader spesso cercano nelle posizioni appropriate per l’architettura: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- Selezionare l’host corrispondente all’architettura corrente del payload/OS prima di chiamare
CreateProcess(..., CREATE_SUSPENDED, ...).
Hooking
- The SSDT (System Service Descriptor Table) points to kernel functions (ntoskrnl.exe) or GUI driver (win32k.sys) so user processes can call these functions.
- Un rootkit può modificare questi puntatori verso indirizzi che controlla
- IRP (I/O Request Packets) trasmettono pezzi di dati da un componente all’altro. Quasi tutto nel kernel usa IRP e ogni device object ha la propria tabella di funzioni che può essere manipolata: DKOM (Direct Kernel Object Manipulation)
- The IAT (Import Address Table) is useful to resolve dependencies. It’s possible to hook this table in order to hijack the code that will be called.
- EAT (Export Address Table) Hooks. This hooks can be done from userland. The goal is to hook exported functions by DLLs.
- Inline Hooks: This type are difficult to achieve. This involve modifying the code of the functions itself. Maybe by putting a jump at the beginning of this.
References
- 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
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

