mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
140 lines
6.8 KiB
Markdown
140 lines
6.8 KiB
Markdown
# Malware'da Kullanılan Yaygın API'ler
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
## 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 | Hizmet |
|
||
| --------------- | -------------- | ---------------------------- |
|
||
| 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 sitesi)
|
||
- 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ütme
|
||
|
||
1. Kötü amaçlı DLL'yi enjekte etmek için süreci bul: CreateToolhelp32Snapshot, Process32First, Process32Next
|
||
2. Süreci aç: GetModuleHandle, GetProcAddress, OpenProcess
|
||
3. Süreç içinde DLL'nin yolunu yaz: VirtualAllocEx, WriteProcessMemory
|
||
4. Kötü amaçlı DLL'yi yükleyecek bir iş parçacığı oluştur: 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ükleme.\
|
||
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ığı bul ve onu kötü amaçlı bir DLL yüklemesi yapacak şekilde ayarla
|
||
|
||
1. Hedef iş parçacığını bul: CreateToolhelp32Snapshot, Thread32First, Thread32Next
|
||
2. İş parçacığını aç: OpenThread
|
||
3. İş parçacığını askıya al: SuspendThread
|
||
4. Kurban sürecinin içinde kötü amaçlı DLL'nin yolunu yaz: VirtualAllocEx, WriteProcessMemory
|
||
5. Kütüphaneyi yükleyen iş parçacığını devam ettir: 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ştur: CreateProcess
|
||
2. Belleği boşalt: ZwUnmapViewOfSection, NtUnmapViewOfSection
|
||
3. Süreç belleğine kötü amaçlı ikili dosyayı yaz: VirtualAllocEc, WriteProcessMemory
|
||
4. Giriş noktasını ayarla ve yürüt: SetThreadContext, ResumeThread
|
||
|
||
## Hooking
|
||
|
||
- **SSDT** (**Sistem Servis Tanım 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; 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.
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|