hacktricks/src/reversing/common-api-used-in-malware.md

140 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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}}