9
votes

Fournir de manière sécurisée un code secret unique au gagnant du jeu flash?

Voici ce que je veux faire: quand un joueur gagne un jeu (codé dans Flash / ActionScript), ils reçoivent une clé secrète personnalisée, qu'ils peuvent envoyer un courrier électronique à moi en échange d'un prix. Je peux ensuite valider la clé à ma fin à l'aide d'un algorithme privé.

J'ai besoin de le concevoir de manière à ce qu'il soit pratiquement impossible pour les pirates informatiques de générer une clé de prix valide sans gagner le match. Est-ce même possible?

Je suppose que tout fichier SWF est essentiellement vulnérable à la décompilation, mais je ne sais pas exactement à quel point ils sont vulnérables. Peut-être qu'un algorithme de génération d'une clé valide sera accessible aux pirates informatiques?

J'ai à ma disposition toutes les méthodes d'ActionScript 3, ainsi qu'un serveur PHP / MySQL, et je contrôle le serveur où le jeu sera hébergé.


5 commentaires

À tout le moins, conservez votre serveur de la génération de clé à PHP!


Pourquoi ne pas simplement demander les informations de l'utilisateur immédiatement lorsqu'ils gagnent et traitent leur prix tout de suite?


@espais, je peux faire cela, mais comment puis-je les empêcher de demander la clé sans gagner le jeu, en demandant directement au fichier PHP?


@Matt, cela pourrait être un prix réel avec une valeur tangible. Qu'est-ce qui empêcherait les pirates d'utiliser un script pour soumettre une fausse réclamation de prix?


Eh bien, vous supposez qu'ils ne peuvent pas pirater votre jeu pour commencer avec. Je voulais dire que au lieu d'avoir le processus «Gagnant Obtenir le prix» à l'extérieur du jeu, faites-le faire, car le jeu est gagné, car à cette époque, vous savez que le jeu a été réellement gagné, et la personne qui gagnait est toujours à l'écran. .


5 Réponses :


2
votes

Disclaimer: je ne travaille pas avec Flash.

Lorsque vous démarrez le jeu, j'obtiendrais un jeton unique du serveur. Après avoir gagné le jeu, je générerais un code à l'aide de ce jeton unique et d'afficher cela à l'utilisateur. Ensuite, vous pouvez valider le code unique contre les jetons du serveur.

Une autre chose que vous puissiez faire est de «construire» progressivement le code unique lorsqu'ils jouent au jeu. S'ils ne le jouent pas à travers ils auront au moins la rétroaction à travers tout le jeu pour générer un code.

Je dirais que la plupart des jeux sont vulnérables sous une forme de décompilation, l'objectif est de minimiser la perte. Si vous donnez des prix de grande valeur, alors bien sûr, vous serez ciblé par des personnes sans scrupules.


0 commentaires

2
votes

garde le côté serveur de la génération de clé. Même si c'est un simple hachage de MD5, il est essentiel de garder les détails de la génération exacts. Ajoutez quelques caractères aléatoires à n'importe quel hachage que vous produisez, il ne ressemblera donc pas à un hachage MD5 ou SHA1.

Bien sûr, le problème se transforme en "Comment savoir que l'utilisateur a vraiment gagné le jeu"? Décompiler Le .swf permettrait à un utilisateur déterminé de déterminer que vous envoyez "won = 1" et boom, vous obtenez un code de clé gagnant de retour, à quel point le jeu est terminé, pour ainsi dire.

Pour vous donner une idée de la dureté de cela peut être:

Il y a des années, il y avait un site qui offrait des jeux Flash Dinky que vous jouez et gagne des points que vous pourriez échanger des prix. C'était horriblement bâclé dans son codage, au point où vous deviez remettre en question la santé mentale des opérateurs du site. Quelques défauts majeurs:

1) Il y avait une enquête quotidienne. Une seule question avec quelques choix. Ils ont mis la valeur de la question de la question dans le formulaire d'enquête comme valeur cachée. Il a été soumis via GET. Vous pouvez construire manuellement la réponse et donner des points max_int une fois par jour, juste en faisant "Response.php? OurledID = xxx & chinéid = yyy & points = 4294967295" Dans la barre d'adresse

2) Ils s'accordèrent à cela relativement rapidement et corrigé le trou des points, mais pour une raison quelconque supprimé la limite quotidienne, vous pouvez donc soumettre votre réponse autant de fois que vous le souhaitez (disons) 20 points une pop.

3) Après avoir réparé cela, les gens passèrent à pirater les jeux - jouer au jeu et gagnant autour de vous donneraient (disons) 100 points. Ici, ils étaient un peu plus intelligents au lancement et n'étaient pas rond-dessus la valeur du point via le client. Mais ils ont oublié de valider le nombre de fois joué, qui a été conservé sur le client - afin que vous puissiez réclamer 100 points autant de fois que vous pourriez tirer un message sur leur serveur

