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

17 Cevap php

Ben herhangi bir üst puan sınırı ve hamle vb tekrarlayarak sunucu üzerinde puan doğrulamak için hiçbir şekilde bir aksiyon oyunu bahsediyorum

Ne gerçekten ihtiyacınız Flaş / PHP mümkün olan en güçlü şifreleme ve benim Flash dosyası haricinde başka PHP sayfayı çağıran insanları engellemek için bir yoldur. Tek bir skor için birden çok arama yapmak ve etc sağlama / Fibonacci dizisi tamamlayarak, ve aynı zamanda Amayeta SWF Encrypt ile SWF obfuscating geçmişte bazı basit yöntemleri denedi, ama hepsi sonunda hacklendi.

Ben şifreleme için kullanabilirsiniz düşünüyorum hangi - yanıtları StackOverflow sayesinde artık Adobe'den biraz daha bilgi bulduk - http://www.adobe.com/devnet/flashplayer/articles/secure_swf_apps_12.html ve https://github.com/mikechambers/as3corelib. Bu olsa CheatEngine beni alacaksınız emin değil.

Bunlar farklı ise ben, AS2 ve AS3 ikisi için en iyi çözümleri bilmek gerekir.

Temel sorunlar TamperData ve LiveHTTP başlıklarını gibi şeyler olabilir gibi görünüyor, ama orada daha gelişmiş hack araçları yanı anlamak - CheatEngine gibi (teşekkürler Mark Webster)

17 Cevap

Bu İnternet oyunları ve yarışmalar ile klasik bir sorundur. Flash kod bir oyun için bir puan karar kullanıcılar ile çalışır. Ancak kullanıcılar güvenilir ve Flaş kod, kullanıcının bilgisayarında çalışır değildir. Sen SOL sensin. Eğer yüksek puanlar dövme bir saldırganın önlemek için yapabileceğiniz bir şey yok:

  • Flaş baytkodlarına iyi belgelenmiş olduğundan, ne olduğunu düşündüğünüzden daha tersine mühendislik ve yüksek seviyeli dil (Actionscript) tanımlamak daha kolaydır --- sen, bir Flash oyun yayınlamak kaynak kodunu basıyorlar, siz ister zaman Bunu bilmek ya da değil.

  • Programlanabilir bir hata ayıklayıcı kullanmayı bilen herkesin herhangi bir zamanda (geçerli puanı dahil) herhangi bir değişkeni değiştirmek, ya da programın kendisi değiştirebilir böylece Saldırganlar, Flaş tercüman zamanı belleğini kontrol.

Lütfen sisteme karşı basit olası bir saldırı, bir proxy üzerinden oyun için HTTP trafiği çalıştırmak yüksek skor kaydetmek yakalamak ve yüksek bir skor ile tekrar etmektir.

Sen gibi görünebilir, hangi oyunu başlangıçta istemci şifreli bir belirteç göndererek örneğin, oyunun tek bir örneği kaydetmek her yüksek puanı bağlanarak bu saldırıyı engellemek için deneyebilirsiniz:

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

(Ayrıca, aynı etki için bir oturum çerezi kullanabilirsiniz).

Oyun kodu kaydetmek yüksek skor ile geri sunucuya bu belirteci yankıları. Ama saldırganın hala, oyunu yeniden başlatmak bir simge olsun, ve sonra hemen bir kurtarış çalınır yüksek puanı içine belirteci yapıştırabilirsiniz.

Yani bir sonraki değil, sadece bir simge ya da oturum çerezi beslemek değil, aynı zamanda bir yüksek skor şifreleyerek oturum anahtarı. Bu Flash oyun içine kodlanmış bir anahtar ile şifrelenmiş bir 128 bit AES anahtarı, kendisi olacaktır:

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

Flash ikili içine yüksek puan-şifreleme-session-anahtar şifresini tuşunu kodlanmış çünkü artık oyun mesajların önce yüksek bir puan, o yapabileceği yüksek puan-şifreleme-oturum anahtarını, çözer. Sen yüksek puan SHA1 karma ile birlikte, bu Dekripte tuşu ile yüksek puanı şifrelemek:

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

