exploit paylaşım grubumuz: t.me/HTTPwnn

Malware saldırı yöntemleri nasıl yapılır?

  • Konu başlatıcı Konu başlatıcı sh3d0w
  • Başlangıç Tarihi Başlangıç Tarihi

sh3d0w

WarNight Member
Katılım
25 Haz 2026
Mesaj
65
Reaksiyon
39
Puan
18
xentr_thread_starter

1. Process ghosting​


Process Ghosting, silinmek üzere olan (delete-pending) bir dosyadan Section oluşturup, bu section'ı kullanarak yeni bir process başlatmayı hedefler. Dosya diskten silinir ama bellekten çalışmaya devam eder. EDR'ler diskte dosya olmadığı için şaşırır kalır.

Bu Kod Gerçekte Ne Yapıyor? (Felaket)
Bu dosya, adında "Ghost" geçmesine rağmen, kesinlikle Process Ghosting yapmıyor.

  • create_image_section_from_file ile section oluşturuyor ama bu section'ı hiçbir yerde kullanmıyor.
  • run_ghosted_process fonksiyonu, section'ı çöpe atıp doğrudan klasik VirtualAllocEx + WriteProcessMemory + CreateRemoteThread yapıyor.
  • Yani bu dosya, sıradan bir "Basic Injector" dan ibaret. Ghosting'in en önemli adımı olan NtCreateProcessEx ile section'dan process oluşturma kısmı tamamen eksik.
Ne Yapmalısın?
Bu dosyayı çöpe at. Eğer gerçek Ghosting istiyorsan, NtCreateProcessEx kullanman ve SECTION_IMAGE parametreleriyle oynaman gerekir. Buradaki kod seni yanıltır. Kullanma.


2. hypnosis​


Meşru bir process'i (örneğin svchost.exe) SUSPENDED olarak başlatır, hafızasındaki orijinal PE'yi söker (NtUnmapViewOfSection), yerine kendi shellcode'unu yazar, thread'in başlangıç adresini (Rip) kendi koduna çevirir ve devam ettirir. Artık meşru process'in kılığında senin kodun çalışır.

Kod Analizi (Gerçekten İyi Yazılmış):

  1. Gizli Başlatma: CREATE_SUSPENDED | CREATE_NO_WINDOW ile hedef process'i sessizce başlatır. Kimse görmez.
  2. PEB Okuyup Base Adresini Bulur:

    rust
    NtQueryInformationProcess(..., ProcessBasicInformation, ...);
    ReadProcessMemory(..., &(*peb_addr).ImageBaseAddress, ...);
    Burada uzaktaki process'in PEB'ine girip ImageBaseAddress'i (yüklendiği adres) çalıyor.
  3. Orijinal PE'yi Söker:

    rust
    NtUnmapViewOfSection(hProcess, image_base);
    Bu komut, hedef process'in kendi EXE'sini bellekten tamamen atar. Process artık bomboş bir kabuktur.
  4. Yerine Shellcode Yazar:
    VirtualAllocEx ile PAGE_EXECUTE_READWRITE izninde aynı adrese (image_base) yeni shellcode'u yazar.
  5. Context'i Değiştirip Çalıştırır:

    rust
    ctx.Rip = remote_base as u64; // Giriş noktası senin kodun
    SetThreadContext(...);
    ResumeThread(...);
    Artık meşru process'in içinde senin kodun çalışıyor.
Sonuç: Bu dosya yazılım olarak hatasız ve çalışır durumda. NtUnmapViewOfSection hata verse bile (ki bazen verir), println! ile uyarı basıp devam ediyor. Tavsiye: Bunu kullan.


3. Process Hollowing​


Hedef process'i DEBUG_ONLY_THIS_PROCESS modunda başlatır. Debugger modunda olmak, EDR'lerin bazı hook'larını atlatmanı sağlar (çünkü debugger, process'in içine girer). Kod, hedef process bir EXCEPTION_BREAKPOINT (kesme noktası) fırlattığında devreye girip shellcode'u enjekte eder.

