Common API used in Malware

HackTricks'i Destekleyin

Genel

Ham SoketlerWinAPI Soketleri

socket()

WSAStratup()

bind()

bind()

listen()

listen()

accept()

accept()

connect()

connect()

read()/recv()

recv()

write()

send()

shutdown()

WSACleanup()

Süreklilik

KayıtDosyaServis

RegCreateKeyEx()

GetTempPath()

OpenSCManager

RegOpenKeyEx()

CopyFile()

CreateService()

RegSetValueEx()

CreateFile()

StartServiceCtrlDispatcher()

RegDeleteKeyEx()

WriteFile()

RegGetValue()

ReadFile()

Şifreleme

İsim

WinCrypt

CryptAcquireContext()

CryptGenKey()

CryptDeriveKey()

CryptDecrypt()

CryptReleaseContext()

Analiz/VM'ye Karşı

Fonksiyon AdıAssembly Talimatları

IsDebuggerPresent()

CPUID()

GetSystemInfo()

IN()

GlobalMemoryStatusEx()

GetVersion()

CreateToolhelp32Snapshot [Bir sürecin çalışıp çalışmadığını kontrol et]

CreateFileW/A [Bir dosyanın var olup olmadığını kontrol et]

Gizlilik

İsim

VirtualAlloc

Bellek ayırma (paketleyiciler)

VirtualProtect

Bellek izni değiştirme (paketleyici bir bölüme yürütme izni verme)

ReadProcessMemory

Dış süreçlere enjekte etme

WriteProcessMemoryA/W

Dış süreçlere enjekte etme

NtWriteVirtualMemory

CreateRemoteThread

DLL/Süreç enjekte etme...

NtUnmapViewOfSection

QueueUserAPC

CreateProcessInternalA/W

Yürütme

Fonksiyon Adı

CreateProcessA/W

ShellExecute

WinExec

ResumeThread

NtResumeThread

Çeşitli

  • GetAsyncKeyState() -- Tuş kaydı

  • SetWindowsHookEx -- Tuş kaydı

  • GetForeGroundWindow -- Çalışan pencere adını al (veya bir tarayıcıdan web sitesini)

  • LoadLibrary() -- Kütüphane içe aktarma

  • GetProcAddress() -- Kütüphane içe aktarma

  • CreateToolhelp32Snapshot() -- Çalışan süreçleri listele

  • GetDC() -- Ekran görüntüsü

  • BitBlt() -- Ekran görüntüsü

  • InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- İnternete erişim

  • FindResource(), LoadResource(), LockResource() -- Yürütülebilir dosyanın kaynaklarına erişim

Malware Teknikleri

DLL Enjeksiyonu

Başka bir süreç içinde rastgele bir DLL yürütün

  1. Kötü amaçlı DLL'yi enjekte etmek için süreci bulun: CreateToolhelp32Snapshot, Process32First, Process32Next

  2. Süreci açın: GetModuleHandle, GetProcAddress, OpenProcess

  3. Süreç içinde DLL'nin yolunu yazın: VirtualAllocEx, WriteProcessMemory

  4. Kötü amaçlı DLL'yi yükleyecek bir iş parçacığı oluşturun: CreateRemoteThread, LoadLibrary

Kullanılacak diğer fonksiyonlar: NTCreateThreadEx, RtlCreateUserThread

Yansıtıcı DLL Enjeksiyonu

Normal Windows API çağrılarını yapmadan kötü amaçlı bir DLL yükleyin. DLL, bir süreç içinde haritalanır, ithalat adreslerini çözer, yeniden konumlandırmaları düzeltir ve DllMain fonksiyonunu çağırır.

İş Parçacığı Ele Geçirme

Bir süreçten bir iş parçacığı bulun ve onu kötü amaçlı bir DLL yüklemesi yapın

  1. Hedef iş parçacığını bulun: CreateToolhelp32Snapshot, Thread32First, Thread32Next

  2. İş parçacığını açın: OpenThread

  3. İş parçacığını askıya alın: SuspendThread

  4. Kurban sürecinin içine kötü amaçlı DLL'nin yolunu yazın: VirtualAllocEx, WriteProcessMemory

  5. Kütüphaneyi yükleyen iş parçacığını devam ettirin: ResumeThread

PE Enjeksiyonu

Taşınabilir Yürütme Enjeksiyonu: Yürütülebilir dosya, kurban sürecinin belleğine yazılacak ve oradan yürütülecektir.

Süreç Boşaltma

Kötü amaçlı yazılım, sürecin belleğinden meşru kodu kaldıracak ve kötü amaçlı bir ikili dosya yükleyecektir.

  1. Yeni bir süreç oluşturun: CreateProcess

  2. Belleği boşaltın: ZwUnmapViewOfSection, NtUnmapViewOfSection

  3. Süreç belleğine kötü amaçlı ikili dosyayı yazın: VirtualAllocEc, WriteProcessMemory

  4. Giriş noktasını ayarlayın ve yürütün: SetThreadContext, ResumeThread

Hooking

  • SSDT (Sistem Servis Tanımlayıcı Tablosu), kullanıcı süreçlerinin bu fonksiyonları çağırabilmesi için çekirdek fonksiyonlarına (ntoskrnl.exe) veya GUI sürücüsüne (win32k.sys) işaret eder.

  • Bir rootkit, bu işaretçileri kontrol ettiği adreslere değiştirebilir.

  • IRP (G/Ç İstek Paketleri), bir bileşenden diğerine veri parçaları iletir. Çekirdek içinde hemen hemen her şey IRP'leri kullanır ve her cihaz nesnesinin kendi işlev tablosu vardır ve bu tabloya hook yapılabilir: DKOM (Doğrudan Çekirdek Nesne Manipülasyonu)

  • IAT (İthalat Adres Tablosu), bağımlılıkları çözmek için yararlıdır. Bu tabloyu hooklamak, çağrılacak kodu ele geçirmek için mümkündür.

  • EAT (İhracat Adres Tablosu) Hook'ları. Bu hook'lar kullanıcı alanından yapılabilir. Amaç, DLL'ler tarafından ihraç edilen fonksiyonları hooklamaktır.

  • Inline Hook'lar: Bu türler elde edilmesi zor. Bu, fonksiyonların kendisinin kodunu değiştirmeyi içerir. Belki de bunun başına bir atlama koyarak.

HackTricks'i Destekleyin

Last updated