# Uobičajeni API korišćeni u malveru {{#include ../banners/hacktricks-training.md}} ## Generički ### Mrežno | Raw Sockets | WinAPI Sockets | | ------------- | -------------- | | socket() | WSAStratup() | | bind() | bind() | | listen() | listen() | | accept() | accept() | | connect() | connect() | | read()/recv() | recv() | | write() | send() | | shutdown() | WSACleanup() | ### Postojanost | Registry | File | Service | | ---------------- | ------------- | ---------------------------- | | RegCreateKeyEx() | GetTempPath() | OpenSCManager | | RegOpenKeyEx() | CopyFile() | CreateService() | | RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() | | RegDeleteKeyEx() | WriteFile() | | | RegGetValue() | ReadFile() | | ### Enkripcija | Name | | --------------------- | | WinCrypt | | CryptAcquireContext() | | CryptGenKey() | | CryptDeriveKey() | | CryptDecrypt() | | CryptReleaseContext() | ### Anti-analiza/VM | Function Name | Assembly Instructions | | --------------------------------------------------------- | --------------------- | | IsDebuggerPresent() | CPUID() | | GetSystemInfo() | IN() | | GlobalMemoryStatusEx() | | | GetVersion() | | | CreateToolhelp32Snapshot \[Check if a process is running] | | | CreateFileW/A \[Check if a file exist] | | ### Nevidljivost | Name | | | ------------------------ | -------------------------------------------------------------------------- | | VirtualAlloc | Alokacija memorije (paketari) | | VirtualProtect | Promena dozvole memorije (paketari daju dozvolu za izvršavanje sekciji) | | ReadProcessMemory | Injekcija u spoljne procese | | WriteProcessMemoryA/W | Injekcija u spoljne procese | | NtWriteVirtualMemory | | | CreateRemoteThread | DLL/injekcija procesa... | | NtUnmapViewOfSection | | | QueueUserAPC | | | CreateProcessInternalA/W | | ### Izvršenje | Function Name | | ---------------- | | CreateProcessA/W | | ShellExecute | | WinExec | | ResumeThread | | NtResumeThread | ### Razno - 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 ## Tehnike malvera ### DLL Injekcija 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 Druge funkcije za korišćenje: NTCreateThreadEx, RtlCreateUserThread ### Reflektivna DLL Injekcija 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. ### Otimanje niti 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 Injekcija Injekcija prenosivog izvršenja: Izvršni fajl će biti napisan u memoriju procesa žrtve i biće izvršen odatle. ### Hollowing procesa Malver ć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**) upućuje na kernel funkcije (ntoskrnl.exe) ili GUI drajver (win32k.sys) kako bi korisnički procesi mogli pozivati ove 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 otela 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 Hook-ovi**: Ova vrsta je teška za postizanje. Ovo uključuje modifikaciju koda samih funkcija. Možda stavljanjem skoka na početak ovih. {{#include ../banners/hacktricks-training.md}}