Common API used in Malware
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Raw Sockets | WinAPI Sockets |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
Registry | File | Service |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
Name |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
Function Name | Assembly Instructions |
---|---|
IsDebuggerPresent() | CPUID() |
GetSystemInfo() | IN() |
GlobalMemoryStatusEx() | |
GetVersion() | |
CreateToolhelp32Snapshot [Check if a process is running] | |
CreateFileW/A [Check if a file exist] |
Name | |
---|---|
VirtualAlloc | Alokacja pamięci (pakery) |
VirtualProtect | Zmiana uprawnień pamięci (pakery nadające uprawnienia do wykonania sekcji) |
ReadProcessMemory | Wstrzykiwanie do zewnętrznych procesów |
WriteProcessMemoryA/W | Wstrzykiwanie do zewnętrznych procesów |
NtWriteVirtualMemory | |
CreateRemoteThread | Wstrzykiwanie DLL/procesu... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
Function Name |
---|
CreateProcessA/W |
ShellExecute |
WinExec |
ResumeThread |
NtResumeThread |
GetAsyncKeyState() -- Rejestrowanie klawiszy
SetWindowsHookEx -- Rejestrowanie klawiszy
GetForeGroundWindow -- Uzyskanie nazwy działającego okna (lub strony internetowej z przeglądarki)
LoadLibrary() -- Importowanie biblioteki
GetProcAddress() -- Importowanie biblioteki
CreateToolhelp32Snapshot() -- Lista działających procesów
GetDC() -- Zrzut ekranu
BitBlt() -- Zrzut ekranu
InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Dostęp do Internetu
FindResource(), LoadResource(), LockResource() -- Dostęp do zasobów wykonywalnych
Wykonaj dowolny DLL w innym procesie
Zlokalizuj proces, do którego wstrzykniesz złośliwy DLL: CreateToolhelp32Snapshot, Process32First, Process32Next
Otwórz proces: GetModuleHandle, GetProcAddress, OpenProcess
Zapisz ścieżkę do DLL wewnątrz procesu: VirtualAllocEx, WriteProcessMemory
Utwórz wątek w procesie, który załaduje złośliwy DLL: CreateRemoteThread, LoadLibrary
Inne funkcje do użycia: NTCreateThreadEx, RtlCreateUserThread
Załaduj złośliwy DLL bez wywoływania normalnych wywołań API Windows. DLL jest mapowany wewnątrz procesu, rozwiązuje adresy importu, naprawia relokacje i wywołuje funkcję DllMain.
Znajdź wątek z procesu i spraw, aby załadował złośliwy DLL
Znajdź docelowy wątek: CreateToolhelp32Snapshot, Thread32First, Thread32Next
Otwórz wątek: OpenThread
Wstrzymaj wątek: SuspendThread
Zapisz ścieżkę do złośliwego DLL wewnątrz procesu ofiary: VirtualAllocEx, WriteProcessMemory
Wznów wątek ładujący bibliotekę: ResumeThread
Wstrzykiwanie Portable Execution: Wykonywalny kod zostanie zapisany w pamięci procesu ofiary i będzie wykonywany stamtąd.
Złośliwe oprogramowanie usunie legalny kod z pamięci procesu i załaduje złośliwy binarny
Utwórz nowy proces: CreateProcess
Usuń mapę pamięci: ZwUnmapViewOfSection, NtUnmapViewOfSection
Zapisz złośliwy binarny w pamięci procesu: VirtualAllocEc, WriteProcessMemory
Ustaw punkt wejścia i wykonaj: SetThreadContext, ResumeThread
SSDT (System Service Descriptor Table) wskazuje na funkcje jądra (ntoskrnl.exe) lub sterownik GUI (win32k.sys), aby procesy użytkownika mogły wywoływać te funkcje.
Rootkit może modyfikować te wskaźniki do adresów, które kontroluje
IRP (I/O Request Packets) przesyłają fragmenty danych z jednego komponentu do drugiego. Prawie wszystko w jądrze używa IRP, a każdy obiekt urządzenia ma swoją własną tabelę funkcji, która może być podłączona: DKOM (Direct Kernel Object Manipulation)
IAT (Import Address Table) jest przydatna do rozwiązywania zależności. Możliwe jest podłączenie tej tabeli, aby przejąć kod, który będzie wywoływany.
EAT (Export Address Table) Hooki. Te hooki mogą być realizowane z userland. Celem jest podłączenie funkcji eksportowanych przez DLL.
Inline Hooks: Ten typ jest trudny do osiągnięcia. To wiąże się z modyfikowaniem kodu samych funkcji. Może poprzez umieszczenie skoku na początku tego.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)