Sağlam bir oyun anti cheat sistemi, tek bir programla ya da sihirli bir kütüphaneyle değil, bir mimari kararla başlar: oyunun gerçeğini kim belirler? İstemciye güvenen her sistem er ya da geç kırılır, çünkü hile yazan kişi istemci üzerinde tam kontrole sahiptir. Anti-cheat'in özü bir tarama aracı değil, sunucu tarafı doğrulamadır — yani oyun durumunun tek otoritesinin sunucu olmasıdır.
Neden istemci asla güvenilir değildir
Oyuncunun makinesinde çalışan her şey — bellek, ağ paketleri, çizim döngüsü — oyuncunun erişimine açıktır. Bir hile yazarı, istemcinin gönderdiği değerleri serbestçe değiştirebilir: canını sabitleyebilir, hasarı büyütebilir, duvarların arkasını görebilir ya da ışınlanabilir. İstemci tarafında yaptığınız hiçbir kontrol bu kişiyi durduramaz, çünkü kontrolün kendisini de devre dışı bırakabilir.
Bu yüzden temel kural şudur: istemci niyet bildirir, sunucu karar verir. İstemci "şu yöne yürümek istiyorum" ya da "bu canavara saldırdım" der; sunucu bunun mümkün olup olmadığını kontrol eder ve sonucu üretir. İstemci yalnızca sunucunun onayladığı durumu çizer.
Otorite modeli: sunucu durumun tek sahibi
Otoriter sunucu modelinde önemli her değer sunucuda tutulur ve hesaplanır:
- Konum ve hareket: Oyuncunun nerede olduğunu sunucu bilir. İstemci yalnızca girdi (yön, tuş) gönderir.
- Sağlık, mana, hasar: Savaş hesapları sunucuda yapılır; istemci sadece sonucu görselleştirir.
- Envanter ve para: Eşya ekleme/silme yalnızca sunucu işlemleriyle olur, istemci isteğiyle değil.
İstemci bir paket gönderdiğinde sunucu şu soruyu sorar: "Bu oyuncu, sahip olduğu bilgiyle bu eylemi gerçekten yapabilir mi?" Cevap hayırsa paket reddedilir ve olay kaydedilir.
Sunucu tarafı doğrulamanın temel kontrolleri
Pratikte doğrulama, birkaç katmanlı mantıksal kontrolden oluşur. Aşağıdaki sadeleştirilmiş örnek, bir hareket paketinin nasıl doğrulanabileceğini gösterir:
// Sunucu: hareket paketi doğrulama (sadeleştirilmiş)
bool handleMove(Player& p, const MovePacket& pkt) {
double dt = now() - p.lastMoveTime; // geçen süre
double dist = distance(p.pos, pkt.pos); // istenen mesafe
double maxDist = p.maxSpeed * dt * 1.1; // %10 tolerans
if (dist > maxDist) { // hız hilesi / ışınlanma?
flag(p, "speed", dist, maxDist);
return false; // paketi reddet
}
if (!isWalkable(pkt.pos)) { // duvar içine girme?
flag(p, "collision", pkt.pos);
return false;
}
p.pos = pkt.pos; // geçerli: durumu güncelle
p.lastMoveTime = now();
return true;
}
Bu yaklaşımın püf noktası, mutlak değerleri değil tutarlılığı kontrol etmektir. Oyuncu son paketten bu yana mümkün olandan daha fazla yol kat ettiyse, gönderdiği konuma değil sunucunun bildiği son geçerli duruma güvenirsiniz. Aynı mantık saldırı menzili, atış hızı (cooldown), eşya kullanımı için de geçerlidir.
Bilgi gizleme: göremediğini hile yapamazsın
Bazı hileler doğrulamayla durmaz çünkü kuralları çiğnemezler — sadece istemcinin sahip olmaması gereken bilgiyi kullanırlar. Wallhack ve harita hilesi buna örnektir: oyuncu, görüş alanı dışındaki düşmanların yerini öğrenir. Çözüm ilgi alanı yönetimidir (area of interest): sunucu her oyuncuya yalnızca görmesi gereken varlıkları gönderir. Görüş açısı dışındaki bir düşmanın konumu istemciye hiç ulaşmazsa, hile o veriyi gösteremez.
Aynı ilke gizli bilgiler için de geçerlidir: bir kart oyununda rakibin eli, bir nişancı oyununda görünmeyen oyuncuların envanteri — istemciye yalnızca o an gerekli olan veri gönderilir.
İstatistiksel tespit ve hız sınırlama
Tüm hileler tek bir pakette yakalanmaz. Aimbot gibi araçlar kuralları ihlal etmez; sadece insanüstü tutarlılıkla oynar. Bu tür hileler davranışsal sinyallerle tespit edilir: anormal isabet oranı, imkânsız tepki süreleri, mükemmel nişan açıları. Sunucu bu metrikleri zaman içinde toplar ve eşik aşıldığında işaretler.
Daha basit ama etkili bir savunma da hız sınırlamadır (rate limiting): bir oyuncunun saniyede kaç eylem (saldırı, ticaret, sohbet, eşya kullanımı) yapabileceğini sunucu sınırlar. Bot ve paket spam'i çoğu zaman buradan yakalanır.
- Yumuşak tepki: şüpheli oyuncuyu işaretle, kaydet, izle.
- Sert tepki: oturumu kes, geçici/kalıcı yasak, hesabı incelemeye al.
İşaretlenen her olayı hemen banlamak yerine kayıt altına almak önemlidir; yanlış pozitifler gerçek oyuncuları mağdur eder. İyi bir sistem önce kanıt biriktirir, sonra karar verir.
Katmanlı savunma: tek bir duvar değil
Hiçbir tek teknik tek başına yeterli değildir. Güçlü bir anti-cheat mimarisi katmanları üst üste koyar: otoriter sunucu durumu, paket doğrulama, ilgi alanı filtreleme, hız sınırlama, davranışsal analiz ve sunucu tarafı kayıt. İstemci tarafı kontroller (bütünlük taraması gibi) yalnızca bu temelin üstüne eklenen bir bonustur — asla onun yerine geçemez.
Asıl tasarım hedefi mükemmellik değil, hilenin maliyetini yükseltmektir. Sunucu otoritesi sağlamsa, en yıkıcı hileler (eşya üretme, sınırsız para, ölümsüzlük) en baştan imkânsız hale gelir; geriye kalanlar ise tespit edilebilir hâle gelir.
Sık Sorulan Sorular
İstemci tarafı anti-cheat tamamen gereksiz mi?
Hayır, ama ikincildir. İstemci taraması bazı bilinen hileleri zorlaştırabilir; ancak kararlı bir saldırgan tarafından atlatılabileceği için tek savunma olamaz. Temel her zaman sunucu tarafı doğrulama olmalıdır.
Küçük bir oyun için bu kadar mimari gerçekten gerekli mi?
Otorite modeline başından karar vermek neredeyse hiç maliyet getirmez ama sonradan eklemek çok pahalıdır. Küçük projelerde bile en kritik değerleri (para, eşya, sağlık) sunucuda tutmak en önemli adımdır.
Hileyi tamamen önleyebilir miyim?
%100 önleme gerçekçi bir hedef değildir. Gerçekçi hedef, en zarar verici hileleri imkânsız kılmak ve geri kalanını ekonomik olmayacak kadar zor ve riskli hâle getirmektir.
Oyun sunucunuz için sağlam bir anti-cheat temeli mi kurmak istiyorsunuz? Otoriter sunucu mimarisi, paket doğrulama ve hile tespiti konusunda yardıma ihtiyacınız varsa benimle iletişime geçin.