Sunucu üzerinde PHP kodu emin isteği geçerli oyun örneği geldi yapmak için belirteci denetler, o zaman bu adımı atlayın (yüksek puanı yüksek puan SHA1 uyduğundan emin olmak için kontrol, şifreli yüksek puanı çözer , şifre çözme sadece) rastgele, büyük olasılıkla çok yüksek, yüksek puanlar üretecek.

Yani şimdi saldırganın Flash kodunuzu decompiles ve hızla vermedi bile, bir bellek arama ve izleyici ile 15 dakika içinde aşağı izlenen olurdu ancak ben biliyorum "(bir boğaz başparmak gibi yapışır AES kodunu bulur Bu oyun için benim puan 666, yani oh, yüksek skor şifreleme kodunu bakmak --- o değeri dokunan herhangi bir işlem yakalamak, hafızasında 666 bulsun! "). Oturum anahtarı ile, saldırgan, hatta Flaş kodu çalıştırmak zorunda değildir; o bir oyun başlatmak belirteç ve bir oturum anahtarı kapmak ve bir keyfi yüksek bir puan geri gönderebilirsiniz.

Sen en geliştiriciler tarafından sadece saldırganlar ile karıştırmasını bir kaç ay --- vazgeçmek vermek veya almak noktada artık konum:

  • XOR işlemleri ile AES tuşları çabalıyorlar

  • Anahtarı hesaplamak fonksiyonları ile önemli bayt dizileri değiştirilmesi

  • Ikili boyunca sahte anahtar şifreleme ve yüksek bir puan ilanları Saçılma.

Bu, tüm çoğunlukla zaman kaybıdır. Bu SSL da sana yardım edecek değildir, söylemeye gerek yok; Iki SSL noktalardan birini kötü olduğunda SSL sizi koruyamam.

Burada aslında yüksek puan dolandırıcılık azaltabilir bazı şeyler şunlardır:

  • Oyunu oynamak için giriş gerektiren, giriş bir oturum tanımlama üretmek var, ve birden çok üstün bir oyun aynı oturumda başlattı, ya da aynı kullanıcı için birden eşzamanlı oturumlar izin vermez.

  • (Daha karmaşık bir yaklaşım için, ortalama oyun süresi aşağıda az 2 standart sapmaları son oyun oturumları için yüksek puanlar "karantinaya" denemek) daha az şimdiye kadar oynanan en kısa gerçek oyunlarda daha son oyun oturumları yüksek puanlar reddet. Eğer oyun süreler serverside izliyoruz emin olun.

  • Saldırganların oluşturmak her oturum için makul görünümlü oyun bir "kağıt izi" üretmek zorunda, böylece sadece bir veya iki kez oyun oynamış oturumların yüksek puanlar reddetmek veya karantina.

  • Oyun sırasında "Heartbeat" puanları, sunucu bir oyun ömrü boyunca skor büyümeyi görür böylece. (0-999999 atlama, örneğin) makul puan eğrilerini takip etmiyorum yüksek puanlar Reddet.

  • Daha sonra kaydedilen geçici puanları karşı bağdaştırmak (örneğin, mühimmat miktarı, düzeyi pozisyon, vb) oyun sırasında "Snapshot" oyun devlet. Hatta ile başlamak için bu veri anormallikleri tespit etmek için bir yol olması gerekmez; sadece onu toplamak zorunda, ve sonra geri dönüp şeyler balık bakarsanız bunu analiz edebilirsiniz.

  • (Örneğin, hiç doğrulama başarısız şifreli bir yüksek puanı göndererek) güvenlik kontrolleri birini başarısız herhangi bir kullanıcı hesabını devre dışı.

