Verrouillage Simple d'un logiciel via MD5 et l'utilisation de hidegadget()Vous êtes au bureau et vous devez aller chercher un café très urgent mais pour ne pas perdre une seconde, vous n'avez pas l'intention
de fermer le programme, vais vous ne souhaitez pas non plus que les passant voient les données resté à l'écran....
Diantre, mais que faire ? Verrouillons notre logiciel le temps de notre absence.
Réalisé en PB 4.41
Voyons les procédures que nous allons utiliser
PrefPass()
Cette procédure va nous permettre de vérifier si un fichier "préférence" contenant un mot de passe existe.
S'il n'existe pas, on va le signaler au programme avec FIRSTLAUNCH=1
Code : Tout sélectionner
Procedure PrefPass()
If OpenPreferences(pref$)
PreferenceGroup("pass")
userPass=ReadPreferenceString("X","")
ClosePreferences()
FIRSTLAUNCH=0
Else
FIRSTLAUNCH=1
EndIf
EndProcedure
Cette procédure permet de créer le fichier de préférence et d'inscrire le mot de passe dedans.
Elle s'exécutera uniquement si FIRSTLAUNCH=1
Code : Tout sélectionner
Procedure CreatePass()
userPass=InputRequester("First Launch","Enter a main password","")
If userPass=""
MessageRequester("Error","You have to choose a password ! End of the program",#MB_ICONWARNING)
End
Else
userPass=MD5Fingerprint(@userPass, Len(userPass)) ; Signature md5 du mot de passe
;On inscrit me MD5 dans le fichier pref
CreatePreferences(pref$)
PreferenceGroup("pass")
WritePreferenceString("X",userPass)
userPass=ReadPreferenceString("X","")
ClosePreferences()
; -----------------------------------------
MessageRequester("OK","Password has been saved")
; On dit au programme qu'il n'a plus a créer de mot de passe
FIRSTLAUNCH=0
EndIf
EndProcedure
Elle permet de verrouiller ou non le programme en cachant les gadgets à protéger.
On compare le md5 du mot de passe entré par l'utilisateur à celui du fichier pref$.
S'ils sont identiques, on déverrouille le programme.
Code : Tout sélectionner
Procedure Protect()
Test.s=GetGadgetText(#BT_LOCK)
If Test="LOCK"
HideGadget(#GADG,1)
txtlock="UNLOCK"
HideGadget(#Text_12,0)
HideGadget(#String_11,0)
SetGadgetText(#BT_LOCK,txtlock)
SetGadgetText(#String_11,"")
ElseIf Test="UNLOCK"
PrefPass()
pass$=GetGadgetText(#String_11)
pass$=MD5Fingerprint(@pass$, Len(pass$))
Debug "md5 pass$ : "+pass$
If pass$=""
MessageRequester(" ","You have to enter a password !",$50)
SetGadgetText(#String_11,"")
ElseIf pass$=userPass
HideGadget(#GADG,0)
txtlock="LOCK"
HideGadget(#Text_12,1)
HideGadget(#String_11,1)
SetGadgetText(#BT_LOCK,txtlock)
Else
MessageRequester(" ","Wrong Password",#MB_ICONWARNING)
SetGadgetText(#String_11,"")
SetGadgetState(#String_11,1)
EndIf
EndIf
EndProcedure
Code : Tout sélectionner
; Simple MD5 Password protection to lock/unlock a software
; by Ar-S / 2010 - PB4.41
Enumeration
#Window_0
#BT_LOCK
#GADG
#Button_6
#Button_8
#Button_9
#Editor_10
#String_11
#Text_12
EndEnumeration
Global txtlock.s
Global path$=GetCurrentDirectory()
Global pref$=pref$+"prefpass.txt"
Global FIRSTLAUNCH,userPass.s
txtlock="LOCK"
; ---- LES PROCEDURES --------
Procedure PrefPass()
If OpenPreferences(pref$)
PreferenceGroup("pass")
userPass=ReadPreferenceString("X","")
ClosePreferences()
FIRSTLAUNCH=0
Else
FIRSTLAUNCH=1
EndIf
EndProcedure
Procedure CreatePass()
userPass=InputRequester("First Launch","Enter a main password","")
If userPass=""
MessageRequester("Error","You have to choose a password ! End of the program",#MB_ICONWARNING)
End
Else
userPass=MD5Fingerprint(@userPass, Len(userPass)) ; Signature md5 du mot de passe
;On inscrit me MD5 dans le fichier pref
CreatePreferences(pref$)
PreferenceGroup("pass")
WritePreferenceString("X",userPass)
userPass=ReadPreferenceString("X","")
ClosePreferences()
;
MessageRequester("OK","Password has been saved")
; On dit au programme qu'il n'a plus a créer de mot de passe
FIRSTLAUNCH=0
EndIf
EndProcedure
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 602, 283, 400, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
ButtonGadget(#BT_LOCK, 20, 365, 365, 25,txtlock )
StringGadget(#String_11, 25, 338, 350, 25, "", #PB_String_Password|#ES_CENTER)
TextGadget(#Text_12, 30, 314, 340, 20, "Enter Password to unlock the sofware", #PB_Text_Center)
ContainerGadget(#GADG, 25, 80, 350, 220, #PB_Container_Raised)
ButtonGadget(#Button_6, 15, 10, 130, 55, "Gadget_x")
ButtonGadget(#Button_8, 15, 75, 130, 55, "Gadget_y")
ButtonGadget(#Button_9, 15, 140, 130, 55, "Gadget_z")
EditorGadget(#Editor_10, 150, 15, 185, 180)
HideGadget(#Text_12,1)
HideGadget(#String_11,1)
CloseGadgetList()
EndIf
EndProcedure
Procedure Protect()
Test.s=GetGadgetText(#BT_LOCK)
If Test="LOCK"
HideGadget(#GADG,1)
txtlock="UNLOCK"
HideGadget(#Text_12,0)
HideGadget(#String_11,0)
SetGadgetText(#BT_LOCK,txtlock)
SetGadgetText(#String_11,"")
ElseIf Test="UNLOCK"
PrefPass()
pass$=GetGadgetText(#String_11)
pass$=MD5Fingerprint(@pass$, Len(pass$))
Debug "md5 pass$ : "+pass$
If pass$=""
MessageRequester(" ","You have to enter a password !",$50) ; $50 sert à faire afficher un messagerequester simple sans son ni icone
SetGadgetText(#String_11,"")
ElseIf pass$=userPass
HideGadget(#GADG,0)
txtlock="LOCK"
HideGadget(#Text_12,1)
HideGadget(#String_11,1)
SetGadgetText(#BT_LOCK,txtlock)
Else
MessageRequester(" ","Wrong Password",#MB_ICONWARNING)
SetGadgetText(#String_11,"")
SetGadgetState(#String_11,1)
EndIf
EndIf
EndProcedure
; ---- LE PROGRAMME --------
; 1 - On vréfifie si le fichierPref existe
PrefPass()
; 2 - s'il n'existe pas on le créé
If FIRSTLAUNCH=1
CreatePass()
EndIf
OpenWindow_Window_0()
; ---- Boulce d'évènements --------
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #BT_LOCK
Protect()
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window_0
CloseWindow(#Window_0)
Break
EndSelect
EndSelect
ForEver