webForumDet fria alternativet

getTimer(), spel + fusk?

12 svar · 781 visningar · startad av UrMe

UrMeMedlem sedan apr. 2001762 inlägg
#1

Har gjort ett spel i Flash som använder getTimer, spelet går ut på att få den bästa tiden. Problemet är att folk får tider som är 3-4ggr snabbare än vad som egentligen är möjligt.

När spelet startas så körs en onEnterFrame funktion med getTimer etc och när de är klar så stoppas tiden.

Och jag vet inte hur de "fuskar" eller vad som sker, har läst om program som slöar ner allt etc, och detta funkar med getTimer? Men det är för stort procenttal för att alla de ska använda ett sådant program, så kan getTimer bugga på vissa operativsystem/webbläsare eller något? Blir lack när man lagt ner en hel del tid på det och sedan funkar det inte som det ska eller det fungerar men något verkar ju fel ändå eftersom vissa får så bra tider så det skriker fusk.

Här är en del kod just på getTimer grejen.

##startframen##
var startTime:Number;
_root.startTime = getTimer();
_root.timing = true;

_root.onEnterFrame = function() {
	if (timing) {
	elapsedTime = getTimer()-startTime;
}
}

##Slutframen##
_root.timing = false;

På slutframen visas även resultat och sedan kan användaren skicka in poängen.

greyhoundMedlem sedan maj 20031 472 inlägg
#2

Om du läser in tiden från systemet går det inte bara att ställa om klockan då?

UrMeMedlem sedan apr. 2001762 inlägg
#3

Nja du menar klockan i Windows? Har provat det, startade spelet och sedan ställde jag tillbaka klockan men fick rätt tid registrerad.

doridoriMedlem sedan juni 2006244 inlägg
#4

Lite svårt att hitta möjlighet till fusk när man inte riktigt förstår vad "fusk" innebär i just det här fallet.

Du kan inte länka till spelet så att man får lite större inblick?
Någon här kanske lyckas hitta fusket bara genom att spela?

PeddaMedlem sedan juni 20006 032 inlägg
#5

har du en länk till spelet så man kan kolla lite?
Finns ju program som inte påverkar frameraten men däremot getTimer(). Ska visst gå att lösa genom att använda ett Date objekt istället, men jag är inte så bra på flash så jag vet inte om det stämmer.

BlixtsystemsMedlem sedan maj 2005704 inlägg
#6

Vad är det för typ av spel?

Om det är baserat på kollisionsdetektion kan det vara möjligt att undvika den genom att högerklicka. Här ha du ett exempel på vad jag menar och förslag på en lösning:
http://www.emanueleferonato.com/2008/05/10/preventing-the-right-mouse-cheat-in-your-flash-games/

Annars kan det vara så att folk fuskar genom att skicka in modifierade resultat?
Kan de bädda in spelet själva på sin sida och manipulera variabler?

Om du vill ge en URL till spelet kan jag titta om jag kan hacka det och hur.

UrMeMedlem sedan apr. 2001762 inlägg
#7

Vill helst inte läcka tävlingen publikt om det går att fuska i den :) Har skickat ett PM till en av er som jag jättegärna får försöka att "hacka" tävlingen / tiden.

Jag har en ny version på gång dock som hämtar starttiden från servern och även sluttiden från servern så bör iaf det bekymret vara ur vägen. Men vet ju inte om det som strular eller inte.

Återkommer när / om problemet lyckas lösas. Kom gärna med fler förslag ändå även fast ni tyvärr inte kan få tillgång till tävlingen i nuläget.

UrMeMedlem sedan apr. 2001762 inlägg
#8

Japp Blixtsystems hittade ett hål direkt §jr

Har börjat koda om hur tiden räknas, så här gör jag nu:

Från flash kör jag detta:

server.load("time.php?id=1");

Detta sätter en session på servern som ger starttiden

Sedan när tävlingen är slut så kör jag:
server.load("time.php?id=2");

Där sätts en session som ger sluttiden, och samtidigt kalkylerar jag tiden och skickar tillbaka tiden till Flash enbart för att visa tiden i Flash. Tiden emellan sparas i en ny session som används när resultatet sparas. Istället för att skicka tiden från flash till php.

Men problemet blir ju att folk kan gå in på time.php?id=1 och sedan time.php?id=2 och sedan skicka resultatet och få en bra tid ändå.

Hur ska jag göra för att folk inte ska lyckas göra på detta sätt? Även fast tiden räknas på servern måste jag ju skicka någonting från flash som säger till att nu startar tävlingen och nu slutade den?

BlixtsystemsMedlem sedan maj 2005704 inlägg
#9

Egentligen behöver du inte det utan du kan räkna tiden från då första frågan skickades tills dess att sista svaret emottogs.
Då kan du hålla koll på att rätt antal svar skickats in i samma session och räkna tiden som har förflutit.

Nu är jag ingen mästerhackare, men jag tror att det borde vara rätt säkert förfarande.

UrMeMedlem sedan apr. 2001762 inlägg
#10

Mmm för er som inte vet var är det en frågesport, med 10 slumpmässiga frågor.

Tror jag har löst det iaf. När frågorna genereras så sätts starttiden i php och lagras i en $_SESSION. Skickar även med denna starttid in i Flash.
När alla frågor är svarade på så sparar jag en session i php med sluttiden, skickar även tillbaka detta värde in i Flash.

När sedan resultatet skickas in så kommer jag jämföra start/sluttid som skickas från Flash med de som finns i sessionerna på servern. Om de inte stämmer överens så sparas inte resultatet.

För att ytterliggare försvåra att fuska kommer jag "kryptera" start/sluttid som skickas från flash på någotvis innan datan skickas, och sedan jämföra detta krypterade resultat med samma kryptering på sessionerna för slut/starttid på servern.

På detta vis bör det aldrig gå att få manipulera med värdena eller något annat för att manuellt ändra resultatet som skickas.

Ska göra det klart imorgon och låta någon av er testa igen :)

UrMeMedlem sedan apr. 2001762 inlägg
#11

Har fixat till säkerhetsluckan som Blixtsystems hittade, eller har fixat den till 95%.. men folk får ändå helt orimliga tider :( Nästan så jag kontaktar de tävlande och frågar dem :p

UrMeMedlem sedan apr. 2001762 inlägg
#12

Om någon har lust att "hacka" tävlingen ligger den här nu:

http://www.urme.com/competitiontest/

Men ni måste säga hur och vad ni gjorde om ni lyckas :)

UrMeMedlem sedan apr. 2001762 inlägg
#13

Har fått en del tips i PM, men inget som har riktigt löst problemet.

Om någon av er är en dunder på flash, php, mysql och sådana här typer av problem så kan vi komma överens om en ersättning om ni hittar något fel. PM:a mig i såfall så får ni mitt telefonnummer. Ni får såklart även källkoden till flash/php och databasupplägget.

EDIT: Har uppdaterat funktionen hur tiden räknas och sparas.. hittade inget uppenbart fel men förbättrade den lite och hoppas detta ska lösa problemet.
Förmodligen inte :P men sparar även ip/operativ/webbläsare etc nu med så man kan se om det finns något samband.

138 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)