Rétro-ingénierie d'Amadey Loader avec x64dbg : résolution dynamique des API, élévation des privilèges de jeton, hooks de keylogger, capture du presse-papiers et abus de la ligne de commande pour la préparation du stealer.
L'échantillon Amadey Loader a été chargé dans x64dbg. Au point d'entrée, le loader effectue une résolution dynamique d'API via des thunks jmp pointant vers GetProcAddressForCaller et VirtualAlloc. La vue de dump ci-dessous révèle les chaînes déchiffrées et les noms d'API utilisés par les routines de keylogger et de persistance du loader.
jmp qword ptr ds:[] – recherche dynamique d'API, évite les imports statiques. jmp qword ptr ds:[] – alloue de la mémoire RWX pour la charge utile / le shellcode décompressé. SetWindowsHookExW / CallNextHookEx / UnhookWindowsHookEx – chaîne de hooks du keylogger (WH_KEYBOARD_LL) GetForegroundWindow / GetWindowTextW / GetWindowThreadProcessId – capture le titre de la fenêtre active à chaque frappe. GetKeyState / GetAsyncKeyState – interrogation brute de l'état des touches. GetUserObjectInformationW / wndProc /UnregisterClassW – gestion de la classe de fenêtre pour la fenêtre cachée du keylogger. GetTickCount / timeGetTime / GetSystemTimeAsFileTime – routines de temporisation utilisées pour les intervalles de balise et la mise en mémoire tampon des frappes.
Résolution dynamique d'API : GetProcAddressForCaller contourne l'analyse des imports statiques, déjouant la détection basée sur les signatures. Confirmation du keylogger : La chaîne SetWindowsHookExW + CallNextHookEx est le hook clavier de bas niveau classique utilisé pour intercepter chaque frappe à l'échelle du système. Journalisation contextuelle : GetForegroundWindow + GetWindowTextW capturent le titre de la fenêtre active, donnant un contexte à chaque frappe (noms d'utilisateur, mots de passe, discussions). Allocation RWX : VirtualAlloc est utilisé pour décompresser et exécuter la charge utile de l'étape suivante en mémoire, ne laissant aucun artefact sur le disque. Correspondance avec le comportement d'Amadey : Cet ensemble d'API est cohérent avec le comportement connu d'Amadey en matière de vol d'identifiants et de keylogging.

Un examen plus attentif de la même session x64dbg révèle que l'Amadey Loader résout un second lot d'API Windows axées sur l'élévation de privilèges, la manipulation de jetons et l'énumération de processus. Le thunk VirtualAlloc en haut du désassemblage est utilisé pour allouer de la mémoire à la table d'API résolue, tandis que la vue de dump ci-dessous expose l'intention du loader de s'élever vers un accès de niveau SYSTEM avant d'exécuter sa charge utile.
OpenProcessToken / DuplicateTokenEx / ImpersonateLoggedOnUser – duplication de jetons et emprunt d'identité pour l'élévation de privilèges. LookupPrivilegeValueW / AdjustTokenPrivileges – active SeDebugPrivilege et d'autres privilèges sensibles. GetTokenInformation / SetTokenInformation – lit et modifie le jeton du processus courant. OpenProcess / Process32FirstW / Process32NextW – énumération de processus pour localiser des cibles de grande valeur (par ex., lsass.exe, processus d'antivirus). CreateFileW / CreateToolhelp32Snapshot / Module32FirstW – utilisés pour les opérations sur fichiers et l'énumération de modules. RegCreateKeyExW / RegSetValueExW / Persistance : RegCreateKeyExW + RegSetValueExW sous les clés Run permettent à Amadey de démarrer automatiquement après un redémarrage. GetProcAddress / LoadLibraryW / GetModuleHandleW – résolution dynamique d'API. CreateProcessW / ShellExecuteExW / WinExec – lance les charges utiles de l'étape suivante. IsDebuggerPresent / CheckRemoteDebuggerPresent – vérifications anti-débogage.
Usurpation de jeton : DuplicateTokenEx + ImpersonateLoggedOnUser permettent à Amadey de s'exécuter avec des privilèges plus élevés (souvent SYSTEM), offrant un contrôle total sur le système. Abus de SeDebugPrivilege : LookupPrivilegeValueW + AdjustTokenPrivileges activent SeDebugPrivilege, requis pour injecter dans des processus protégés comme lsass.exe. Ciblage de processus : Process32FirstW / Process32NextW sont utilisés pour énumérer et sélectionner des cibles à forte valeur (AV, navigateurs, stockages d'identifiants). Anti-débogage : IsDebuggerPresent + CheckRemoteDebuggerPresent détectent activement les environnements d'analyse et terminent ou modifient le comportement. Exécution en chaîne : CreateProcessW / ShellExecuteExW confirment le rôle d'Amadey en tant que loader — il dépose et exécute la charge utile de l'étape suivante (par exemple, Lumma Stealer, Vidar ou un ransomware).

Une troisième vue de la même session x64dbg montre l'Amadey Loader résolvant des API pour les E/S de fichiers, la gestion des timers et la gestion des entrées/clavier. Combinée aux chaînes du dump, cela indique une charge utile qui se comporte comme un hybride keylogger/stealer — capturant les entrées, écrivant des journaux et nettoyant les timers pour réduire son empreinte.
jmp qword ptr ds:[] – écrit les données capturées / la charge utile déposée sur le disque. jmp qword ptr ds:[] – écriture de fichier asynchrone (utilisée pour vider les journaux de manière furtive). jmp qword ptr ds:[] – opération d'écriture dispersée (utilisée pour les dépôts de charges utiles fragmentés). jmp qword ptr ds:[] – supprime les files d'attente de timers pour effacer les traces basées sur le timing. SetSystemTime / SetLocalTime – manipulation potentielle des horodatages. SetWindowsHookEx / CallNextHookEx / UnhookWindowsHookEx – chaîne de hooks clavier. GetForegroundWindow / GetWindowTextW / GetClassNameW – capture le contexte de la fenêtre active. GetSystemInfo / EnumWindows / EnumChildWindows – énumération de l'environnement.
Confirmation du keylogger (renforcée) : La combinaison de SetWindowsHookEx, CallNextHookEx, ToUnicodeEx et GetForegroundWindow est une implémentation de keylogger typique qui enregistre à la fois les frappes clavier et la fenêtre dans laquelle elles ont été saisies. Comportement de stealer : WriteFile + WriteFileEx + WriteFileGather indiquent que les données capturées (frappes clavier, identifiants) sont écrites sur le disque en fragments asynchrones pour éviter la détection. Nettoyage anti-forensique : DeleteTimerQueue et SetSystemTime aident le loader à effacer ses propres artefacts de timing et à modifier potentiellement les horodatages des fichiers. Entrée synthétique : SendInput + RegisterHotKey suggèrent que la charge utile peut également injecter des frappes clavier — utile pour la persistance ou le déclenchement d'actions à distance. Schéma de charge utile Amadey : Cet ensemble d'API confirme que le loader se prépare à déployer une charge utile de type keylogger/stealer (couramment Vidar, Lumma ou similaire).