Protéger un fichier

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Je trouve la méthode de nico assez lourde alors que tu pourrais tres bien transformer ton code en tant que service par exemple.
Il y a ce qu'il faut sur le forum anglais pour transformer son code en tant que service.
Tu peux aussi lancer ton programme en mode silencieux (aucune fenetre).
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Jette un oeil dans ma lib, il y a des fonctions nommées Flag qui servent à stocker des préférences dans le registre très simplement

tu n'aura donc plus de pb d'effacement de fichier

http://www.penguinbyte.com/apps/pbwebst ... Droopy.exe
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

:D , Je viens juste de télécharger la 1.21 sur "Annonces"
Je vais donc aller de ce pas voir ces fonctions, sachant que je suis encore timide avec la BR... Merci.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Je viens de modifier mon exemple précédent pour y adjoindre la création d'une clé de registre en utilisant la Lib DROOPY (pour ceux qui voudraient tester)

Voici l'exemple que je trouve concluant

Code : Tout sélectionner

Enumeration 
  #win_0 
  #btn_create
  #btn_RegKey
EndEnumeration 

Procedure.s ApplicationDir() 
  appdir$ = Space(255) 
  GetCurrentDirectory_(255, @appdir$) 
  If Right(appdir$, 1) <> "\" ; si l'adresse ne finit pas par "\" 
    appdir$ = appdir$ + "\" ; on rajoute le "\" 
  EndIf 
  ProcedureReturn appdir$ 
EndProcedure 

Global USERPASS$, DateCreated$, AppliDir$
DateCreated$ = "19/05/05"
AppliDir$ = ApplicationDir()

Procedure Protect_INI()
  If OpenPreferences("Protect.ini")=0
    USERPASS$ = InputRequester("CHOIX D'UN MOT DE PASSE","Vous devez choisir un mot de passe :","")
  EndIf 
  If USERPASS$ > ""
    a$ = "Vous avez choisi le mot de passe suivant : " + Chr(10)
    a$ + USERPASS$
    
    If CreatePreferences("Protect.ini")
      WritePreferenceString("USERPASS",USERPASS$)
      WritePreferenceString("DATE",DateCreated$)
      ClosePreferences()
    EndIf 
    buffer.s = Space(#MAX_PATH)
    buffer.s = AppliDir$+"Protect.ini"; créé dans répertoire courant 
    SetFileAttributes_(@buffer.s,#FILE_ATTRIBUTE_READONLY)
    
    If RegCreateKeyValue("HKEY_LOCAL_MACHINE\SOFTWARE\Test\SubKeyAuto","USERPASS",USERPASS$,#REG_SZ,".")=0
      MessageRequester("ERREUR","La clé n'a pu être créée")
    Else 
      MessageRequester("REUSSI","La clé a été créée")
    EndIf 
    
  Else  
    a$ = "Vous n'avez choisi aucun mot de passe !"+Chr(13)+"Vous ne pouvez continuer."
    MessageRequester("Information",a$,64)
    End 
  EndIf
  MessageRequester("Information",a$,64)  
EndProcedure  
 
Procedure fenetre()
  If OpenPreferences("Protect.ini")<>0
    USERPASS$ = ReadPreferenceString ("USERPASS", "")
    DateCreated$ = ReadPreferenceString ("DATE", "")
  Else 
    Protect_INI()
  EndIf 
  ClosePreferences()
  
  If RegValueExists("HKEY_LOCAL_MACHINE\SOFTWARE\Test\SubKeyAuto","USERPASS",".")=0
    MessageRequester("ERREUR","Un élément est défaillant ou manquant"+Chr(13)+"Le programme est corrompu et va se fermer !")
    End 
  EndIf 
  
If OpenWindow(#win_0,0,0,200,100, #PB_Window_SystemMenu| #PB_Window_ScreenCentered |#PB_Window_TitleBar, "Test Protect ini") And CreateGadgetList(WindowID(#win_0))
  ButtonGadget(#btn_create, 50, 30, 100, 20, "Creer ini et RegKey")
  ButtonGadget(#btn_RegKey, 50, 60, 100, 20,"Voir RegKey")
EndIf 
EndProcedure 

fenetre()
Repeat  
  EventID = WaitWindowEvent() 
  Select EventID 
    Case #PB_EventGadget 
      Select EventGadgetID()
        
        Case #btn_create : Protect_INI()
          
        Case #btn_RegKey 
          If RegValueExists("HKEY_LOCAL_MACHINE\SOFTWARE\Test\SubKeyAuto","USERPASS",".")<>0
            MessageRequester("Key Value","La valeur de votre clé est : "+Chr(13)+USERPASS$)
          Else 
            MessageRequester("Erreur","Aucune clé ni de valeur associée n'a été trouvée")
          EndIf 
          
          
      EndSelect
      
    Case #PB_Event_CloseWindow : Quitter = 1
      
  EndSelect 
  
Until Quitter
End
@Droopy , Une chose, pour récupérer la valeur de la clé (ici USERPASS$) la fonction RegValueExists() ne le permet pas, elle récupère seulement le nom de la valeur. Peut-on la récupérer autrement ?
Et dans le cas présent, quel type est le plus adapté ? #REG_SZ or #REG_DWORD ?
Dernière modification par Jacobus le sam. 21/mai/2005 17:27, modifié 1 fois.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Pour ton test les fonctions Flag seraient plus appropriées

1° FlagInit("HKEY_LOCAL_MACHINE\SOFTWARE\Test\SubKeyAuto") ; Définit où stocker les préférences
2° FlagSet("USERPASS",USERPASS$) ; Ecriture préférence
3° FlagGet("USERPASS") ;Lecture préférence

La fonction RegValueExists() permet uniquement de tester l'existence d'une valeur ( pas de récupérer son contenu )
Si tu veux récupérer le contenu d'une valeur utilise RegGetValue

Sinon pour la saisie du Password il y a InputPasswordRequester qui masque le mot de passe saisi !

Par contre je m'apperçoit grace à ton code que pure gère les fichiers Ini en natif ! cool

Pour écrire le password dans le registre il y a une lib sur purearea nommée RC4 qui te permettra de crypter / décrypter le password et ainsi d'éviter de le voir en clair si l'utilisateur édite la base de registre.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

:D Thank you very much !

Depuis tout à l'heure j'ai trouvé RegGetValue et c'est au poil.
j'ai aussi adapté une procédure de cryptage perso pour la valeur de la clé qui la rend invisible et permet son utilisation uniquement par le prog.
Avec une série de tests bien placés on obtient un barrage non pas infranchissable, mais très difficile à manipuler, un vrai casse tête qui peut même créer des soucis à un indiscret...
@+ et merci, si j'ai d'autres questions je reviendrai :wink:
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Répondre