Eğer sadece burada yüksek bir puan dolandırıcılık caydırmak konum olsa da unutmayın. Orada nothing Eğer önlemek için ne yapabilirim. Para senin oyununda çizgi üzerinde varsa, birisi size gelip herhangi bir sistem yenmek için gidiyor. Amaç stop bu saldırı değildir; sadece oyunu gerçekten iyi oluyor ve onu yenerek daha atak daha pahalı yapmak bulunuyor.

Yanlış soruyu soran olabilir. İnsanların yüksek puan listesini yola kadar oyun kullanarak, ancak özel yöntemler engelleme sadece şimdiye kadar gider yöntemlerden odaklanmış görünüyor. Ben TamperData ile hiçbir deneyime sahip, bu yüzden bunu konuşamıyor.

Sormanız gereken soru şudur: "Nasıl puanları geçerli ve otantik teslim olduğunu doğrulayabilir?" Bunu yapmak için özel bir yolu oyun bağlıdır. Çok basit bulmaca oyunları için, belirli başlangıç ​​devlet ve uç devlet sonuçlandı hamle dizisi ile birlikte puan üzerinden göndermek olabilir, ve sonra sunucu tarafında yeniden çalıştırın oyun aynı hareketleri kullanarak. Belirtilen puanı hesaplanan puan olarak aynı olduğunu onaylamak ve bunların neticesinde yalnızca skoru kabul.

An easy way to do this would be to provide a cryptographic hash of your highscore value along with the score it self. For example, when posting the results via HTTP GET: http://example.com/highscores.php?score=500&checksum=0a16df3dc0301a36a34f9065c3ff8095

Bu checksum hesaplanırken, paylaşılan gizli kullanılmalıdır; Bu gizli ağ üzerinden iletilen asla, ama zor PHP arka uç ve flaş önyüz hem içinde kodlanmış olmalıdır. Yukarıdaki toplamı skoru dize "secret" prepending "500", ve md5sum yoluyla çalıştırarak oluşturuldu.

Bu sistem keyfi puan göndererek bir kullanıcıyı engellemek olsa da, bir kullanıcı bir önceden hesaplanmış puan ve karma kombinasyonu reposts bir "yeniden saldırı", engellemez. Yukarıdaki örnekte, 500 skoru her zaman aynı karma dize üretecektir. Bu riskin bazı karma olmaktır dize (örneğin, bir kullanıcı adı, zaman damgası veya IP adresi gibi) daha fazla bilgi içeren ile hafifletilebilir. Bu verilerin yeniden önlemek değil de, bu veri seti tek bir seferde tek bir kullanıcı için geçerli olduğunu sigorta olacaktır.

any meydana gelen saldırıları tekrar önlemek için, meydan-yanıt sistemi bir tür gibi, aşağıdaki gibi oluşturulur gerekecektir:

  1. Flash oyun ("müşteri") http://example.com/highscores.php with no parameters. This page returns two values: a randomly generated salt değerine ve paylaşılan gizli ile birlikte tuz değer bir kriptografik karma bir HTTP GET gerçekleştirir. Bu tuz değer bekleyen sorguları yerel bir veritabanında saklanmalıdır, ve belki de bir dakika sonra "sona" böylece onunla ilişkili bir zaman damgası olmalıdır.
  2. Flash oyun paylaşılan sır ile tuz değerini birleştirir ve bu sunucu tarafından sağlanan bir eşleştiğini doğrulamak için bir hash hesaplar. Bu salt değeri aslında sunucu tarafından oluşturulan doğrular gibi bu adım, kullanıcılar tarafından tuz değerleri ile oynanmasını önlemek için gereklidir.
  3. Flash oyun paylaşılan gizli, yüksek bir puan değeri ve ilgili diğer bilgileri (kullanıcı adı, ip, zaman damgası) ile tuz değerini birleştiren ve bir karma hesaplar. Daha sonra tuz değeri, yüksek skor ve diğer bilgilerle birlikte, HTTP GET veya POST geri PHP arka uç bu bilgileri gönderir.
  4. Sunucu istemci üzerinde aynı şekilde alınan bilgileri birleştirir ve bu istemci tarafından sağlanan eşleşen doğrulamak için bir hash hesaplar. Daha sonra da bekleyen sorgu listesinde yer alan tuz değeri hala geçerli olduğunu doğrular. Bu iki koşul doğruysa, bu yüksek skor tablosu yüksek puanı yazar ve müşteriye imzalı "başarılı" iletisi verir. Ayrıca bekleyen sorgu listeden tuz değerini kaldırır.