Kod Analizi (Zarif Ama Riskli):

  1. Debug Modunda Başlatma:

    rust
    CreateProcessW(..., DEBUG_ONLY_THIS_PROCESS, ...);
  2. Olay Yakalama:
    WaitForDebugEvent ile bekler. Eğer EXCEPTION_BREAKPOINT (kod 1) gelirse, bu genellikle Windows'un debugger başlangıcında gönderdiği ilk sinyaldir.
  3. Enjeksiyon:
    Breakpoint yakalandığında, standart VirtualAllocEx ve WriteProcessMemory ile shellcode'u yazar ve CreateRemoteThread ile çalıştırır.
  4. Detach:
    Enjeksiyon bittikten sonra DebugActiveProcessStop ile debugger'dan ayrılır.
Uyarılar / Riskler:

  • Zaman Aşımı Çok Kısa: loop_counter > 20 demişsin. 20 * 100ms = 2 saniye. Eğer hedef process 2 saniye içinde breakpoint fırlatmazsa (ki bazen Windows update'leri veya antivirüs bunu geciktirir), enjeksiyon başarısız olur. Bunu 500 veya 1000 döngüye çıkarmanı öneririm.
  • SymInitialize ve NtCreateThreadEx Kullanılmamış: Gereksiz import'lar var. Temizlik yapabilirsin.
  • Kullanım Amacı: Bu yöntem, basit AV'leri atlatmak için iyidir ama gelişmiş EDR'ler debugger aktivitesini de izler. Yine de iş görür.

4.process.rs​

Bu dosya, çalışan bir process'in PID'sini alır, hafızasına shellcode enjekte eder ve çalıştırır.


Adım Adım İşleyiş​

1. Hedef Process'i Aç

rust
OpenProcess(PROCESS_ALL_ACCESS, FALSE, target_pid)
  • target_pid ile belirtilen process'e tüm yetkilerle erişim açılır.
  • Başarısızsa hata döner.
2. Uzaktan Bellek Ayır

rust
VirtualAllocEx(h_process, null_mut(), shellcode.len(), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE)
  • Hedef process'in hafızasında shellcode boyutunda bir alan ayrılır.
  • Başlangıçta sadece okunabilir/yazılabilir (çalıştırılamaz) olarak ayarlanır.
  • Eğer başarısızsa, process handle'ı kapatılır ve hata döner.
3. Shellcode'u Yaz

rust
WriteProcessMemory(h_process, remote_addr, shellcode.as_ptr(), shellcode.len(), &mut bytes_written)
  • Ayrılan bölgeye shellcode baytları kopyalanır.
  • Yazılan bayt sayısı kontrol edilir; eksik yazıldıysa bellek serbest bırakılıp hata döner.
4. Bellek Korumasını Değiştir

rust
VirtualProtectEx(h_process, remote_addr, shellcode.len(), PAGE_EXECUTE_READWRITE, &mut old_protect)
  • Bellek bölgesinin koruması çalıştırılabilir, okunabilir ve yazılabilir olarak güncellenir.
  • Böylece CPU buradaki kodları çalıştırabilir hale gelir.
  • Başarısız olursa temizlik yapılır.
5. Uzaktan Thread Oluştur (NtCreateThreadEx)

rust
NtCreateThreadEx(&mut h_thread, THREAD_ALL_ACCESS, null_mut(), h_process,
Some(transmute(remote_addr)), null_mut(), 0, 0, 0, 0, null_mut())
  • CreateRemoteThread yerine NtCreateThreadEx kullanılır. Bu native API, EDR/AV hook'larından kaçmak için daha iyidir.
  • Thread'in başlangıç adresi, shellcode'un bulunduğu remote_addr olarak ayarlanır.
  • Thread hemen çalışmaya başlar (CREATE_SUSPENDED kullanılmaz).
  • Başarısız olursa bellek serbest bırakılır.
 

Ekli Dosyalar

Son düzenleme:
Geri
En Üst