Yazılım

Modern Oyunlarda DLL Hijacking ve IAT Hooking: Bellek Seviyesinde Gizlenme Teknikleri

Modern Oyunlarda DLL Hijacking ve IAT Hooking: Bellek Seviyesinde Gizlenme Teknikleri

Modern oyun dünyası, hile geliştiriciler ve anti-cheat (EAC, BattlEye gibi) sistemleri arasında bitmek bilmeyen bir teknolojik savaşa sahne oluyor. Bu savaşın merkezinde ise oyunun işleyişine sızmak için kullanılan DLL Hijacking teknikleri ve IAT Hooking gibi kritik bellek manipülasyonu yöntemleri yer alıyor. Artık sadece basit bir kod değişikliğinden ibaret olmayan bu yöntemler, işletim sisteminin derinliklerine kadar uzanan sofistike mühendislik harikalarına dönüşmüş durumda. Bu makalede, modern oyunlarda kullanılan gelişmiş teknikleri ve bu yöntemlerin anti-cheat sistemlerinden nasıl gizlendiğini teknik detaylarıyla inceliyoruz.

DLL Hijacking: Meşru Süreçlerin Ele Geçirilmesi

DLL (Dynamic Link Library) Hijacking, bir uygulamanın (bu senaryoda oyunun) meşru bir kütüphane yerine, saldırgan tarafından hazırlanmış sahte bir kütüphaneyi yüklemesini sağlayan bir suistimal yöntemidir. Modern oyunlarda bu teknik, hile kodunun oyunun bellek alanına (address space) dahil edilmesi için birincil kapı görevi görür.

DLL Search Order Hijacking

Windows işletim sistemi, bir uygulama bir DLL talep ettiğinde belirli bir arama sırasını takip eder. Varsayılan olarak süreç şu şekilde işler:

  1. Uygulamanın yüklü olduğu dizin.
  2. Sistem dizini (System32).
  3. Windows dizini.
  4. Mevcut çalışma dizini.
  5. PATH ortam değişkenindeki dizinler.

Hile geliştiricileri, oyunun ihtiyaç duyduğu version.dll, dxgi.dll veya winmm.dll gibi dosyaların sahte versiyonlarını doğrudan oyunun kurulu olduğu dizine bırakır. Oyun başlatıldığında, Windows önce oyun dizinine baktığı için meşru sistem dosyasını değil, hileli DLL’i yükler.

Proxying (Sarmalama) ve Side-loading

Sadece sahte bir DLL yüklemek oyunun çökmesine neden olur, çünkü oyun belirli fonksiyonları çağıracaktır. Proxying yönteminde, sahte DLL orijinal DLL’in tüm fonksiyonlarını dışa aktarır (export). Oyun bir fonksiyon çağırdığında, sahte DLL bu çağrıyı yakalar, hile kodunu yürütür ve ardından çağrıyı sessizce orijinal sistem DLL’ine iletir. Side-loading ise genellikle dijital imzalı meşru bir launcher’ın (başlatıcı), aynı dizindeki imzalanmamış bir DLL’i yüklemeye zorlanmasıyla gerçekleştirilen daha ileri bir sızma tekniğidir.

IAT Hooking: Fonksiyon Çağrılarının Yönlendirilmesi

Bir oyunun dış kütüphanelerden hangi fonksiyonları kullandığını bilmesi gerekir. İşte burada Import Address Table (IAT) devreye girer. IAT, bir programın harici DLL’lerden içe aktardığı fonksiyonların adreslerini tutan bir tablodur.

Teknik çalışma Prensibi

IAT Hooking, bu tablodaki orijinal fonksiyon adreslerini hilecinin kendi kod bloğunun adresiyle değiştirmesi işlemidir. Örneğin, oyun ekran kartına bir görüntü çizmek için DirectX’in Present fonksiyonunu çağırdığında, IAT tablosuna bakar. Eğer bu tablo manipüle edildiyse, oyun doğrudan hilecinin koduna gider.

  • Wallhack ve ESP: Geliştiriciler, Present veya DrawIndexedPrimitive gibi fonksiyonları hook’layarak, oyunun orijinal çizim döngüsünün arasına girer. Bu sayede duvar arkasındaki oyuncuları renklendiren veya ekrana bilgi kutucukları (ESP) çizen kodları çalıştırabilirler.
  • Tespit Edilme Riski: IAT Hooking bellek üzerinde statik bir değişiklik yapar. Modern anti-cheat sistemleri, IAT tablosunun olması gereken değerlerini (Checksum) periyodik olarak kontrol eder. Eğer bir sapma tespit edilirse, hile kullanımı anında raporlanır.

Bellek Seviyesinde Gizlenme ve Anti-Detection Yöntemleri

