Bir özel sunucuyu uzun süre ayakta tutmanın en sinir bozucu düşmanı hilecilerdir ve etkili bir Metin2 anti hack stratejisi neredeyse tamamen sunucu tarafında kurulur. İstemci (client) hiçbir zaman güvenilir bir kaynak değildir: oyuncunun bilgisayarında çalışan her şey değiştirilebilir, enjekte edilebilir, bellekten okunabilir. Bu yüzden speedhack, wallhack ve metin (taş kırma) hilelerine karşı gerçek koruma, oyun sunucusunun gelen her paketi şüpheyle karşılaması ve mantık sınırlarını kendisinin yeniden hesaplamasıyla sağlanır.
Neden istemci tarafı koruma yeterli değil?
Birçok yeni sunucu sahibi GameGuard, XTrap ya da benzeri bir "binary protector" kurmanın yeterli olacağını sanır. Bu araçlar bellek tarama, debugger tespiti ve DLL enjeksiyon engelleme gibi işler yaparak çıtayı yükseltir, ama hiçbiri kırılamaz değildir. Hilecinin tek yapması gereken korumayı bypass etmek; bunu başardığında, sunucu sahte verileri sorgusuz kabul ediyorsa oyun bitmiştir.
- Client koruması caydırıcıdır, bariyer değildir; zaman kazandırır.
- Server doğrulaması nihai karar mercidir; bypass edilse bile sahte hareketi reddeder.
- Doğru mimaride istemci "ne yapmak istediğini" söyler, sunucu "yapabilir mi" sorusunu kendi hesabıyla yanıtlar.
Yani altın kural şu: asla istemciye güvenme, her şeyi yeniden doğrula.
Speedhack'e karşı hareket ve zaman doğrulaması
Speedhack, oyun döngüsünün hızını yapay olarak artırarak karakteri normalden hızlı hareket ettirir veya saldırı hızını yükseltir. Metin2 istemcisi sunucuya düzenli olarak senkronizasyon (sync) paketleri gönderir; bu paketler pozisyon ve istemci zaman damgası taşır. Sunucu tarafında yapılması gereken, iki sync arasında geçen sürede karakterin fiziksel olarak ne kadar yol katedebileceğini hesaplayıp gerçek mesafeyle karşılaştırmaktır.
Mantık kabaca şöyledir: karakterin mevcut hareket hızı (movement speed), iki paket arasındaki süreyi metreye/birime çevirir. Gelen pozisyon bu izin verilen yarıçapın dışındaysa paket şüphelidir.
// Sözde-kod: sunucu tarafı hareket doğrulaması
float dt = now_ms - last_sync_ms; // ms cinsinden süre
float maxDist = (moveSpeed / 100.0f) * dt; // hızdan izin verilen mesafe
float tolerance = 1.15f; // ağ jitter'ı için pay
float dist = distance(newPos, lastValidPos);
if (dist > maxDist * tolerance) {
sync_violation_count++;
if (sync_violation_count > THRESHOLD) {
LogHack(ch, "SPEED", dist, maxDist);
WarpToLastValid(ch); // geri ışınla, sonra gerekiyorsa cezalandır
}
}
Burada iki ayrıntı kritik: birincisi, ağ gecikmesi ve jitter yüzünden küçük bir tolerans payı bırakmazsanız meşru oyuncuları yanlışlıkla cezalandırırsınız. İkincisi, tek bir ihlalde ban atmak yerine bir ihlal sayacı (violation counter) tutup eşik aşıldığında harekete geçmek daha sağlıklıdır. İstemci zaman damgasına asla doğrudan güvenmeyin; onu da sunucunun kendi saatiyle çapraz kontrol edin, çünkü zamanın kendisi de manipüle edilebilir.
Wallhack, ışınlanma ve mesafe atlama
Wallhack ve teleport hileleri, çarpışma (collision) denetimini atlayarak karakteri duvarların içinden geçirir veya bir anda uzak bir koordinata taşır. Aynı sync doğrulaması bunun da büyük kısmını yakalar: ani, fiziksel olarak imkânsız bir pozisyon sıçraması zaten mesafe eşiğini patlatır. Bunu güçlendirmek için:
- Sunucu tarafı yükseklik haritası / atlas verisi ile geçilemez (blocking) hücreleri kontrol edin; hedef hücre yürünebilir değilse hareketi reddedin.
- Harita geçişlerini yalnızca tanımlı warp noktalarından izin verin; oyuncu, izin verilmeyen bir koordinattan başka haritaya geçmeye çalışıyorsa paketi düşürün.
- Z ekseni / yükseklik sıçramalarını da denetleyin; uçma (fly hack) çoğu zaman dikey eksende belli eder kendini.
Önemli bir nokta: çarpışma verisini sunucuda tutmak ek bellek ve CPU maliyeti getirir, ama wallhack'i kapatmanın tek güvenilir yolu budur. İstemcinin "ben buradayım" demesi yeterli değildir; sunucu o noktanın gerçekten erişilebilir olup olmadığını bilmelidir.
Metin taşı ve saldırı hilelerine karşı menzil denetimi
"Metin hack" genellikle iki şeyi kapsar: oyuncunun metin taşına gerçekte yaklaşmadan uzaktan vurması, ya da imkânsız bir hızla art arda saldırması. Çözüm yine sunucu tarafı doğrulamadır. Bir saldırı veya "taş kır" paketi geldiğinde sunucu şunları kontrol etmeli:
- Menzil: saldıran ile hedef arasındaki mesafe, silahın/saldırının izin verilen menzilinden büyükse reddet.
- Hedef geçerliliği: hedef gerçekten o haritada, görüş alanında ve saldırılabilir durumda mı?
- Saldırı hızı (cooldown): iki saldırı arasındaki süre, karakterin saldırı hızına göre hesaplanan minimum cooldown'dan kısaysa fazlalık vuruşları yok say.
// Sözde-kod: saldırı menzili ve cooldown kontrolü
if (distance(attacker, victim) > weaponRange + RANGE_BUFFER) {
return ATTACK_REJECTED; // menzil dışı
}
if (now_ms - lastAttack_ms < minAttackInterval(attacker)) {
attackSpeedViolations++; // çok hızlı vuruyor
return ATTACK_REJECTED;
}
lastAttack_ms = now_ms;
Auto-attack / oto-farm botları da çoğu zaman bu cooldown ve menzil mantığını zorladığı için, aynı denetimler aynı zamanda farm botlarına karşı ilk savunma hattını oluşturur. Hasar (damage) değerini de istemciden almayın; hasarı her zaman sunucu, karakterin statlarına göre kendisi hesaplasın.
Loglama, anomali tespiti ve kademeli ceza
Bir Metin2 anti hack sistemi sadece "engelle"den ibaret olmamalı; aynı zamanda görünür olmalı. Her ihlali zaman damgası, oyuncu kimliği, harita ve ölçülen değerlerle birlikte loglayın. Bu loglar üç işe yarar: meşru oyuncuların yanlış ban'lerini ayıklamak, yeni hile türlerini erken fark etmek ve tekrar eden ihlalcileri kanıtla yakalamak.
- Kademeli ceza: ilk ihlalde uyarı + geri ışınlama, tekrarında kısa kick, ısrar edende otomatik geçici ban.
- Eşik tabanlı kararlar: tek bir lag spike'ı ban'a dönüşmesin; pencere içinde X ihlal olduğunda tetiklensin.
- Anomali raporları: dakikada öldürülen metin sayısı, kazanılan EXP eğrisi gibi metrikleri izleyip uç değerleri işaretleyin.
Veritabanına yazılan bu ihlal kayıtları, ileride basit bir yönetici panelinde grafiğe dönüştürüldüğünde, hangi haritalarda ne tür hilelerin yoğunlaştığını görmek çok kolaylaşır.
Sık Sorulan Sorular
GameGuard veya XTrap kurmak yeterli mi?
Hayır. Bu araçlar istemci tarafında işi zorlaştırır ve caydırıcıdır, ama bypass edilebilir. Gerçek güvenlik, sunucunun her hareketi ve saldırıyı kendi başına yeniden doğrulamasıyla gelir. İkisini birlikte kullanmak en iyi sonucu verir: istemci koruması çıtayı yükseltir, sunucu doğrulaması nihai bariyerdir.
Sunucu tarafı doğrulama performansı çok mu yer?
Mesafe ve cooldown hesapları birkaç çarpma-çıkarma işlemidir; maliyeti ihmal edilebilir. Asıl yük çarpışma/atlas verisini bellekte tutmaktır, ki bu da modern bir VPS için sorun değildir. Doğru optimize edilmiş bir denetim, binlerce oyuncuda bile fark ettirmez.
Meşru oyuncuları yanlışlıkla banlamaktan nasıl kaçınırım?
Tolerans payı, ihlal sayacı ve kademeli ceza üçlüsünü kullanın. Tek bir ölçümle asla ban atmayın; ağ jitter'ı ve lag normaldir. Önce logla ve geri ışınla, kalıcı cezayı yalnızca tekrar eden net ihlallere uygulayın.
Sunucunu hilecilerden temizlemek mi istiyorsun? Metin2 kaynağında speedhack/wallhack/metin doğrulama katmanları kurmaktan saldırı menzili ve loglama altyapısına kadar uçtan uca yardımcı olabilirim. Projeni konuşmak için benimle iletişime geç.