10
votes

Jeux flash hack, le score est 49700 ?? Comment améliorer la sécurité des jeux flash?

J'ai 2 jeux flash (écrit en AS3). La valeur hautescore étant piratée. La plage normale de chaque score de jeu n'est pas supérieure à 5000 (utilisateurs normaux n'aura que 2000 à 3000 points). Ma méthode actuelle d'anti-piratage est la suivante:

Après la fin du jeu, Flash utilisera les paramètres de poste Envoyer: Nom d'utilisateur = Mike & Score = 2000 & HASH = MD5 (secret. Nom d'utilisateur. Score). Dans la page PHP, j'ai fait le chèque, si le hachage! = MD5 (secret. Nom d'utilisateur. Score), il retournera une erreur et insérera des données dans la base de données.

Je crois que cette méthode ne suffit pas, ou mes jeux flash ne seraient pas piratés. Est-ce que je peux faire quelque chose pour améliorer ma sécurité de jeux flash / mon anti-piratage ??

Comment les hackers pirent-ils? Utilisation de logiciels tiers tels que Cheat Engine, Tamper Data (Firefox Ext), Tamperie, etc.

Pouvez-vous énumérer toutes les méthodes de piratage standard? (En connaissant les méthodes / problèmes de piratage, des moyens ont résolu 50% des problèmes, du moins que je sais où les problèmes sont et effectuent une certaine pré-prudence à cela)

Eh bien, mon titre a "49700" car les deux jeux HighScore sont 49700 (réellement une valeur de cette valeur de score insérée dans ma base de données, des différents utilisateurs pensaient), donc je crois qu'ils utilisent les mêmes méthodes

merci


7 commentaires

Générez-vous le "secret"? Comment faites-vous cela et combien de temps cela est-il?


Oui .. Le secret est une chaîne aléatoire, par exemple: mn! Fah5736Ghs ^ &


N'oubliez pas de rechercher des questions similaires avant de poser votre choix. Cochez cette case: Stackoverflow.com/questions/73947/... Il y a de très bonnes réponses là-bas.


Juste pour référence, j'ai écrit un programme qui pourrait jouer un jeu flash (Bejeweled Blitz) respectueux de toutes les règles, juste beaucoup plus vite qu'un joueur humain et obtenir des scores d'~ 1 m (le meilleur score humain que j'ai vu est 380k). Il y a très peu de choses que vous pourriez faire pour arrêter cela comme tout ce que j'ai fait était l'automatisation de la capture et de la souris.


@CJK: Vous devez être un piratage wiz: D


@cjk: Hey, pouvez-vous me dire comment vous avez fait la partie d'automatisation de la souris? c'est-à-dire qu'est-ce que vous avez utilisé, était-ce une greasemonkey, javascript ou comment ??


@Vishnu - C'était un programme C # à l'aide des API Win32 pour la souris.


9 Réponses :


2
votes

Vous essayez finalement de retarder le temps nécessaire pour que les gens puissent pirater votre système ou que cela ne vaut pas la peine. Vous pouvez essayer d'ajouter un sel au hasch pour un peu de complexité supplémentaire. Cela pourrait être envoyé comme une valeur au jeu flash (ajoutez-le sous forme de paramètre à l'objet Flash dans le code HTML) et inclure cela dans le code de vérification de hachage. Vous pouvez envoyer une sorte d'identifiant de session ou de numéro aléatoire afin qu'il soit toujours différent. Vous pouvez même générer deux hayes par différentes méthodes et les vérifier à la fois.

Bien sûr, ne négligez pas la possibilité que des personnes aient trouvé un moyen de pirater la fonctionnalité du jeu. Ou ce qu'ils sont vraiment de bons joueurs ...


0 commentaires

1
votes

Si je voulais pirater votre jeu, je pouvais décompiler votre jeu et découvrez le MD5 "Secret". Notez que je mets secrets dans les marques de devis, comme le fait qu'il soit fourni dans votre jeu flash binaire signifie qu'il n'est pas réellement secret.

Il n'est probablement pas possible de rendre vos scores maladables, tout ce que vous pouvez espérer faire est de le rendre plus difficile.


3 commentaires

Pourriez-vous s'il vous plaît dites-moi, quelles sont les façons de rendre plus difficile de pirater? =)


En fin de compte, cela n'aide pas l'intérêt. La question ici est de savoir comment le rendre plus sécurisé. Sécurisé ne signifie pas "parfaitement sûr". Si votre maison est sécurisée par un boulon mort, un système de sécurité et un chien, cela ne signifie pas que je ne peux pas casser votre fenêtre, tirer votre chien et voler votre téléviseur avant l'apparition des flics. Mais j'avais juste supposer que voler les voisins parce qu'ils laissent la porte ouverte. ;)


