hacktricks/reversing/common-api-used-in-malware.md
2023-06-03 13:10:46 +00:00

7 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Générique

Réseau

Sockets bruts Sockets WinAPI
socket() WSAStratup()
bind() bind()
listen() listen()
accept() accept()
connect() connect()
read()/recv() recv()
write() send()
shutdown() WSACleanup()

Persistance

Registre Fichier Service
RegCreateKeyEx() GetTempPath() OpenSCManager
RegOpenKeyEx() CopyFile() CreateService()
RegSetValueEx() CreateFile() StartServiceCtrlDispatcher()
RegDeleteKeyEx() WriteFile()
RegGetValue() ReadFile()

Cryptage

Nom
WinCrypt
CryptAcquireContext()
CryptGenKey()
CryptDeriveKey()
CryptDecrypt()
CryptReleaseContext()

Anti-Analyse/VM

Nom de la fonction Instructions d'assemblage
IsDebuggerPresent() CPUID()
GetSystemInfo() IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [Vérifier si un processus est en cours d'exécution]
CreateFileW/A [Vérifier si un fichier existe]

Furtivité

Nom
VirtualAlloc Allouer de la mémoire (packers)
VirtualProtect Modifier les autorisations de la mémoire (packer donnant l'autorisation d'exécution à une section)
ReadProcessMemory Injection dans des processus externes
WriteProcessMemoryA/W Injection dans des processus externes
NtWriteVirtualMemory
CreateRemoteThread Injection de DLL/processus...
NtUnmapViewOfSection
QueueUserAPC
CreateProcessInternalA/W

Exécution

Nom de la fonction
CreateProcessA/W
ShellExecute
WinExec
ResumeThread
NtResumeThread

Divers

  • GetAsyncKeyState() -- Enregistrement des touches
  • SetWindowsHookEx -- Enregistrement des touches
  • GetForeGroundWindow -- Obtenir le nom de la fenêtre en cours d'exécution (ou le site web d'un navigateur)
  • LoadLibrary() -- Importer une bibliothèque
  • GetProcAddress() -- Importer une bibliothèque
  • CreateToolhelp32Snapshot() -- Liste des processus en cours d'exécution
  • GetDC() -- Capture d'écran
  • BitBlt() -- Capture d'écran
  • InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Accès à Internet
  • FindResource(), LoadResource(), LockResource() -- Accéder aux ressources de l'exécutable

Techniques de malware

Injection de DLL

Exécuter une DLL arbitraire à l'intérieur d'un autre processus

  1. Localiser le processus pour injecter la DLL malveillante : CreateToolhelp32Snapshot, Process32First, Process32Next
  2. Ouvrir le processus : GetModuleHandle, GetProcAddress, OpenProcess
  3. Écrire le chemin de la DLL à l'intérieur du processus : VirtualAllocEx, WriteProcessMemory
  4. Créer un thread dans le processus qui chargera la DLL malveillante : CreateRemoteThread, LoadLibrary

Autres fonctions à utiliser : NTCreateThreadEx, RtlCreateUserThread

Injection de DLL réfléchie

Charger une DLL malveillante sans appeler les appels API Windows normaux.
La DLL est mappée à l'intérieur d'un processus, elle résoudra les adresses d'importation, corrigera les relocalisations et appellera la fonction DllMain.

Détournement de thread

Trouver un thread d'un processus et le faire charger une DLL malveillante

  1. Trouver un thread cible : CreateToolhelp32Snapshot, Thread32First, Thread32Next
  2. Ouvrir le thread : OpenThread
  3. Suspendre le thread : SuspendThread
  4. Écrire le chemin de la DLL malveillante à l'intérieur du processus victime : VirtualAllocEx, WriteProcessMemory
  5. Reprendre le thread en chargeant la bibliothèque : ResumeThread

Injection PE

Injection d'exécution portable : L'exécutable sera écrit dans la mémoire du processus victime et sera exécuté à partir de là.

Creusement de processus

Le malware va désallouer le code légitime de la mémoire du processus et charger un binaire malveillant

  1. Créer un nouveau processus : CreateProcess
  2. Désallouer la mémoire : ZwUnmapViewOfSection, N