Common API used in Malware

Support HackTricks

Generic

Networking

Raw SocketsWinAPI Sockets

socket()

WSAStratup()

bind()

bind()

listen()

listen()

accept()

accept()

connect()

connect()

read()/recv()

recv()

write()

send()

shutdown()

WSACleanup()

Persistence

RegistryFileService

RegCreateKeyEx()

GetTempPath()

OpenSCManager

RegOpenKeyEx()

CopyFile()

CreateService()

RegSetValueEx()

CreateFile()

StartServiceCtrlDispatcher()

RegDeleteKeyEx()

WriteFile()

RegGetValue()

ReadFile()

Encryption

Name

WinCrypt

CryptAcquireContext()

CryptGenKey()

CryptDeriveKey()

CryptDecrypt()

CryptReleaseContext()

Anti-Analysis/VM

Function NameAssembly Instructions

IsDebuggerPresent()

CPUID()

GetSystemInfo()

IN()

GlobalMemoryStatusEx()

GetVersion()

CreateToolhelp32Snapshot [Check if a process is running]

CreateFileW/A [Check if a file exist]

Stealth

Name

VirtualAlloc

Alokacija memorije (paketari)

VirtualProtect

Promena dozvola memorije (paketari daju dozvolu za izvršavanje sekciji)

ReadProcessMemory

Injekcija u spoljne procese

WriteProcessMemoryA/W

Injekcija u spoljne procese

NtWriteVirtualMemory

CreateRemoteThread

Injekcija DLL/procesa...

NtUnmapViewOfSection

QueueUserAPC

CreateProcessInternalA/W

Execution

Function Name

CreateProcessA/W

ShellExecute

WinExec

ResumeThread

NtResumeThread

Miscellaneous

  • GetAsyncKeyState() -- Snimanje tastera

  • SetWindowsHookEx -- Snimanje tastera

  • GetForeGroundWindow -- Dobijanje imena aktivnog prozora (ili veb stranice iz pretraživača)

  • LoadLibrary() -- Uvoz biblioteke

  • GetProcAddress() -- Uvoz biblioteke

  • CreateToolhelp32Snapshot() -- Lista aktivnih procesa

  • GetDC() -- Slikanje ekrana

  • BitBlt() -- Slikanje ekrana

  • InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Pristup internetu

  • FindResource(), LoadResource(), LockResource() -- Pristup resursima izvršnog fajla

Malware Techniques

DLL Injection

Izvršavanje proizvoljnog DLL-a unutar drugog procesa

  1. Pronađite proces u koji ćete injektovati zloćudni DLL: CreateToolhelp32Snapshot, Process32First, Process32Next

  2. Otvorite proces: GetModuleHandle, GetProcAddress, OpenProcess

  3. Napišite putanju do DLL-a unutar procesa: VirtualAllocEx, WriteProcessMemory

  4. Kreirajte nit u procesu koja će učitati zloćudni DLL: CreateRemoteThread, LoadLibrary

Ostale funkcije za korišćenje: NTCreateThreadEx, RtlCreateUserThread

Reflective DLL Injection

Učitajte zloćudni DLL bez pozivanja normalnih Windows API poziva. DLL se mapira unutar procesa, rešava adrese uvoza, ispravlja relokacije i poziva DllMain funkciju.

Thread Hijacking

Pronađite nit iz procesa i naterajte je da učita zloćudni DLL

  1. Pronađite ciljnu nit: CreateToolhelp32Snapshot, Thread32First, Thread32Next

  2. Otvorite nit: OpenThread

  3. Suspendujte nit: SuspendThread

  4. Napišite putanju do zloćudnog DLL-a unutar procesa žrtve: VirtualAllocEx, WriteProcessMemory

  5. Nastavite nit koja učitava biblioteku: ResumeThread

PE Injection

Injekcija prenosivog izvršenja: Izvršni fajl će biti napisan u memoriju procesa žrtve i biće izvršen odatle.

Process Hollowing

Zloćudni softver će ukloniti legitimni kod iz memorije procesa i učitati zloćudni binarni fajl

  1. Kreirajte novi proces: CreateProcess

  2. Uklonite mapiranje memorije: ZwUnmapViewOfSection, NtUnmapViewOfSection

  3. Napišite zloćudni binarni fajl u memoriju procesa: VirtualAllocEc, WriteProcessMemory

  4. Postavite ulaznu tačku i izvršite: SetThreadContext, ResumeThread

Hooking

  • SSDT (Tabela deskriptora sistemskih usluga) pokazuje na kernel funkcije (ntoskrnl.exe) ili GUI drajver (win32k.sys) kako bi korisnički procesi mogli da pozivaju te funkcije.

  • Rootkit može modifikovati ove pokazivače na adrese koje kontroliše

  • IRP (Paketi zahteva za ulaz/izlaz) prenose delove podataka od jednog komponente do druge. Gotovo sve u kernelu koristi IRP-ove i svaki objekat uređaja ima svoju funkcijsku tabelu koja može biti "hook-ovana": DKOM (Direktna manipulacija kernel objektima)

  • IAT (Tabela adresa uvoza) je korisna za rešavanje zavisnosti. Moguće je "hook-ovati" ovu tabelu kako bi se preuzela kontrola nad kodom koji će biti pozvan.

  • EAT (Tabela adresa izvoza) Hook-ovi. Ovi hook-ovi mogu biti napravljeni iz userland. Cilj je "hook-ovati" izvođene funkcije od strane DLL-ova.

  • Inline Hooks: Ova vrsta je teška za postizanje. Ovo uključuje modifikaciju koda samih funkcija. Možda stavljanjem skoka na početak ovih.

Support HackTricks

Last updated