Please keep in mind that the security of any of the above techniques is compromised if the shared secret is ever accessible to the user

Alternatif olarak, bu geri ve ileri-bazı HTTPS sunucusu ile iletişim kurmak için müşteri zorlayarak, ve müşteri yalnız erişimi olan özel bir sertifika otoritesi tarafından imzalanmış sadece sertifika güven önceden olduğu sigortalanması ile önlenebilecek .

Ben tpqf ne dedi gibi, ama onlar oturum zaman oldukça hile keşfetti zaman bir hesap devre dışı, bu yüzden, bir bal küpü uygulamak, onların kesmek puanları görmek ve bir troll olarak işaretlenmiş olduğunu şüpheli asla. "PhpBB MOD Troll" için google ve ustaca bir yaklaşım göreceksiniz.

Sadece skor değişkeni için bir bellek arama yapabilirsiniz bahseder tqbf kabul cevap olarak ("My skor yüzden bellekte 666 sayısına bakmak 666").

Bu etrafında bir yolu var. Ben burada bir sınıf vardır: http://divillysausages.com/blog/safenumber_and_safeint

Temelde, bir puan saklamak için bir nesne var. Ve gaz giderici size orijinal geri almak için rastgele Multiplikatör tarafından kaydedilen değeri bölmek - (+ ve) setter size rastgele bir sayı ile pass değerini çarpar. Çok basit, ama dur bellek arama yardımcı olur.

Ayrıca, hack mücadele farklı şekillerde bazıları hakkında konuşmak PushButton motorun arkasında adamlar bazı video check out: http://zaa.tv/2010/12/the-art-of-hacking-flash-games/. Onlar sınıfın arkasında ilham kaynağı olmuştur.

Bilinen bir (özel) geri dönüşümlü anahtarını kullanarak şifreleyerek basit yöntem olacaktır. Ben AS yüzden orada şifreleme sağlayıcılarının ne tür emin değilim tüm kadar değilim.

Ama (yine şifreli) oyun uzunluğu gibi değişkenler ve bir tıklama sayısını içerebilir.

Bu can ters mühendislik olmak gibi tüm işler bu kadar kokusuyla insanları atmak için önemsiz verilerin bir demet atma düşünün.

Edit: Bu da bazı PHP oturumlarda aynalı değer olabilir. Start oyun ve zaman log (bu mesaja yorum diyor gibi) tıkladığınızda oturumu başlatın. Onlar bir puan göndermeniz zaman aslında açık bir oyun var kontrol edebilir ve çok kısa sürede ya da çok büyük bir puan göndererek değil.

Bu değer maksimum skor oyun ikinci / dakikada ne olduğunu söylemek görmek için bir skalar çalışma dışarı olabilir.

Bunların hiçbiri uncircumventable ama öyle değil insanlar görebilirsiniz Flash bazı mantık var yardımcı olacak.

Benim durumumda, bu iyi bir toplumsal mühendislik problemi yerine bir programlama problemi olarak yaklaşılır. Aksine imkansız hile yapma odaklanmak yerine, dolandırıcı teşvikleri kaldırarak sıkıcı hale getirmeye odaklanıyoruz. Örneğin, ana teşvik kamuya sadece yüksek skorları anlamlı dolandırıcı için pozitif geri besleme döngüsüne kaldırarak hile azaltabilir gösterilir zaman bir gecikme koyarak görünür yüksek puanlar ise.

