Common API used in Malware

Support HackTricks

Try Hard Security Group


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

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

Execution

Function Name

CreateProcessA/W

ShellExecute

WinExec

ResumeThread

NtResumeThread

Miscellaneous

  • GetAsyncKeyState() -- Rejestrowanie klawiszy

  • SetWindowsHookEx -- Rejestrowanie klawiszy

  • GetForeGroundWindow -- Uzyskanie nazwy działającego okna (lub strony internetowej z przeglądarki)

  • LoadLibrary() -- Import biblioteki

  • GetProcAddress() -- Import 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

Malware Techniques

DLL Injection

Wykonaj dowolny DLL w innym procesie

  1. Zlokalizuj proces, do którego wstrzykniesz złośliwy DLL: CreateToolhelp32Snapshot, Process32First, Process32Next

  2. Otwórz proces: GetModuleHandle, GetProcAddress, OpenProcess

  3. Zapisz ścieżkę do DLL wewnątrz procesu: VirtualAllocEx, WriteProcessMemory

  4. Utwórz wątek w procesie, który załaduje złośliwy DLL: CreateRemoteThread, LoadLibrary

Inne funkcje do użycia: NTCreateThreadEx, RtlCreateUserThread

Reflective DLL Injection

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.

Thread Hijacking

Znajdź wątek z procesu i spraw, aby załadował złośliwy DLL

  1. Znajdź docelowy wątek: CreateToolhelp32Snapshot, Thread32First, Thread32Next

  2. Otwórz wątek: OpenThread

  3. Wstrzymaj wątek: SuspendThread

  4. Zapisz ścieżkę do złośliwego DLL wewnątrz procesu ofiary: VirtualAllocEx, WriteProcessMemory

  5. Wznów wątek ładujący bibliotekę: ResumeThread

PE Injection

Wstrzykiwanie Portable Execution: Wykonywalny kod zostanie zapisany w pamięci procesu ofiary i będzie wykonywany stamtąd.

Process Hollowing

Złośliwe oprogramowanie usunie legalny kod z pamięci procesu i załaduje złośliwy plik binarny

  1. Utwórz nowy proces: CreateProcess

  2. Usuń mapę pamięci: ZwUnmapViewOfSection, NtUnmapViewOfSection

  3. Zapisz złośliwy plik binarny w pamięci procesu: VirtualAllocEc, WriteProcessMemory

  4. Ustaw punkt wejścia i wykonaj: SetThreadContext, ResumeThread

Hooking

  • 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.

Try Hard Security Group

Support HackTricks

Last updated