Common API used in Malware
Try Hard Security Group
Ogólne
Sieciowe
Surowe Gniazdka | WinAPI Gniazdka |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
Trwałość
Rejestr | Plik | Usługa |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
Szyfrowanie
Nazwa |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
Anty-Analiza/VM
Nazwa Funkcji | Instrukcje Assembly |
---|---|
IsDebuggerPresent() | CPUID() |
GetSystemInfo() | IN() |
GlobalMemoryStatusEx() | |
GetVersion() | |
CreateToolhelp32Snapshot [Sprawdź, czy proces jest uruchomiony] | |
CreateFileW/A [Sprawdź, czy plik istnieje] |
Ukrywanie
Nazwa | |
---|---|
VirtualAlloc | Alokuje pamięć (pakowacze) |
VirtualProtect | Zmienia uprawnienia pamięci (pakowacz nadaje uprawnienia do wykonania sekcji) |
ReadProcessMemory | Wstrzyknięcie do zewnętrznych procesów |
WriteProcessMemoryA/W | Wstrzyknięcie do zewnętrznych procesów |
NtWriteVirtualMemory | |
CreateRemoteThread | Wstrzyknięcie DLL/procesu... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
Wykonanie
Nazwa Funkcji |
---|
CreateProcessA/W |
ShellExecute |
WinExec |
ResumeThread |
NtResumeThread |
Różne
GetAsyncKeyState() -- Rejestracja klawiszy
SetWindowsHookEx -- Rejestracja klawiszy
GetForeGroundWindow -- Pobierz nazwę uruchomionego okna (lub witrynę z przeglądarki)
LoadLibrary() -- Importuj bibliotekę
GetProcAddress() -- Importuj bibliotekę
CreateToolhelp32Snapshot() -- Lista uruchomionych 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
Techniki Malware
Wstrzykiwanie DLL
Wykonaj dowolną DLL w innym procesie
Zlokalizuj proces do wstrzyknięcia złośliwej 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śliwą DLL: CreateRemoteThread, LoadLibrary
Inne funkcje do użycia: NTCreateThreadEx, RtlCreateUserThread
Wstrzykiwanie Refleksyjne DLL
Załaduj złośliwą DLL bez wywoływania normalnych wywołań API systemu Windows. DLL jest mapowana wewnątrz procesu, rozwiąże adresy importu, naprawi relokacje i wywoła funkcję DllMain.
Przechwytywanie Wątków
Znajdź wątek w procesie i spraw, aby załadował złośliwą DLL
Znajdź docelowy wątek: CreateToolhelp32Snapshot, Thread32First, Thread32Next
Otwórz wątek: OpenThread
Wstrzymaj wątek: SuspendThread
Zapisz ścieżkę do złośliwej DLL wewnątrz procesu ofiary: VirtualAllocEx, WriteProcessMemory
Wznów wątek ładowania biblioteki: ResumeThread
Wstrzykiwanie PE
Wstrzyknięcie Wykonywalne: Wykonywalny plik zostanie zapisany w pamięci procesu ofiary i zostanie wykonany stamtąd.
Wstrzykiwanie Procesów
Złośliwe oprogramowanie odmapuje legalny kod z pamięci procesu i załaduje złośliwy plik binarny
Utwórz nowy proces: CreateProcess
Odmapuj pamięć: ZwUnmapViewOfSection, NtUnmapViewOfSection
Zapisz złośliwy plik binarny w pamięci procesu: VirtualAllocEc, WriteProcessMemory
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), dzięki czemu procesy użytkownika mogą wywoływać te funkcje.
Rootkit może zmodyfikować te wskaźniki na adresy, 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 własną tabelę funkcji, którą można przechwycić: DKOM (Bezpośrednie Modyfikacje Obiektów Jądra)
IAT (Import Address Table) jest przydatna do rozwiązywania zależności. Można przechwycić tę tabelę, aby przejąć kod, który zostanie wywołany.
EAT (Export Address Table) Hooks. Te haki można wykonać z userland. Celem jest przechwycenie funkcji eksportowanych przez biblioteki DLL.
Inline Hooks: Ten typ jest trudny do osiągnięcia. Polega to na modyfikowaniu kodu funkcji. Być może poprzez umieszczenie skoku na początku tego.
Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do HackTricks i HackTricks Cloud na githubie.
Last updated