Sen "müşteri güven" sorunu denir bahsediyoruz. Istemci (bu nakit, bir tarayıcıda çalışan bir SWF) bunu yapmak için tasarlanmış bir şey yapıyor çünkü. Yüksek puanı kaydedin.

Sorun emin isteklerini bazı keyfi HTTP isteği flash filmin gelen, ve değil "tasarruf puan" emin olmak istiyor. Bunun için olası bir çözüm olduğunu yüksek puanı kazanmak için isteği eşlik etmelidir (flasm kullanarak) talebi zamanında SWF içine sunucu tarafından oluşturulan bir belirteç kodlamak için. Sunucu bu puanı kazandırır kez, belirteç süresi dolmuş ve artık istekleri için kullanılabilir.

Eğer yeni bir skor için tekrar oynayabilirsiniz önce SWF yeniden / yenilemek için onları zorlamak ettik - Bu olumsuz bir kullanıcı sadece flaş film yük başına bir yüksek puanı göndermek mümkün olacak olmasıdır.

Ben genellikle yüksek puanlar girişi ile oyun oturumu "hayalet veri" içerir. Ben bir yarış oyunu yapıyorum Yani, ben tekrar veri içerir. Sık sık tekrar işlevselliği veya (son yarışında karşı oynarken, ya da afiş dostum # 14 hayalet karşı oynarken) hayalet yarış işlevsellik için şimdiden tekrar veri var.

Bu denetleme çok el emeği, ama amaç bir yarışmada ilk 10 kayıtlar okunaklı olup olmadığını doğrulamak için ise, bu diğerleri zaten işaret etmiştir güvenlik önlemlerinin cephanelik için yararlı bir ek olabilir.

Amaç onlara bakmak zorunda olmadan herkes zamanın sonunda e kadar çevrimiçi highscores listesini tutmak için ise, bu kadar getirmek olmaz.

Yeni popüler arcade mod yapar o yolu geri php, sonra geri flaş, php flaş veri gönderir (veya yeniden yükler) olmasıdır. Bu size iyi Bypass sonrası veri / şifre çözme kesmek ve benzeri gibi verileri karşılaştırmak istediğiniz her şeyi yapmanızı sağlar. Bu yaptığı bir yolu rastgele değerler sonra kullanarak denetimi ile skoru eklemek için bir matematiksel formül kullanılarak, (kapmak veya gerçek zamanlı flaş veri kapmak çalışıyorsa bile göremiyorum) flash içine php 2 randomize değerler atayarak olduğunu nihayet sonunda php gittiğinde puan maçları görmek için bunu tersine çevirmek için aynı formülü. Aynı zamanda kez işlem gerçekleşiyor ve hile gibi bir kaç saniye daha başka ise o zaman da bayraklar onu olarak bu randomize değerleri veya çalıştırmak anlamaya çalışın gönderme durduruldu varsayar çünkü bu rasgele değerleri de görülebilir asla skor değeri ile karşılaştırmak mümkün rastgele değerler döndürmek için şifre bazı türü ile sayılar.

Bana sorarsanız, bu herkes bu yöntemi kullanarak herhangi bir sorunları görüyor, oldukça iyi bir çözüm gibi görünüyor? Veya çevresinde olası yolları?

Bu all game logic at server-side, aynı zamanda kullanıcı bilgisi olmadan içten bir puan saklayan tutarak mümkündür. Ekonomik ve bilimsel nedenlerle, insanlık dönüş tabanlı hariç tüm oyun türleri için bu teoriyi geçerli olamaz. Için, örneğin sunucu tarafında fizik tutma elin hızı gibi duyarlı olsun hesaplama pahalı ve zordur. Hatta mümkünse, satranç kimseyi oynarken rakibin AI satranç oyun maç. Bu nedenle, daha iyi bir multiplayer games, aynı zamanda isteğe bağlı yaratıcılık içermelidir.

Senin yüksek puanlar sistem Flash uygulama ağı üzerinden unencrpyted / imzasız puanlar veri gönderir gerçeğine dayanmaktadır zaman, bu ele alınabilir ve tekrarlanmış / manipüle. Encrypt'in (decently!) veya kriptografik işaret puanlar veri: cevabı izler. Bu, en azından, zor onlar SWF dosyasındaki gizli anahtar ayıklamak gerekir çünkü insanların yüksek puanlar sistemi çatlamak için yapar. Birçok kişi belki orada verecektir. Öte yandan, tüm bu alan anahtar ayıklamak ve bir yere göndermek için bir tek başına kişidir.

Ikincisi, bir puan biraz gerçekçi olduğunu doğrulamak böylece gerçek çözümler Flash uygulaması ve yüksek puanlar veritabanı arasında daha fazla iletişim içerir. Bu muhtemelen var oyunun ne tür bağlı olarak karmaşıktır.

İşte SWFs koda kolay olduğu gibi tamamen unhackable yapmak için bir yoldur, ve yetenekli bir geliştirici korsan sonra kodunu izlemek ve istihdam olabilecek herhangi bir şifreli sistemini pas nasıl işe yarayabilir.

Sadece olsa TamperData gibi basit araçların kullanımı yoluyla hile çocukları durdurmak istiyorsanız, o zaman başlangıçta SWF geçmek bir şifreleme anahtarı oluşturmak olabilir. Sonra PHP kodu geri geçirmeden önce http://code.google.com/p/as3crypto/ yüksek puanı şifrelemek için gibi bir şey kullanabilirsiniz. Sonra veritabanında saklamadan önce sunucu sonunda bunu şifresini.

Bu ne istediğinizi elde etmek gerçekten mümkün değil. <-> Flash uygulaması internals olursa olsun, web sitesi ve tarayıcınızı güvenli nasıl yani, CheatEngine gibi şeyler nasıl kullanılacağını bilmek, özellikle her zaman kısmen erişilebilir sunucu iletişimi vardır, yine olacak üstesinden gelmek için nispeten basit.

Ben basit yolu RegisterScore (skor) gibi bir işlev çağrı yapmak için oyun bir puan eklenecek kaydolan her zaman ve sonra kodlamak, paketle ve bir dizge olarak bir php komut dosyası göndermek düşünüyorum. Php script düzgün çözmek için nasıl bilemez. Bu, düz bir puan zorlamak için herhangi bir denemeden bir dekompresyon hatası neden olduğu gibi php komut dosyası için herhangi bir çağrı durdurmak olacaktır.

Herhangi bir veri istemci döner güvenemeyiz. Doğrulama sunucu tarafında yapılması gerekmektedir. Ben bir oyun geliştiricisi değilim, ama iş yazılımı yapmak. Her iki durumda da para söz konusu olabilir ve insanlar istemci tarafı kandırma teknikleri kıracak.

Belki aralıklarla sunucuya geri veri göndermek ve bazı doğrulama yapmak. Lütfen uygulamamızla yaşıyor nerede olduğunu bile bile, istemci kodu odaklanmak etmeyin.

Ben Geçici tür yapılmış ... Ben vardı puanları (her zaman 1 puan almak) artırılır nereye verdi. Öncelikle, ben (en 14 diyelim) rastgele num saymak başladı ve ben puanları gösterir zaman, sadece bu kraker 20 örneğin arıyorsanız, onlar (o bulamazlar öyle oldu. Puanları VAR eksi 14 kanıtladı ) hafızaya 34 olacaktır. Ben sonraki nokta ne olması gerektiğini biliyorum çünkü İkincisi, ... ben karma oluşturmak için, adobe kripto kütüphanesi kullanılan ne sonraki nokta should be. Ben puanları artırmak zorunda artırılır puanları karma olmalıdır karma eşitse, ben kontrol edin. Kraker belleğinde noktaları değişti varsa, sağlamalarının eşit değildir. Bazı sunucu tarafı doğrulama gerçekleştirmek ve ben oyundan ve PHP farklı noktaları var, ben hile dahil olduğunu biliyoruz. İşte pasajı benim kod ot (I) Adobe Kripto libraty MD5 sınıfını kullanarak ve rastgele kriptografi tuz. CallPhp (ediyorum benim sunucu tarafı doğrulama olduğunu)

private function addPoint(event:Event = null):void{
            trace("expectedHash: " + expectedHash + "  || new hash: " + MD5.hash( Number(SCORES + POINT).toString() + expectedHashSalt) );
            if(expectedHash == MD5.hash( Number(SCORES + POINT).toString() + expectedHashSalt)){
                SCORES +=POINT;
                callPhp();
                expectedHash = MD5.hash( Number(SCORES + POINT).toString() + expectedHashSalt);
            } else {
                //trace("cheat engine usage");
            }
        }

Bu teknik + SWF obfustication kullanarak, kraker durdurmak mümkün oldu. Ben sunucu tarafındaki puanları yolluyorum Ayrıca, ne zaman, benim kendi küçük, şifreleme / şifre çözme işlevini kullanın. Böyle bir şey (sunucu tarafı kodu dahil değil, ancak algoritma görmek ve PHP yazabilirsiniz):

package  {

    import bassta.utils.Hash;

    public class ScoresEncoder {

        private static var ranChars:Array;
        private static var charsTable:Hash;

        public function ScoresEncoder() {

        }

        public static function init():void{

            ranChars = String("qwertyuiopasdfghjklzxcvbnm").split("")

            charsTable = new Hash({
                "0": "x",
                "1": "f",
                "2": "q",
                "3": "z",
                "4": "a",
                "5": "o",
                "6": "n",
                "7": "p",
                "8": "w",
                "9": "y"

            });

        }

        public static function encodeScore(_s:Number):String{

            var _fin:String = "";

            var scores:String = addLeadingZeros(_s);
            for(var i:uint = 0; i< scores.length; i++){
                //trace( scores.charAt(i) + " - > " + charsTable[ scores.charAt(i) ] );
                _fin += charsTable[ scores.charAt(i) ];
            }

            return _fin;

        }

        public static function decodeScore(_s:String):String{

            var _fin:String = "";

            var decoded:String = _s;

            for(var i:uint = 0; i< decoded.length; i++){
                //trace( decoded.charAt(i) + " - > "  + charsTable.getKey( decoded.charAt(i) ) );
                _fin += charsTable.getKey( decoded.charAt(i) );
            }

            return _fin;

        }

        public static function encodeScoreRand(_s:Number):String{
            var _fin:String = "";

            _fin += generateRandomChars(10) + encodeScore(_s) + generateRandomChars(3)

            return _fin;
        }

        public static function decodeScoreRand(_s:String):Number{

            var decodedString:String = _s;
            var decoded:Number;

            decodedString = decodedString.substring(10,13);         
            decodedString = decodeScore(decodedString);

            decoded = Number(decodedString);

            return decoded;
        }

        public static function generateRandomChars(_length:Number):String{

            var newRandChars:String = "";

            for(var i:uint = 0; i< _length; i++){
                newRandChars+= ranChars[ Math.ceil( Math.random()*ranChars.length-1 )];
            }

            return newRandChars;
        }

        private static function addLeadingZeros(_s:Number):String{

            var _fin:String;

            if(_s < 10 ){
                 _fin = "00" + _s.toString();
            }

            if(_s >= 10 && _s < 99 ) {
                 _fin = "0" + _s.toString();
            }

            if(_s >= 100 ) {
                _fin = _s.toString();
            }           

            return _fin;
        }


    }//end
}

Sonra diğer sahte-değişkenler ile arasında değişken göndermek ve sadece en yolu arasında kaybolmuş olsun ... Bu sadece küçük bir flash oyun için bir sürü iş olduğunu, ama ödüller bazı insanlar sadece açgözlü almak söz nerede. Eğer yardıma ihtiyacınız varsa, bir PM bana yazın.

Alkış, Ico