2010-09-05 21 views
1

J'ai écrit un programme pour un client. J'ai implémenté une méthode de licence pour lui (fichiers XML signés). Ce client veut que l'application soit installée une seule fois sur le PC de son client, et veut que je "sécurise" ceci ... surtout parce que ses licences sont limitées dans le temps. Ces PC n'ont pas d'accès Internet. Je lui ai dit que c'est absolument stupide et qu'il n'est pas capable de sécuriser ce genre de choses (VM par exemple), mais il veut au moins un peu de "sécurité". Maintenant, je cherche une bonne place sur une machine Windows qui est inscriptible par tous les utilisateurs (sans UAC), où je peux stocker des données "secrètes" (par exemple la dernière fois utilisé) de sorte que l'utilisateur ne peut pas simplement tourner temps passé sur le PC. Il ne devrait pas non plus être capable de supprimer le dossier de l'application, de régler l'heure, de réinstaller et d'utiliser le programme, et il ne devrait pas être en mesure de le faire en supprimant l'utilisateur réel et en utilisant le logiciel .meilleur endroit pour le fichier "sécurisé" sur Windows

Je sais que c'est quelque chose de vraiment vraiment stupide, mais insiste sur mon client alors ...

J'ai essayé de trouver certains endroits, mais sans succès jusqu'à présent.

Est-ce que quelqu'un connaît un répertoire qui répond à ces exigences?

+4

le feu à votre client. – NullUserException

Répondre

1

Ok. Je pris un peu de suggestions :) everyones Je mets le fichier unter {} {sys My-GUID} \ et d'accorder ce répertoire à plein autorisations pour tout le monde dans ma configuration (InnoSetup)

pense que cela devrait être. .. ok ... en quelque sorte :)

Et @ NullUserException: Il paie ma voiture ... je ne peux pas le feu :)

Merci pour vos réponses

2

Je suis à peu près sûr que process monitor détruirait cela quel que soit le répertoire que vous choisissez, donc utilisez simplement un répertoire de données d'application normal. Il n'y a pas de répertoire magique qui vous aidera d'une manière ou d'une autre à cacher le fait que vous lisez/écrivez pendant la vérification de la licence, et tant que vous avez dit au client que ce n'est pas sécurisé, je ne dépenserais pas beaucoup de temps dessus

+0

Je lui ai dit, soyez surs :) Mais il veut ça. Au moins un répertoire qui n'est pas lié à l'utilisateur. Je vais utiliser C: \ Users \ Public alors ... même si je dois vérifier si cela est présent sur WinXP –

3

Peut-être que le registre serait mieux? Ya, c'est vraiment une exigence terrible. Peut-être que vous pourriez encoder la date d'installation dans le fichier XML dans le cadre du processus d'installation, l'obscurcir peut-être peut-être.

+0

Cela échouera aussi avec n'importe quel type de surveillance, mais sinon vous pouvez créer une clé à un endroit non évident, utiliser un GUID pour le nom etc –

1

Dans le passé, quand j'avais des exigences ineptes similaires, j'ai utilisé le registre. Voici ce que je fais:

  1. Dans une ressource intégrée, donner au programme la partie publique d'une clé asymétrique
  2. Lors de l'exécution, vérifiez quelques entrées de registre (détaillé plus loin). C'est la première course, donc ils vont être absents
  3. Envoyer à un serveur de licences central les numéros de série de CPU (et éventuellement numéro de série)
  4. Server vérifie que la CPU/série n'a pas été vu auparavant, génère une date/heure d'expiration. Si ils ont, tire l'ancienne date d'expiration date/heure. Si la date d'expiration/temps passé, ne retourne rien, sinon retours ancienne date/heure
  5. serveur envoie au client le temps de la date d'expiration et toutes les informations (d'expiration, CPU, série) signé avec la clé privée
  6. client stocke la date/heure d'expiration et les données signées dans le registre
  7. des exécutions suivantes, le client prend toutes les informations et compare à la signature.Si la signature est invalide, le registre informations sont supprimées

Alors maintenant, si l'utilisateur exécute le programme après la fenêtre, les informations sont supprimées, le serveur refuse de re-auth. S'ils essayent de copier vers une nouvelle machine avec des informations de registre, la vérification de signature échoue. S'ils s'installent sur une nouvelle machine, la ré-authentification échoue (en raison de différentes séries de CPU). La seule chose que vous ne pouvez pas vraiment couvrir est de toujours ajuster l'heure, même si vous pouvez facilement trouver le temps avec un chèque NIST. Le problème est que cela dépend d'Internet et que vous avez besoin d'un serveur de licences.