SORU
16 EYLÜL 2008, Salı


İnsanlar Flash oyun PHP tabanlı yüksek puanlar tablo hack durdurmak için en iyi yolu nedir

Herhangi bir üst limit puan ve hamle vb tekrarlayarak sunucu üzerinde skor doğrulamak için hiçbir yolu ile bir aksiyon oyunu bahsediyorum.

Tam olarak istediğim şey mümkün Flash/PHP ve insanlar PHP sayfasına Flash dosyamı dışında aramayı önlemek için bir şekilde en güçlü şifreleme. Ben denedim bazı basit yöntemleri geçmişte birden çok arama yapmak için tek bir puan ve gerçekleşmesini sağlama / fibonacci dizisi vb, ve aynı zamanda kafamı allak bullak, paylaşmak Amayeta SWF Encrypt, ama hepsi de sonunda hacklendi.

Şimdi ben yanıt StackOverflow sayesinde http://www.adobe.com/devnet/flashplayer/articles/secure_swf_apps_12.html Adobe biraz daha fazla bilgi ve şifreleme için kullanabilirim sanırım https://github.com/mikechambers/as3corelib - buldum. Bu benim etrafımda olsa CheatEngine alacak.

Hem AS2 için en iyi çözüm olduğunu bilmek istiyorum ve eğer farklıysa AS3,.

Temel sorunlardan TamperData ve LiveHTTP headers gibi şeyler gibi görünüyor, ama ben araçlar da hack daha gelişmiş - CheatEngine (teşekkürler Mark Webster) gibi orada anlıyorum

CEVAP
16 EYLÜL 2008, Salı


Bu İnternet oyunları ve yarışmalar ile klasik bir sorundur. Flash kodunuzu kullanıcılar bir oyun için bir puan karar vermeye çalışır. Ama kullanıcılar güvenilir değildir ve Flash kod kullanıcının bilgisayarında çalışır. Şansın yokmuş. Dövme yüksek puanları: bir saldırganın önlemek için yapabileceğiniz bir şey yok

  • Flash bile daha kolay tersine daha olabileceğini düşünüyor, beri bytecodes iyi belgelenmiş ve açıklayan bir üst düzey dil (Actionscript) --- ne zaman yayınladığınız bir Flash oyun, sen yayıncılık kaynak kod olsun, anlarsın ya.

  • Saldırganların kontrolü çalışma zamanı bellek Flash tercüman, böylece herkes kim bilir nasıl bir programlanabilir hata ayıklayıcı değiştirebilir herhangi bir değişken (dahil olmak üzere mevcut puan) herhangi bir zamanda, değiştirebilir veya programın kendisi.

Sistem karşı olabildiğince basit saldırı bir proxy sunucusu üzerinden oyun için HTTP trafiği Çalıştır, yüksek skor kaydetmek yakalamak ve yüksek bir puan ile tekrar etmektir.

Sen-ebilmek denemek blok saldırısı ile bağlama her yüksek puanı kurtarmak için bir tek örnek oyun mesela göndererek şifreli bir belirteç için istemci oyun başlatma, hangi gibi görünebilir:

hex-encoding( AES(secret-key-stored-only-on-server, timestamp, user-id, random-number))

(Aynı etki için bir oturum çerezi kullanabilirsiniz).

Oyun kodu yankıları yüksek puanı Kaydet sunucuya bu token geri. Ama saldırgan hala sadece oyunu yeniden başlatmak, bir token alın ve sonra hemen bu yüksek puan tekrarlanmış bir tasarruf içine token yapıştır.

Gelecek sadece simge ya da bir oturum çerezi, ama aynı zamanda yüksek skor şifrelemeli bir oturum anahtarı besleme. Bu 128 bit AES anahtarı olacak, bir anahtar Flash oyun içine kodlanmış kendisi ile şifrelenmiş:

hex-encoding( AES(key-hardcoded-in-flash-game, random-128-bit-key))

Şimdi oyuna başlamadan önce mesaj yüksek puan çözer yüksek puan-şifreleme-oturum anahtarı, bunu yapabilirsin çünkü sen kodlanmış yüksek puan-şifreleme-oturum-key-şifre çözme-anahtar içine Flash ikili. En yüksek puanı SHA1 karması ile birlikte bu deşifre anahtarı ile en yüksek puanı şifrelemek,:

