Common API used in Malware
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie 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 [Überprüfen, ob ein Prozess läuft] | |
CreateFileW/A [Überprüfen, ob eine Datei existiert] |
Name | |
---|---|
VirtualAlloc | Speicher zuweisen (Packers) |
VirtualProtect | Ändern der Speicherberechtigung (Packer gibt Ausführungsberechtigung für einen Abschnitt) |
ReadProcessMemory | In externe Prozesse injizieren |
WriteProcessMemoryA/W | In externe Prozesse injizieren |
NtWriteVirtualMemory | |
CreateRemoteThread | DLL/Prozessinjektion... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
Function Name |
---|
CreateProcessA/W |
ShellExecute |
WinExec |
ResumeThread |
NtResumeThread |
GetAsyncKeyState() -- Tastaturprotokollierung
SetWindowsHookEx -- Tastaturprotokollierung
GetForeGroundWindow -- Den Namen des aktiven Fensters abrufen (oder die Website aus einem Browser)
LoadLibrary() -- Bibliothek importieren
GetProcAddress() -- Bibliothek importieren
CreateToolhelp32Snapshot() -- Laufende Prozesse auflisten
GetDC() -- Screenshot
BitBlt() -- Screenshot
InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Zugriff auf das Internet
FindResource(), LoadResource(), LockResource() -- Zugriff auf Ressourcen der ausführbaren Datei
Führen Sie eine beliebige DLL in einem anderen Prozess aus
Finden Sie den Prozess, in den die bösartige DLL injiziert werden soll: CreateToolhelp32Snapshot, Process32First, Process32Next
Öffnen Sie den Prozess: GetModuleHandle, GetProcAddress, OpenProcess
Schreiben Sie den Pfad zur DLL in den Prozess: VirtualAllocEx, WriteProcessMemory
Erstellen Sie einen Thread im Prozess, der die bösartige DLL lädt: CreateRemoteThread, LoadLibrary
Weitere Funktionen zur Verwendung: NTCreateThreadEx, RtlCreateUserThread
Laden Sie eine bösartige DLL, ohne normale Windows-API-Aufrufe zu tätigen. Die DLL wird innerhalb eines Prozesses abgebildet, sie wird die Importadressen auflösen, die Relokationen beheben und die DllMain-Funktion aufrufen.
Finden Sie einen Thread aus einem Prozess und lassen Sie ihn eine bösartige DLL laden
Finden Sie einen Ziel-Thread: CreateToolhelp32Snapshot, Thread32First, Thread32Next
Öffnen Sie den Thread: OpenThread
Pausieren Sie den Thread: SuspendThread
Schreiben Sie den Pfad zur bösartigen DLL in den Opferprozess: VirtualAllocEx, WriteProcessMemory
Setzen Sie den Thread fort, der die Bibliothek lädt: ResumeThread
Portable Execution Injection: Die ausführbare Datei wird im Speicher des Opferprozesses geschrieben und von dort ausgeführt.
Die Malware wird den legitimen Code aus dem Speicher des Prozesses entfernen und eine bösartige Binärdatei laden
Erstellen Sie einen neuen Prozess: CreateProcess
Entfernen Sie die Abbildung des Speichers: ZwUnmapViewOfSection, NtUnmapViewOfSection
Schreiben Sie die bösartige Binärdatei in den Prozessspeicher: VirtualAllocEc, WriteProcessMemory
Setzen Sie den Einstiegspunkt und führen Sie ihn aus: SetThreadContext, ResumeThread
Die SSDT (System Service Descriptor Table) verweist auf Kernel-Funktionen (ntoskrnl.exe) oder GUI-Treiber (win32k.sys), damit Benutzerprozesse diese Funktionen aufrufen können.
Ein Rootkit kann diese Zeiger auf Adressen ändern, die es kontrolliert.
IRP (I/O Request Packets) übertragen Datenstücke von einer Komponente zur anderen. Fast alles im Kernel verwendet IRPs, und jedes Geräteobjekt hat seine eigene Funktionstabelle, die gehookt werden kann: DKOM (Direct Kernel Object Manipulation)
Die IAT (Import Address Table) ist nützlich, um Abhängigkeiten aufzulösen. Es ist möglich, diese Tabelle zu hooken, um den Code zu übernehmen, der aufgerufen wird.
EAT (Export Address Table) Hooks. Diese Hooks können aus userland durchgeführt werden. Das Ziel ist es, exportierte Funktionen von DLLs zu hooken.
Inline Hooks: Diese Art ist schwierig zu erreichen. Dies beinhaltet die Modifikation des Codes der Funktionen selbst. Vielleicht durch das Setzen eines Sprungs am Anfang davon.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)