Reverse engineering di Amadey Loader con x64dbg: risoluzione dinamica delle API, escalation dei privilegi del token, hook del keylogger, cattura degli appunti e abuso della riga di comando per la preparazione dello stealer.
Il campione di Amadey Loader è stato caricato in x64dbg. Al punto di ingresso, il loader esegue la risoluzione dinamica delle API tramite jmp thunk che puntano a GetProcAddressForCaller e VirtualAlloc. La vista del dump sottostante rivela le stringhe decifrate e i nomi delle API utilizzati dalle routine del keylogger e di persistenza del loader.
jmp qword ptr ds:[] – ricerca dinamica delle API, evita gli import statici. jmp qword ptr ds:[] – alloca memoria RWX per il payload/shellcode non impacchettato. SetWindowsHookExW / CallNextHookEx / UnhookWindowsHookEx – catena di hook del keylogger (WH_KEYBOARD_LL) GetForegroundWindow / GetWindowTextW / GetWindowThreadProcessId – cattura il titolo della finestra attiva a ogni pressione di tasto. GetKeyState / GetAsyncKeyState – polling dello stato grezzo dei tasti. GetUserObjectInformationW / wndProc /UnregisterClassW – gestione della classe di finestra per la finestra nascosta del keylogger. GetTickCount / timeGetTime / GetSystemTimeAsFileTime – routine di temporizzazione utilizzate per gli intervalli di beacon e il buffering delle pressioni di tasto.
Risoluzione dinamica delle API: GetProcAddressForCaller aggira l'analisi degli import statici, vanificando il rilevamento basato su firme. Conferma del keylogger: la catena SetWindowsHookExW + CallNextHookEx è il classico hook di tastiera di basso livello utilizzato per intercettare ogni pressione di tasto a livello di sistema. Registrazione consapevole del contesto: GetForegroundWindow + GetWindowTextW catturano il titolo della finestra attiva, fornendo contesto a ogni pressione di tasto (nomi utente, password, chat). Allocazione RWX: VirtualAlloc viene utilizzato per decomprimere ed eseguire in memoria il payload della fase successiva, senza lasciare artefatti su disco. Corrispondenza con il comportamento di Amadey: questo insieme di API è coerente con il noto comportamento di furto di credenziali e keylogging di Amadey.

Un esame più attento della stessa sessione x64dbg rivela che Amadey Loader risolve un secondo gruppo di API Windows incentrate sull'escalation dei privilegi, la manipolazione dei token e l'enumerazione dei processi. Il thunk VirtualAlloc in cima al disassemblato viene utilizzato per allocare memoria per la tabella delle API risolte, mentre la vista del dump sottostante espone l'intento del loader di elevare i privilegi fino all'accesso a livello SYSTEM prima di eseguire il proprio payload.
OpenProcessToken / DuplicateTokenEx / ImpersonateLoggedOnUser – duplicazione e impersonificazione dei token per l'escalation dei privilegi. LookupPrivilegeValueW / AdjustTokenPrivileges – abilita SeDebugPrivilege e altri privilegi sensibili. GetTokenInformation / SetTokenInformation – legge e modifica il token del processo corrente. OpenProcess / Process32FirstW / Process32NextW – enumerazione dei processi per individuare obiettivi di alto valore (ad es. lsass.exe, processi AV). CreateFileW / CreateToolhelp32Snapshot / Module32FirstW – utilizzati per operazioni su file ed enumerazione dei moduli. RegCreateKeyExW / RegSetValueExW / Persistenza: RegCreateKeyExW + RegSetValueExW sotto le chiavi Run consentono ad Amadey di avviarsi automaticamente dopo il riavvio. GetProcAddress / LoadLibraryW / GetModuleHandleW – risoluzione dinamica delle API. CreateProcessW / ShellExecuteExW / WinExec – avvia i payload delle fasi successive. IsDebuggerPresent / CheckRemoteDebuggerPresent – controlli anti-debugging.
Token Impersonation: DuplicateTokenEx + ImpersonateLoggedOnUser consentono ad Amadey di essere eseguito con privilegi più elevati (spesso SYSTEM), garantendo il pieno controllo del sistema. Abuso di SeDebugPrivilege: LookupPrivilegeValueW + AdjustTokenPrivileges abilitano SeDebugPrivilege, necessario per l'iniezione in processi protetti come lsass.exe. Targeting dei processi: Process32FirstW / Process32NextW vengono utilizzati per enumerare e selezionare obiettivi di alto valore (AV, browser, archivi di credenziali). Anti-Debugging: IsDebuggerPresent + CheckRemoteDebuggerPresent rilevano attivamente gli ambienti di analisi e terminano o alterano il comportamento. Esecuzione a catena: CreateProcessW / ShellExecuteExW confermano il ruolo di Amadey come loader — rilascia ed esegue il payload della fase successiva (ad es. Lumma Stealer, Vidar o ransomware).

Una terza vista della stessa sessione x64dbg mostra l'Amadey Loader che risolve API per I/O su file, gestione dei timer e gestione di input/tastiera. Insieme alle stringhe del dump, ciò indica un payload che si comporta come un ibrido keylogger/stealer — cattura l'input, scrive log e pulisce i timer per ridurre la propria impronta.
jmp qword ptr ds:[] – scrive su disco i dati catturati / il payload rilasciato. jmp qword ptr ds:[] – scrittura asincrona su file (usata per il flushing furtivo dei log). jmp qword ptr ds:[] – operazione di scrittura sparsa (usata per rilasci di payload frammentati). jmp qword ptr ds:[] – rimuove le code dei timer per cancellare le tracce basate sul timing. SetSystemTime / SetLocalTime – potenziale manipolazione dei timestamp. SetWindowsHookEx / CallNextHookEx / UnhookWindowsHookEx – catena di hook della tastiera. GetForegroundWindow / GetWindowTextW / GetClassNameW – cattura il contesto della finestra attiva. GetSystemInfo / EnumWindows / EnumChildWindows – enumerazione dell'ambiente.
Conferma del keylogger (rafforzata): la combinazione di SetWindowsHookEx, CallNextHookEx, ToUnicodeEx e GetForegroundWindow è un'implementazione da manuale di un keylogger che registra sia le sequenze di tasti sia la finestra in cui sono state digitate. Comportamento da stealer: WriteFile + WriteFileEx + WriteFileGather indicano che i dati catturati (sequenze di tasti, credenziali) vengono scritti su disco in blocchi frammentati e asincroni per evitare il rilevamento. Pulizia anti-forense: DeleteTimerQueue e SetSystemTime aiutano il loader a cancellare i propri artefatti temporali e potenzialmente a modificare i timestamp dei file. Input sintetico: SendInput + RegisterHotKey suggeriscono che il payload può anche iniettare sequenze di tasti — utile per la persistenza o per attivare azioni da remoto. Pattern del payload Amadey: questo insieme di API conferma che il loader si sta preparando a distribuire un payload keylogger/stealer (comunemente Vidar, Lumma o simili).