hex-encoding( AES(random-128-bit-key-from-above, high-score, SHA1(high-score)))

PHP kodu sunucu kontrolleri token emin olmak için talep geldiğini geçerli bir oyun örneği, sonra çözer şifreli yüksek puan, kontrol emin olmak için en yüksek puanı maçları SHA1 en yüksek puan (eğer bu adımı atlayın, şifre çözme kolayca üretmek rastgele olasılığı çok yüksek, yüksek puan).

Şimdi saldırganın Catcher sunulmaktadır Flash kodunu ve hızlı bir şekilde bulur AES kodu, sopa gibi bir Boğaz başparmak, olsa bile yaramadı olurdu izini 15 dakika ile bir bellek arama ve bir izleyici ("biliyorum puanımı için bu oyun 666, yani bulalım 666 hafıza, yakalamak herhangi bir işlem dokunan bu değer --- bak, yüksek puan şifreleme kodu!"). Oturum anahtarı, saldırgan hatta Flash kodu çalıştırmak yok, oyunu başlatmak ve bir oturum belirteci bir anahtar kapmak ve keyfi yüksek bir puan geri gönder.

En geliştiriciler sadece --- ya da saldırganlar ile takılan bir kaç ay verin: PES noktada artık

  • XOR işlemleri ile AES anahtarları çabalıyorlar

  • Anahtar hesaplayan işlevler ile anahtar bayt dizileri yerine

  • İkili boyunca anahtar şifreleme ve yüksek skor ilanları saçılma sahte.

Bu çoğunlukla zaman kaybıdır. SSL diyorsun ya sağlamayacak gerek yok; SSL SSL iki uç noktalarından biri kötü olduğunda seni koruyamaz.

Burada gerçekten yüksek puanı dolandırıcılık azaltmak için bazı şeyler:

  • Bir giriş oyunu oynamak için gerekli, oturum çerezi üretmek ve aynı oturumda birden çok üstün bir oyun başlattı izin vermez, ya da eş zamanlı oturumlar birden fazla aynı kullanıcı için.

  • Reddetmek yüksek puanlar oyun oturumları son az daha kısa gerçek oyunları oynadı (bir Daha sofistike bir yaklaşım deneyin "karantina" yüksek puanlar için oyun seansları son az 2 standart sapmanın altında ortalama oyun süresi). Sunucu taraflı oyun süreleri takip ettiğinize emin olun.

  • Ya da sadece saldırganların "" oluşturdukları her giriş için makul görünümlü oyun. kağıt üzerinde bir üretmek için, böylece bir ya da iki kez oyun oynadı, bu oturumlardan yüksek puanları reddetmek karantina

  • "Kalp atışı" oyunu sırasında skorları sunucunuz bir oyun kullanım ömrü boyunca skor büyüyor, böylece oyun,. Makul puan eğrileri (örneğin, 999999 0 atlama) takip etme yüksek puanlar reddetmek.

  • "Anlık" kaydedilen geçici puanları karşı daha bağdaştırmak hangi oyun (örneğin, mühimmat miktarı, düzeyi, pozisyon, vs.), Oyun sırasında devlet. Hatta bir şekilde bu verilerdeki anomaliler ile başlamak algılamaya gerek yok; sadece toplamak zorunda, ve sonra bir şeyler balık bak eğer geri dönüp analiz edebilirsiniz.

  • Güvenlik kontrolleri biri başarısız olan herhangi bir kullanıcı hesabı (hiç doğrulama başarısız şifreli yüksek bir puan göndererek mesela) devre dışı bırakın.

Sadece burada yüksek puanı dolandırıcılık caydırmak olduğunu ancak unutmayın. Varhiçbir şeyeğer önlemek için ne yapabilirim. Eğer oyun hattı üzerinde para varsa, biri ile gelip herhangi bir sistem yenmek için gidiyor. Bu amaç için değildurbu saldırı; saldırı sadece bu oyunda cidden iyi olmaya daha yapmak için daha pahalı ve atıyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • After Effects Tutorials w/ Mikey

    After Effect

    24 HAZİRAN 2009
  • Epic Tutorials for iPhone, iPad and iOS

    Epic Tutoria

    18 EYLÜL 2011
  • ODN

    ODN

    26 Kasım 2006