2009-07-01 7 views
2

J'ai un programme, et dans ce programme il y a quelques variables (nom d'utilisateur et "niveau de privilège") qui ne sont changées que lorsque l'utilisateur se connecte. Existe-t-il un moyen de "sécuriser" ces variables à partir de l'édition de la mémoire, etc. pendant que le programme s'exécute, mais le programme peut toujours les changer si l'utilisateur se connecte avec un autre nom d'utilisateur.const/readonly vs. programmes comme Cheat Engine

Je pensais que cela fonctionnerait (ne l'ai pas testé) pour utiliser const ou readonly, mais est-il encore possible de les changer quand l'utilisateur reloge?

De même, est-il possible de hacher/chiffrer des chaînes utilisées dans le programme, de sorte que l'utilisateur ne puisse pas les trouver en cherchant dans la mémoire (c'est-à-dire en utilisant Cheat Engine)?

+3

Il n'y a rien qu'un programme peut faire que l'utilisateur qui l'exécute ne peut pas faire. Si vous pouvez écrire et exécuter un programme qui modifie une variable, il est clair qu'un utilisateur peut changer la variable; Votre programme ne peut faire que ce que l'utilisateur peut faire. –

Répondre

6

Si le logiciel et les informations d'identification de l'utilisateur s'exécutent sur la machine de l'utilisateur, il est impossible d'empêcher l'utilisateur de modifier les valeurs.

Si les informations d'identification et l'accès sont stockés sur un serveur distant, vous pouvez utiliser ce serveur et demander à l'utilisateur de stocker uniquement un jeton haché expirant après une période arbitraire. Utilisez ce jeton en tant que recherche pour récupérer les informations de profil de l'utilisateur à partir du serveur.

Vous rencontrerez toujours des problèmes car tout ce qui est fait côté client peut être manipulé/piraté. Si vous gardez toute votre logique sur un serveur central, vous pouvez être plus confiant que les choses ne seront pas fissurées, mais les performances de votre système en souffriront.

Vous devez peser le pour et le contre d'un serveur central pour la sécurité et la performance et choisir la balance qui vous convient le mieux. Rappelez-vous que les programmes s'exécutent au nom de l'utilisateur.

0

Il y a aucun moyen fiable que vous pourriez que. En chiffrant le contenu, vous pouvez le rendre plus difficile mais jamais impossible. Dans le pire des cas, l'utilisateur peut attacher un débogueur et modifier directement la mémoire.

2

Vous ne pouvez pas modifier une variable const (ever) ou readonly (après l'initialisation), cela ne fonctionnera donc pas.

La meilleure option serait probablement d'enrouler la logique qui crée/initialise/définit ces variables dans une méthode propre et/ou une propriété qui est définie pendant le processus d'ouverture de session. Cela permettra d'isoler ce code, il est donc au moins facile à suivre. En ce qui concerne le cryptage des chaînes, vous pouvez utiliser SecureString pour gérer ce but lors de l'exécution. Au moment de la compilation, vous pouvez obscurcir votre code (de nombreux obfuscateurs supportent le cryptage des chaînes).