Anti-cheat sistemlerinin gelişmesiyle birlikte, standart yöntemler yerini bellek seviyesinde gizlenme tekniklerine bırakmıştır.

Manual Mapping (Manuel Eşleme)

Standart LoadLibrary fonksiyonu kullanıldığında, Windows bu DLL’i Process Environment Block (PEB) listesine ekler. Anti-cheat yazılımları bu listeyi tarayarak yabancı modülleri kolayca bulur. Manual Mapping, DLL dosyasını diskten okuyup, Windows’un yaptığı işi manuel olarak bellekte taklit ederek (bölümleri kopyalama, relocation işlemlerini yapma) yükleme işlemidir. Bu sayede DLL, modül listesinde görünmez; yani bellekte var olsa da “yüklü” değildir.

Inline Hooking ve VMT Hooking

  • Inline Hooking (Detouring): Fonksiyonun IAT adresini değiştirmek yerine, fonksiyonun en başındaki ilk birkaç baytını (prologue) bir JMP (atlama) komutuyla değiştirir. Bu, IAT kontrolünü atlatır.
  • VMT (Virtual Method Table) Hooking: C++ nesne yönelimli programlamada kullanılan sanal metod tablolarını hedefler. Nesnenin kendi içindeki fonksiyon işaretçisini değiştirdiği için tespiti daha zordur.

Stealth Remapping

Bu teknikte, bellek sayfaları fiziksel olarak kopyalanır. Anti-cheat tarama yapmak istediğinde ona manipüle edilmemiş “temiz” sayfa gösterilirken, oyun işlemcisi hileli kodların bulunduğu modifiye edilmiş sayfayı çalıştırmaya devam eder. Bu, sanki bir sihirbazlık numarası gibi belleğin iki farklı yüzünün olmasını sağlar.

İleri Seviye Tehditler: Kernel-Mode ve Hypervisor

Kullanıcı modunda (Ring 3) çalışan hileler, yönetici haklarına sahip bir anti-cheat (EAC gibi) tarafından kolayca yakalanabilir. Bu nedenle savaş, işletim sistemi çekirdeğine (Ring 0) taşınmıştır.

Kernel-mode sürücüleri, doğrudan işletim sisteminin kalbinde çalışır. Bu seviyedeki bir hile, anti-cheat servisinin kendisini bellekte görememesini sağlayabilir, dosyalarını gizleyebilir veya anti-cheat’in Windows API çağrılarını manipüle ederek sistemin “temiz” olduğu yalanını söyleyebilir.

Daha da ötesi, Hypervisor tabanlı hileler (Ring -1), işletim sisteminin bile altında çalışır. Bu hileler, tüm işletim sistemini sanallaştırarak anti-cheat yazılımı için tamamen görünmez bir katman oluşturur. Bu tür tehditlerin tespiti, genellikle donanım seviyesinde gecikme (latency) analizleri yapılmadan neredeyse imkansızdır.

Anti-Cheat Sistemlerinin Yanıtı: Koruma Mekanizmaları

Oyun geliştiricileri ve koruma şirketleri bu saldırılara karşı proaktif savunma hatları kurmaktadır:

  1. İmza Tarama (Signature Scanning): Bellekteki kod bloklarını bilinen hile veritabanlarıyla karşılaştırır.
  2. Davranışsal Analiz (Heuristic Analysis): Bir sürecin normal dışı bellek erişimleri yapıp yapmadığını veya sistem çağrılarının alışılmadık bir sırayla gelip gelmediğini denetler.
  3. Heartbeat Kontrolleri: Oyun ve anti-cheat servisi arasında sürekli bir şifreli haberleşme (kalp atışı) kurulur. Eğer bu iletişim koparsa veya geç gelirse, sistem hileden şüphelenir.
  4. Bütünlük Kontrolleri: Oyunun kütüphaneleri ve kritik bellek bölgeleri rastgele zamanlarda taranarak orijinal halleriyle (checksum) kıyaslanır.

Sonuç

DLL hijacking teknikleri ve bellek manipülasyonları, siber güvenlik dünyasının en dinamik alanlarından biridir. Modern oyunlarda hileciler ve koruma sistemleri arasındaki bu rekabet, yazılım güvenliği standartlarının da yükselmesine neden olmaktadır. Manuel mapping ve kernel-mode sürücüler gibi yöntemler hala büyük zorluklar teşkil etse de, yapay zeka destekli davranışsal analizler bu savaşı yeni bir boyuta taşımaktadır.

Siber güvenlik ve oyun geliştirme dünyasından en güncel teknik içerikler ve derinlemesine incelemeler için bültenimize abone olmayı unutmayın.

Bir yanıt yazın