4) Après avoir fixé cela et déplacer les "Times joués" comptez sur le serveur, les gens ont juste gardé leurs robots soumis à la limite particulière des jeux, mais ont soumis des réclamations de fausse pour chaque jeu sur le site

5) Après avoir commencé à mettre des points de contrôle dans le jeu (par exemple, "Tell Server Level 1 Terminé" "," ", ils viennent de terminer le niveau 2" etc ...) ont simplement ajouté les messages CheckPonit à leur point de vol de points. < / p>

Et ainsi de suite sur la route ...

Si vous allez commencer à faire des réclamations de prix avec des prix de toute sorte de valeur, soyez conscient que vous aurez probablement beaucoup de tentatives de sucer votre budget au-delà de l'os sèche dans un court ordre.


0 commentaires

4
votes

Ce que vous voulez vraiment faire est de déterminer en toute sécurité le gagnant du jeu.

C'est difficile, mais, selon le jeu, vous pouvez essayer de:

  • Validez continuellement l'état du jeu avec le serveur (portes ouvertes, pièces saisies, coordonnées sur la carte, etc.), notamment en ce qui concerne le calendrier (combien de temps faut-il pour se déplacer entre les coordonnées); / p>

  • Déterminez si le jeu sera gagné ou perdu à l'avance (par exemple, cartes à gratter );

  • Demandez aux questions du gagnant sur le jeu ("de quelle couleur était la vache?").


1 commentaires

+1 pour demander au gagnant une question et valider l'état de jeu.



1
votes

Tout d'abord, ne donnez pas à l'utilisateur un code "secret" pour valider.

Lors de la livraison de la page au client Créez un code "secret". Probablement un GUID codé de base64 fonctionnerait. Enregistrez le GUID, lorsqu'il a été généré et l'empreinte digitale du navigateur dans votre base de données.

Une fois que le jeu est terminé, le script d'action obtient ses détails pour la livraison de prix. Postez ce dos à votre serveur avec le code. Enregistrez à nouveau la date d'achèvement et de l'empreinte digitale du navigateur.

Pour valider, vérifiez la quantité de temps passée entre la génération de GUID. Regardez également l'empreinte digitale du navigateur.

Les tricheurs se démarqueront de trois manières. Premièrement, le delta de date / heure sera extrêmement court. Vous devriez savoir combien de temps cela prend normalement pour jouer. Deuxièmement, vous pouvez voir une foule d'articles sur votre page avec des codes non valides. Troisièmement, l'empreinte digitale du navigateur pourrait même vous dire qui utilisait des outils automatisés.

mise à jour
Je voulais juste signaler quelques choses que vous voudrez inclure. Premièrement, @aaz a eu une bonne idée de poser une question au joueur sur le jeu au point où ils remplissent les informations gagnantes. Cela devrait être un élément randomisé. Probablement pas de couleur simplement en raison du nombre de personnes qui sont aveugles de couleur; Mais certainement quelque chose que vous pouvez contrôler et enregistrer le côté du serveur avant de livrer le script d'action. À tout le moins, cela nécessiterait un certain niveau d'intervention humaine lors de l'affichage des résultats.

Deuxièmement, @john Lewis a eu une bonne idée de l'enregistrer dans des actions de jeu et de soumettre ceux-ci. Peut-être que des coordonnées clics pourraient être enregistrées et immédiatement renvoyées sur le serveur et enregistrées avec un timbre de date / heure. Vous pouvez comparer ces coordonnées à travers plusieurs jeux pour rechercher des modèles. L'analyse intelligente sera importante.


0 commentaires

2
votes

La réponse courte est la suivante:

vous ne pouvez pas.

longue réponse:

Étant donné que l'un des bits d'informations que vous utilisez pour déterminer un gagnant est le jeu lui-même et car le jeu lui-même est compromis à partir du démarrage, vous ne pouvez pas déterminer si l'utilisateur a terminé le jeu si l'utilisateur a terminé le jeu. Le Flash / ActionScript détermine l'état Win. Même si le script demande au serveur des secrets le long du parcours de jeu pour déterminer l'état Win, vous pouvez toujours simuler cela et vous ne pouvez donc pas être sûr si votre serveur répond à une personne réelle à jouer ou à un script qui a été décompilé et quelqu'un jouer les réponses à la main.

Ce que vous pouvez faire:

rend plus difficile la simulation de réponses, le script vous donne-vous un déplacement complète en déplacez le journal de sortie pour analyser, utilisez un pavé unique dans chaque téléchargement du jeu pour valider que c'était le gagnant, gardez une minuterie en marche. Pour s'assurer que les joueurs ont pris à plein temps pour jouer au jeu ... Autres idées présentées dans ce fil sont également bonnes.

Désolé pour la mauvaise nouvelle.


0 commentaires