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 | Alloc memory (packers) |
VirtualProtect | Change memory permission (packer giving execution permission to a section) |
ReadProcessMemory | Injection into external processes |
WriteProcessMemoryA/W | Injection into external processes |
NtWriteVirtualMemory | |
CreateRemoteThread | DLL/Process injection... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
Function Name |
---|
CreateProcessA/W |
ShellExecute |
WinExec |
ResumeThread |
NtResumeThread |
GetAsyncKeyState() -- Key logging
SetWindowsHookEx -- Key logging
GetForeGroundWindow -- Get running window name (or the website from a browser)
LoadLibrary() -- Import library
GetProcAddress() -- Import library
CreateToolhelp32Snapshot() -- List running processes
GetDC() -- Screenshot
BitBlt() -- Screenshot
InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Access the Internet
FindResource(), LoadResource(), LockResource() -- Access resources of the executable
Eseguire un DLL arbitrario all'interno di un altro processo
Individuare il processo in cui iniettare il DLL malevolo: CreateToolhelp32Snapshot, Process32First, Process32Next
Aprire il processo: GetModuleHandle, GetProcAddress, OpenProcess
Scrivere il percorso del DLL all'interno del processo: VirtualAllocEx, WriteProcessMemory
Creare un thread nel processo che caricherà il DLL malevolo: CreateRemoteThread, LoadLibrary
Altre funzioni da utilizzare: NTCreateThreadEx, RtlCreateUserThread
Caricare un DLL malevolo senza chiamare le normali chiamate API di Windows. Il DLL è mappato all'interno di un processo, risolverà gli indirizzi di importazione, correggerà le rilocazioni e chiamerà la funzione DllMain.
Trovare un thread da un processo e farlo caricare un DLL malevolo
Trovare un thread target: CreateToolhelp32Snapshot, Thread32First, Thread32Next
Aprire il thread: OpenThread
Sospendere il thread: SuspendThread
Scrivere il percorso del DLL malevolo all'interno del processo vittima: VirtualAllocEx, WriteProcessMemory
Riprendere il thread caricando la libreria: ResumeThread
Iniezione di Esecuzione Portatile: L'eseguibile sarà scritto nella memoria del processo vittima e verrà eseguito da lì.
Il malware rimuoverà il codice legittimo dalla memoria del processo e caricherà un binario malevolo
Creare un nuovo processo: CreateProcess
Rimuovere la mappatura della memoria: ZwUnmapViewOfSection, NtUnmapViewOfSection
Scrivere il binario malevolo nella memoria del processo: VirtualAllocEc, WriteProcessMemory
Impostare il punto di ingresso ed eseguire: SetThreadContext, ResumeThread
La SSDT (System Service Descriptor Table) punta a funzioni del kernel (ntoskrnl.exe) o driver GUI (win32k.sys) in modo che i processi utente possano chiamare queste funzioni.
Un rootkit può modificare questi puntatori a indirizzi che controlla
IRP (I/O Request Packets) trasmettono pezzi di dati da un componente a un altro. Quasi tutto nel kernel utilizza IRP e ogni oggetto dispositivo ha la propria tabella di funzioni che può essere hookata: DKOM (Direct Kernel Object Manipulation)
La IAT (Import Address Table) è utile per risolvere le dipendenze. È possibile hookare questa tabella per dirottare il codice che verrà chiamato.
EAT (Export Address Table) Hooks. Questi hook possono essere effettuati da userland. L'obiettivo è hookare le funzioni esportate dai DLL.
Inline Hooks: Questo tipo è difficile da realizzare. Questo comporta la modifica del codice delle funzioni stesse. Forse mettendo un salto all'inizio di questo.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)