- Katılım
- 10 Ocak 2026
- Mesajlar
- 704
- Beğeniler
- 199
(Not: Bu devlog dökümantasyonu, geliştirme sürecindeki karmaşık teknik notlarımın derlenip düzenlenmesi amacıyla yapay zeka (AI) asistanı kullanılarak formatlanmıştır. İçerikteki tüm mimari kararlar, kodlamalar ve donanım testleri şahsıma aittir.)
Selamlar CheatGlobal üyeleri,
Forumda spesifik olarak 'C' programlama kategorisi bulunmadığı için bu konuyu C++ bölümüne açıyorum; ancak geliştirmekte olduğum bu proje tamamen saf C ve Assembly dilleri kullanılarak, donanım spesifikasyonları seviyesinde (low-level) yazılmaktadır.
Güncelleme ve Takip Prosedürü:Geliştirme süreci boyunca konuyu şu şekilde güncelleyeceğim: Büyük çaplı mimari değişiklikleri ve versiyon atlamalarını doğrudan bu ana metni düzenleyerek ekleyeceğim. Küçük çaplı düzeltmeleri (hotfix), l0g çıktılarını veya anlık debug notlarını ise konu altına yorum olarak bırakacağım. Bu yorumlar kesinlikle forumda "mesaj kasma" (post farming) amacı taşımamakta olup, tamamen projenin kronolojik devlog takibini sağlamak içindir.
Proje Durumu ve Tahmini Bitiş:Şu an itibarıyla proje %85 - %90 oranında tamamlanmış durumdadır. Hypervisor geliştirmedeki en zorlu aşama olan "İşletim sistemi boot sürecine sızma ve BSOD (Mavi Ekran) engellerini aşma" kısmı başarıyla geçilmiştir. Kalan %10'luk kısım payload optimizasyonu ve stabilite testleridir. Projenin tahmini bitiş ve stabil Release Candidate (RC) sürümüne ulaşma süresi 2 ila 3 hafta arasıdır.
Selamlar CheatGlobal üyeleri,
Forumda spesifik olarak 'C' programlama kategorisi bulunmadığı için bu konuyu C++ bölümüne açıyorum; ancak geliştirmekte olduğum bu proje tamamen saf C ve Assembly dilleri kullanılarak, donanım spesifikasyonları seviyesinde (low-level) yazılmaktadır.
Güncelleme ve Takip Prosedürü:Geliştirme süreci boyunca konuyu şu şekilde güncelleyeceğim: Büyük çaplı mimari değişiklikleri ve versiyon atlamalarını doğrudan bu ana metni düzenleyerek ekleyeceğim. Küçük çaplı düzeltmeleri (hotfix), l0g çıktılarını veya anlık debug notlarını ise konu altına yorum olarak bırakacağım. Bu yorumlar kesinlikle forumda "mesaj kasma" (post farming) amacı taşımamakta olup, tamamen projenin kronolojik devlog takibini sağlamak içindir.
Proje Durumu ve Tahmini Bitiş:Şu an itibarıyla proje %85 - %90 oranında tamamlanmış durumdadır. Hypervisor geliştirmedeki en zorlu aşama olan "İşletim sistemi boot sürecine sızma ve BSOD (Mavi Ekran) engellerini aşma" kısmı başarıyla geçilmiştir. Kalan %10'luk kısım payload optimizasyonu ve stabilite testleridir. Projenin tahmini bitiş ve stabil Release Candidate (RC) sürümüne ulaşma süresi 2 ila 3 hafta arasıdır.
Giriş (Proje Altyapısı)
Geliştirmekte olduğum 'Shadow Project', AMD SVM (Secure Virtual Machine) tabanlı bir Bare-Metal Hypervisor mimarisidir. Projenin tüm yükleme, test ve debug süreçleri doğrudan EFI Shell üzerinden yürütülmektedir. İşletim sistemi yüklenmeden önce sistem kontrolünü Ring -1 (Guest Mode) seviyesinde devralmayı hedefleyen bu altyapı, standart Windows API'lerinden bağımsız, tamamen low-level ve firmware tabanlı bir execution modeline sahiptir.Versiyon Geçmişi (v1'den v10.51'e)
v1 - v10 (Stealth, Bellek Sanallaştırma & Core Hazırlıkları)Bu aşamada hipervizörün temel yapıtaşlarını ve Ring -1'deki gizlilik (stealth) mekanizmalarını inşa ettim.- Manual Mapping & Pool Allocation: Windows API'leri kullanımdan çıkarılarak .sys binary'sini non-paged pool bellek alanlarına manuel olarak map ettim. Host ve Guest state'leri için contiguous (ardışık) bellek blokları allocate ettim.
- NPT (Nested Page Tables) & SLAT: AMD-V donanımsal bellek sanallaştırmasını kullanarak NPT yapısını kurdum. SLAT (Second Level Address Translation) mimarisi ile hipervizörün fiziksel bellek ayak izini (RAM üzerindeki alanını) misafir işletim sisteminden (Windows) tamamen gizledim.
- MSRPM & IOPM Entegrasyonu: MSR Permission Bitmap (MSRPM) ve I/O Permission Bitmap (IOPM) yapılarını oluşturarak hangi MSR ve donanım portlarına erişimde #VMEXIT fırlatılacağını ayarladım. Özellikle LSTAR, CSTAR ve EFER MSR'lerini intercept ettim.
- Timing Attack Koruması: RDTSC ve CPUID komutları için özel VMEXIT handler'lar yazdım. RDTSC offset değerlerini manipüle ederek hipervizörün varlığının zamanlama gecikmeleriyle (overhead) tespit edilmesini engelledim.
- Hipervizörün Ring -1 seviyesindeki ilk tepkilerini okuyabilmek için Tera Term üzerinden seri iletişimi kurdum. Raw I/O portları (0x3F8) üzerinden donanımla ilk başarılı veri aktarımını sağladım.
- Geliştirme sürecini sanal makinelerden (VM) fiziksel donanıma taşıdım. Anakart üzerinde fiziksel UART kablolamasını ve pin bağlantılarını bizzat yaparak host makine üzerinden gerçek zamanlı donanım loglamasını başlattım.
- EFI Shell üzerinden yüklenen loader modülü ile UEFI ExitBootServices (EBS) fonksiyonuna hook atmayı denedim. Winload.efi'nin PatchGuard öncesi bütünlük testleri bu kancayı tespit ederek 0xc000000d (Geçersiz Parametre) BSOD hatasına neden oldu.
- Çözüm: EBS Hooking yöntemini tamamen terk ettim. Bunun yerine UEFI'nin standart EVT_SIGNAL_EXIT_BOOT_SERVICES olay bildirim sistemine (event callback) geçiş yaparak firmware seviyesinde meşru bir sıçrama (jump) noktası oluşturdum.
- Tera Term ekranında sürekli akan anlamsız E0E0E0 karakter verisi tespit ettim.
- Yapılan low-level analiz sonucunda bu durumun bir Core crash (Triple Fault) olmadığını doğruladım. EFI Loader içinde unutulan eski trace makrolarının UART baud rate (115200) senkronizasyonunu bozduğunu tespit ettim. UART init prosedürünü yeniden yapılandırarak temizledim.
- Sistemde [FATAL] Cannot clear SVMDIS! Hardware locked. hatası tespit ettim. BIOS üzerinden IOMMU ayarlarını aktif etmeme rağmen hata devam etti.
- AMD APM (Architecture Programmer's Manual) Volume 2 spesifikasyonlarını inceleyerek kod analizine gittim. VM_CR (0xC0010114) register'ı maskelenirken Bit 3 (LOCK) ile Bit 4 (SVMDIS) değerlerini ters (swap) yazdığımı belirledim. Kod, SVMDIS yerine donanımsal LOCK bitini sıfırlamaya çalışıyordu. Bit pozisyonlarını düzelterek SVM kilidini bypass ettim.
- Loader (EFI) Aşaması: ASRock boot logosu aktifken GOP (Graphics Output Protocol) üzerinden VMCB fiziksel adresini, Entry Point (EP) değerini ve bellek pool adreslerini ekrana (sarı metin formatında) yazdırdım (Visual Preflight).
- Core (Hypervisor) Aşaması: ExitBootServices tetiklendiği an ekran yazdırma servislerinin bellekten silinmesi sebebiyle oluşabilecek olası bir Triple Fault'u önlemek için, Core tarafındaki tüm UEFI ConOut çağrılarını tamamen kaldırdım. Sistemi tam bir sessizliğe (Radio Silence) alarak, hipervizör seviyesindeki tüm debug işlemlerini sadece raw UART port I/O üzerine yönlendirdim.