8 KiB
Malware'da Kullanılan Yaygın API'ler
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live'i takip edin.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Genel
Ağ
Ham Soketler | WinAPI Soketleri |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
Süreklilik
Kayıt | Dosya | Servis |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
Şifreleme
İsim |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
Analiz/VM Karşıtı
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
Kötü Amaçlı Yazılım Teknikleri
DLL Enjeksiyonu
Başka bir süreç içinde rastgele bir DLL yürütün
- Kötü amaçlı DLL'yi enjekte etmek için süreci bulun: CreateToolhelp32Snapshot, Process32First, Process32Next
- Süreci açın: GetModuleHandle, GetProcAddress, OpenProcess
- Süreç içinde DLL'nin yolunu yazın: VirtualAllocEx, WriteProcessMemory
- 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
- Hedef iş parçacığını bulun: CreateToolhelp32Snapshot, Thread32First, Thread32Next
- İş parçacığını açın: OpenThread
- İş parçacığını askıya alın: SuspendThread
- Kötü amaçlı DLL'nin yolunu kurban sürecinin içine yazın: VirtualAllocEx, WriteProcessMemory
- 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 dosyayı yükleyecektir.
- Yeni bir süreç oluşturun: CreateProcess
- Belleği boşaltın: ZwUnmapViewOfSection, NtUnmapViewOfSection
- Kötü amaçlı ikili dosyayı süreç belleğine yazın: VirtualAllocEc, WriteProcessMemory
- 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çindeki hemen hemen her şey IRP'leri kullanır ve her cihaz nesnesinin kendi işlev tablosu vardır ve bu tablonun hook'lanması mümkündür: DKOM (Doğrudan Çekirdek Nesne Manipülasyonu)
- IAT (İthalat Adres Tablosu), bağımlılıkları çözmek için yararlıdır. Bu tabloyu hook'layarak çağrılacak kodu ele geçirmek 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ı hook'lamaktı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.