"Comment les hackers pira -nent-ils? Pouvez-vous répertorier toutes les méthodes de piratage standard?" J'ai répondu à certaines de ses questions. Votre commentaire se plaint de ce que je n'aide pas l'astucheuse ne l'aide pas ou non que vous ne répondez pas à aucune de ses questions ni de fournir d'autres informations sur ma réponse.



8
votes

Il n'est pas vraiment possible de sécuriser votre score Validation s'il s'exécute entièrement du côté du client. Vous devez faire au moins une partie de la part du serveur pour qu'il soit même sécurisé à distance. Je vois 2 façons de faire ceci:

  • Vous envoyez des mises à jour périodiques sur le serveur et sur le côté serveur, vous vérifiez que le score ne sautait pas «trop» (pour être défini dans le contexte de votre jeu). S'il "sauta", vous pouvez supposer en toute sécurité que le joueur piratage.

  • Vous envoyez la séquence de mouvement de jeu entière (ainsi que des apparences aléatoires ou des événements AI) sur le serveur avec le score à la fin et vérifiez que le score est réellement précis. Cela ne fonctionnera évidemment pas pour chaque match, mais pour certains jeux, cela peut fonctionner. Vous n'avez rien dit spécifique sur votre jeu, donc je laisserai cela ici.


6 commentaires

La première balle n'arrête pas un pirate informatique d'obtenir une partition supérieure. Votre deuxième balle est une idée fantastique!


Oui, mais ce n'est pas applicable à de nombreux jeux, notamment des tireurs ou de ces jeux numpeux où cela se produit trop. Cela pourrait fonctionner pour des trucs comme Tetris ou des jeux logiques en général.


Pourquoi ne serait-il pas applicable aux tireurs ou à des jeux numeux? Y a-t-il quelque chose que je ne suis pas au courant de cela ne le rend pas impraticable ou impossible de conserver un décompte d'événements qui provoquent une augmentation de score? Gardez une liste d'ennemis rebondés, vérifiez que la liste ne dépasse pas le nombre actuel présent dans le jeu? En fonction de la mécanique de jeu individuelle, toutes sortes de choses sont possibles. L'espace de possibilités dans les plateformeurs et les tireurs est plus limité que vous ne le pensez.


Mais il y a toujours un très grand nombre d'événements qui se produisent dans un tireur, en particulier un tireur à clé contrôlé. Vous devez non seulement télécharger chaque événement sur le serveur (ou vous perdrez la continuité) mais la maintenez-la aussi en mémoire.


Je pense que vous ne feriez que garder les événements qui affectent le score, qui dans le schéma des choses, ne serait plus que le nombre d'événements qui affectent le score dans un jeu à tour. Je veux dire, à moins que vous appliquiez un score à chaque pixel, votre personnage se déplace ou chaque touche enfoncée. En fait, j'estime que je voudrais estimer le nombre maximal de scores possibles d'augmentation des événements d'environ 467, mais la plupart du temps, il y aurait entre environ 30 et 40 ans. Bien sûr, je pourrais être désactivé d'un facteur de 10 ou 100. ~ 0,47 kb de données n'est pas si nombreux, si vous avez représenté chaque "événement" avec un octet.


Donc, ce que vous dites, c'est pour chaque «point de score» reçu, vous gardez la position et la direction de votre personnage et l'ennemi qu'il frappe? Pourrait travailler pour certains jeux, bien sûr.



-1
votes

Comme vous l'avez dit en fonction de ce qui est fait pour pirater cela, il existe différents trous à réparer. Comme vous envoyez les informations réelles dans votre message et que "Secret" est contenue dans le code, il devient une cible beaucoup plus facile. Certaines des choses que vous pouvez faire pour améliorer la sécurité

  • Utilisez une fonction de hachage différente, MD5 a connu des défauts qu'il est possible de créer des messages avec la même signature sans connaître le contenu, SHA1, SHA2 offre une sécurité plus élevée, cela empêchera une attaque à travers une faiblesse de MD5

  • rendez le "secret" unique à chaque message, c'est-à-dire. Envoyez-le du serveur pour chaque affichage, cela empêchera les personnes de réutiliser la même hausse encore et encore et rendront plus difficile à regarder le code et à créer le hachage

  • hachage le résultat plusieurs fois par ex. valeur = hachage (hachage (hachage (..., sel), sel), sel) Cela ne vous aidera pas si les gens décompilent votre programme, mais cela vous aidera s'il n'essaie que de recréer le hachage par lui-même.

  • Recherchez un logiciel pour protéger votre SWF contre la décompilation, je ne fais pas beaucoup de flash, je n'ai donc pas de liens fiables pour cela


0 commentaires

4
votes

