De plus en plus de jeux empruntent la voie des données, ce qui signifie qu'il doit y avoir une couche de sécurité autour d'une manipulation facile. Je l'ai vu où les jeux regroupent complètement leurs actifs (audio, art, données) et je me demande comment ils gèrent cela? Y a-t-il des applications / bibliothèques qui regrouperont et vous aideront à gérer les actifs à l'intérieur? Sinon, y a-t-il de bonnes ressources que vous voudriez indiquer pour emballer / déballer / chiffrer?
Cette question spécifique tourne autour de C ++, mais je serais ouvert à entendre comment cela est également géré en C # / XNA.
Juste pour être clair - je ne suis pas là pour concevoir une solution pour empêcher le piratage. Au niveau fondamental, nous manipulons tous des 0 et des 1. Mais, nous voulons empêcher les 99% des personnes qui jouent au jeu de simplement modifier les fichiers XML utilisés pour construire le monde du jeu. J'ai vu de nombreux jeux regrouper toutes leurs ressources. Je suis simplement curieux de savoir quelles méthodes ils utilisent.
la source
Réponses:
Une bonne stratégie consiste à créer votre propre format d'archive à partir de zéro et à en faire un indexé avec une table pointant vers des blocs de données au lieu de stocker des fichiers séquentiels entiers dans votre archive, puis de crypter votre table d'index et de compresser chaque bloc séparément à l'aide de LZMA / Bzip2.
Une autre approche consiste à utiliser des bits de générateurs de données procédurales ici et là (si vous voulez aller aussi loin, vous pouvez même obtenir les `` paramètres '' desdits générateurs à partir d'un serveur en ligne comme mesure supplémentaire), et en déchargeant une partie du travail au GPU, vous pouvez également empêcher les vidages de mémoire complets et compenser une partie des performances perdues.
Pourtant, je trouve que ces techniques entravent généralement les performances et la perte de temps de développement, tout en n'offrant à l'utilisateur final que des problèmes potentiels et des bogues inutiles.
Néanmoins, rien n'est sûr à 100%.
la source
N'envoyez pas de données sensibles.
Il n'y a aucun moyen d'expédier des données cryptées afin que seul le jeu puisse y accéder. Vous pouvez essayer très fort, mais vous entrez rapidement dans les problèmes de DRM.
Si vous voulez garder vos actifs de jeu à l'abri des regards indiscrets.
xor
le fichiermy_level.zip.xor
, utilisermy_level.map
).Cela arrêtera 95% des utilisateurs espiègles. Les 5% restants vont l'obtenir, peu importe ce que vous faites.
Vous n'avez pas besoin de zip et de réellement
xor
. Vous pouvez plutôt utiliser lzma et utiliser AES avec une clé connue. Le point est de ne pas y consacrer beaucoup de temps.la source
That will stop 95% of mischeivieous users.
sortir de l'effraction, alors que je crois qu'il y a encore des gens qui l'obtiendront, j'apprécierais sinon tous et chacun en est capable. De nos jours, la plupart des enfants de 10 ans savent ouvrir des fichiers dans le bloc-notes et le renommer ...Passer beaucoup de temps là-dessus est probablement stupide. Il existe des outils pour saisir les données de texture et de modèle directement à partir du GPU, et les sons peuvent facilement être dirigés vers un périphérique de bouclage virtuel. Tout ce qui doit être vraiment sécurisé doit vivre sur un serveur et fonctionner uniquement via un défi / réponse. La validation des données client est une autre histoire, quelque chose de plus semblable à -verify_all de Valve. C'est toujours difficile, car vous ne pouvez pas faire confiance à l'exécutable local pour l'appliquer (ou du moins vous ne pouvez pas lui faire plus confiance que vous faites confiance à votre système anti-triche de point final, ce qui est également une idée stupide).
la source
Mon travail est dans un logiciel anti-sabotage. Je connais quelqu'un qui est un cracker de jeu de la vieille école. Il craque les jeux comme la respiration. Vous ne pouvez pas arrêter des gens comme lui. Si votre jeu est assez populaire, plusieurs versions crackées de votre jeu arriveront sur les sites torrent quelques jours seulement après sa sortie, peu importe ce que vous faites. Mon conseil est de faire le strict minimum pour éloigner le joe moyen qui pense qu'il pourrait vouloir donner un coup de poignard à ce truc d'ingénierie inverse.
la source
Bonne question mais c'est loin d'être facile à répondre.
D'après mon expérience avec la sécurité des données, vous devez penser aux points suivants:
1) Que sécurisez-vous, de qui et quel est l'impact si ces données ne sont pas sécurisées - la sécurité est bien plus une question d'évaluation des risques que de solutions techniques systématiques
2) Je suppose que votre plate-forme est de bureau (par exemple Windows / OSX) dans ce cas, vous avez un espace de problème différent de celui du matériel propriétaire tel que PS3 / Xenon qui ont leurs propres tentatives de sécurité au niveau du noyau (si c'est une solution valide est ouvert au débat)
3) Cryptage! = sécurité. Le chiffrement garantit uniquement que vos données ne peuvent pas être lues , il ne garantit pas que vos données ne peuvent pas être écrites ou relues / transmises par proxy.
Si vos exigences sont de rendre vos données inviolables, vous devez penser à hacher vos données (de préférence avec SHA-256 ou SHA-512) .Pour réitérer cependant, réfléchissez à la raison pour laquelle c'est important et à ce que vous gagnez en ajoutant de la sécurité à votre système.
Il convient également de savoir que l'ajout d'une technologie de cryptage à votre produit peut avoir des implications juridiques en raison des restrictions à l'exportation (la technologie de cryptage est classée comme une technologie de qualité militaire restreinte, croyez-le ou non), il est donc conseillé d'utiliser des bibliothèques qui ont surmonté ces problèmes juridiques.
Enfin - ne lancez jamais votre propre technologie de chiffrement - utilisez des algorithmes bien connus, documentés et recherchés tels que AES, Blowfish, RSA, etc.
ps La clé publique / privée n'est pas appropriée ou pratique pour chiffrer de grandes quantités de données, donc DRM / PGP, etc. utilisez un système symétrique hybride RSA + , c'est-à-dire sécurisez la clé symétrique avec RSA, puis effectuez un chiffrement symétrique standard en utilisant cette clé.
C'est un très grand sujet complexe et je ne lui ai certainement pas rendu justice
J'espère que cela pourra aider
la source
Si vous voulez un exemple d'un format qui a été conçu et construit (probablement sur-conçu) pour être petit (compressible), ridiculement sécurisé et flexible, vous devriez vous tourner vers le format MPQ de Blizzard.
http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format
La disposition générale des archives est la suivante:
Fichier d'en-tête d'archives Données de fichier Données - Fichiers spéciaux Tableau de hachage Tableau de blocs Tableau de blocs étendu Signature numérique forte
Ce format a TOUT. Table de blocs, table de blocs étendue, données divisées en secteurs (pour une diffusion facile), prise en charge de 7 (!) Algorithmes de compression (si vous comptez la compression du son) qui peuvent être combinés arbitrairement, signature numérique faible, signature numérique forte, etc.
Si vous achetiez l'API de Blizzard qui traite de l'architecture de fichiers, vous obtiendriez tout ce dont vous auriez besoin et bien plus encore.
la source
Comme cela a récemment été ressuscité, votre question (et donc toutes les réponses jusqu'à présent) ne semble concerner que le chargement du fichier, qui n'est aussi sécurisé que l'exécutable qui veut le charger. Sur le PC, il n'y a rien de vraiment sécurisé (vous retardez simplement les gens), vous pouvez vérifier les choses sur les serveurs, mais même cette vérification peut être supprimée afin que les exes modifiés puissent être exécutés quoi qu'il arrive. Les consoles sont toujours "assez" sécurisées, donc dans la plupart des cas, je génère un hachage de fichiers importants, puis signe le hachage avec une clé privée, incorpore la clé publique dans le code et vérifie le hachage sécurisé par rapport au fichier.
Je pensais que je lancerais une autre attaque dans la conversation, quelque chose que je n'ai rencontré que l'année dernière car je n'ai pas tendance à expédier beaucoup sur le PC. Cheat Engine est un petit programme très bien rangé qui automatise presque tous vos propres hacks (ce qui signifie que n'importe qui peut l'utiliser). Il est assez avancé dans ce qu'il peut faire, beaucoup de hacks / cheats que j'ai vus que les gens vendent sont faits par ceci ou quelque chose de très similaire à ce que j'ai vu (tous ceux du marché de masse). Avec un peu de travail, vous pouvez vous protéger contre des choses comme ça, je suppose que tout dépend de la popularité du jeu et si quelqu'un se soucie suffisamment de vous déranger.
Opps, oublié de mentionner une bonne lib pour le chiffrement (en C ++) est LibTomCrypt .
la source