De loin la méthode la plus simple et la plus difficile à vaincre en flash consiste à utiliser Cheatengine pour simplement rechercher l'emplacement de la mémoire qui stocke le score, puis modifier la valeur à ce que vous voulez. Tout le serveur-Soumettre hachage / salage / vérification dans le monde ne résoudra pas que parce que votre jeu pense qu'il est valide avant qu'il ne le presse dans une jolie Hash pour la soumission.

Vous pouvez faire des «chèques de santé de la santé de la santé» sur les scores s'ils tombent toujours dans des valeurs prédéfinies, mais même un pirate informatique déterminé pouvait simplement supprimer les valeurs maximales autorisées et soumettez toujours cette valeur.

Vous pouvez tenter d'obscurcer vos valeurs de score en mémoire pour les rendre plus difficiles à trouver avec Cheatengine, par exemple les stocker en tant que valeur multipliée, puis dans vos getters et vos configurateurs pour la valeur de score, incluez une multiplication / une division des valeurs. Pour obtenir / définir le score approprié pour vos vues et marquer des widgets de soumission. Même ce n'est qu'une tactique de stand cependant.

Sauf si des scores de faux vous coûtent de l'argent, vous ne vous inquiétez pas de perdre du temps sur les personnes de 0,01% des personnes qui trichent ou modèrent simplement vos tables de score manuellement.

La principale chose à considérer dans la prévention de la triche est la suivante: «Combien cela compte-t-il vraiment? Si vous utilisez une sorte de concurrence basée sur un score élevé avec un prix en espèces, c'est une priorité assez élevée. Si vous venez de me marier, une personne aléatoire est en train de gâcher votre table de scores élevée, cela ne vaut pas votre temps de les arrêter, ce qui vient de le vérifier une fois par semaine et de laisser tomber les mauvaises scores.


0 commentaires

1
votes

Le système cryptographique que vous utilisez est très similaire à un HMAC , mais votre implémentation est Moins sécurisé. L'algorithme MD5 est cassé, mais votre Mac est à l'abri de l'attaque de préfixe pour générer des collisions de hachage car le début de votre secret. L'attaquant doit pouvoir contrôler le mendiant de la chaîne afin de créer une collision de hachage.

TamperData est un outil de piratage très utile pour modifier / capturer / rejouer le trafic provenant du navigateur. Vous devriez donc empêcher les attaques de replay en authentifiant la date et l'heure actuelles: HMAC (secret, date_time.score.Asername).

Les pirates utilisent probablement un SWF Decompiler pour trouver la valeur de votre secret dans le fichier SWF. Afin de contrer cela, vous devriez essayer d'enterrer le secret à l'aide d'une obfuscation SWF telle que http://www.amayeta.com / .

Rien de tout cela est une "balle d'argent", cela rend tout simplement plus difficile pour le pirate informatique. Un pirate informatique sera toujours en mesure de modifier son score, car vous faites confiance au client pour vous dire le bon score. Même si vous avez effectué les modifications recommandées, vous seriez toujours en violation de CWE-602 .


0 commentaires

0
votes

ne serait-il pas simplement en cours d'exécution du jeu sur le côté serveur empêcher le piratage du score? Si le jeu est en cours d'exécution sous forme de jeu aléatoire, vous envoyez les valeurs aléatoires au navigateur de l'utilisateur, il n'y aurait pas beaucoup de sens dans leur tentative de tricher, même la compilation du fichier flash ne leur donnerait pas un avantage.


3 commentaires

Flash sur un navigateur Web est le côté du client.


@blesh: Le jeu logique serait du côté du serveur, et le résultat de cette logique serait envoyé au client, à afficher par l'application Flash.


@ Casey: Ce que vous suggérez est utilisé pour les jeux de poker / roulette en ligne, mais c'est bien plus difficile d'écrire ces roi des jeux et ne permet donc donc pas de développement rapide (mettra également une souche considérable sur le serveur, qui nourrit quelques-unes cent instances à l'utilisateur) ... mais il est déjà utilisé.



0
votes

Ce que je pensais, c'est que, puisque le jeu apparaît pour exiger une authentification, je suppose qu'il y a des appels qui nécessitent un nom d'utilisateur et d'autres informations.

Discuter de la question d'un autre développeur Thir conseil était d'utiliser des composants Ajax. Idk.

La plupart des pirates feront un moyen de contourner la plupart des problèmes de sécurité. Le meilleur moyen est de prévenir d'envoyer quelque chose de retour au serveur autre que ce qui est requis pour que le jeu fonctionne.

Quelqu'un a-t-il utilisé au hasard en fonction de la quantité de mémoire négative disponible? au lieu de chercher l'emplacement de mémoire spécifique avec ces logiciels.

Pourquoi ne pas envoyer de valeurs de plusieurs bygus à MEM et dérivez les résultats en fonction des emplacements de mémoire ouverts?

S'il vous plaît ne m'attaquez pas pour cette suggestion, je suis un apprenant comme la plupart des autres.


0 commentaires