Protégez vos applications avec "Clefs Au Pat".
Publié : dim. 13/oct./2024 17:41
Il génère une clef basée sur le matériel ( cartes réseaux même USB pour la portabilité ) dans un fichier "Clefs Au Pat.ini", il ne doit pas être renommé et doit resté dans le dossier de l'application.
Ce même fichier peut contenir les clef de différent programmes s'il sont tous dans le même dossier.
C'est un plaisir pour moi de vous en faire profiter.
3 fichiers :
- "Clefs Au Pat-Principal.pb"
- "Clefs Au Pat-Win.pbf"
- "Module ProtectionLogiciel.pb"
Le programme pricipale
"Clefs Au Pat-Principal.pb"
Le formulaire
"Clefs Au Pat-Win.pbf"
Le module
"Module ProtectionLogiciel.pb"
Ce même fichier peut contenir les clef de différent programmes s'il sont tous dans le même dossier.
C'est un plaisir pour moi de vous en faire profiter.
3 fichiers :
- "Clefs Au Pat-Principal.pb"
- "Clefs Au Pat-Win.pbf"
- "Module ProtectionLogiciel.pb"
Le programme pricipale
"Clefs Au Pat-Principal.pb"
Code : Tout sélectionner
;
; Clefs Au Pat est utilisé pour mettre en place des clefs de protection.
; *****************
XIncludeFile "Module ProtectionLogiciel.pb"
XIncludeFile "Clefs Au Pat-Win.pbf"
OpenWindow_0()
Global .s Titre = "Clefs Au Pat V20241013"
Global .s NomDuProg = "Clefs Au Pat"
; *****************
; Les procédures
Procedure RechargeCartesReseaux ( )
;Charge la liste des cartes réseaux dans la Combo_CarteReseau
ClearGadgetItems( Combo_CarteReseau ) ; Vide la Combo de son contenu
ProtectionLogiciel::ChargeListeReseau() ; on réccupère les infos
ForEach ProtectionLogiciel::Reseau_Liste() ; pour chacun ds éléments de la liste
AddGadgetItem ( Combo_CarteReseau , -1 , ProtectionLogiciel::Reseau_Liste()\Description )
Next
SetGadgetState( Combo_CarteReseau , 0 ) ; Selection du 1er élément de la liste
EndProcedure
; *****************
; Les procédures d'événements
Procedure Button_GenereOnClik (EventType)
Protected .s Mac
Protected .a Pos
Protected .l Clef
Protected .s Prog
; Recupère l'adresse physique de la carte correspondant à la carte choisie
Pos = GetGadgetState( Combo_CarteReseau )
SelectElement( ProtectionLogiciel::Reseau_Liste() , Pos )
Mac = ProtectionLogiciel::Reseau_Liste()\Adresse
; Recupère le nom du programme choisi de la Combo_Prog
Prog = GetGadgetText( Combo_Prog )
; Génère la clef et l'ajoute au fichier ini
Clef = ProtectionLogiciel::CalculeCle( Prog + Mac )
ProtectionLogiciel::AddCleIni ( GetGadgetText( Combo_Prog ) , Clef )
EndProcedure
Procedure Button_RechargeOnClick (EventType)
RechargeCartesReseaux ( )
EndProcedure
Procedure Button_QuitterOnClick (EventType)
End
EndProcedure
SetWindowTitle ( Window_0 , Titre )
; ; *** ICI on protege l'application au démarrage
; ; Supprimez les commentaires pour protéger "Clefs Au Pat"
; Clef .l = 0
; ClefOk .a = #False
; Mac .s = ""
; ; Vérifie si la clef est présente
; ; On teste chacunes des carte réseaux avec la clef enregistrer dans le fichier ini
; ProtectionLogiciel::ChargeListeReseau()
; ForEach ProtectionLogiciel::Reseau_Liste()
; Mac = ProtectionLogiciel::Reseau_Liste()\Adresse
; Clef = ProtectionLogiciel::CalculeCle( NomDuProg + Mac )
; If ProtectionLogiciel::CleOk ( Clef )
; ClefOk = #True
; EndIf
; Next
; ; Si l'on a pas de clef, on ne va pas plus loin.
; If Not ClefOk
; MessageRequester( "Autorisation refusée." , "L'application vat se fermée." , #PB_MessageRequester_Ok | #PB_MessageRequester_Warning )
; End ; C'est FINI
; EndIf
; On poursuit
HideWindow( Window_0, #False )
RechargeCartesReseaux ( )
; Initialise la Combo_Prog avec la liste des applis à protéger
AddGadgetItem ( Combo_Prog , -1 , "Clefs Au Pat" )
; AddGadgetItem ( Combo_Prog , -1 , NomDuProg2 )
; AddGadgetItem ( Combo_Prog , -1 , NomDuProg3 )
; AddGadgetItem ( Combo_Prog , -1 , NomDuProg4 )
SetGadgetState ( Combo_Prog , 0 ) ; Présélection du 1er de la liste
; *****************
; La boucle principale
Repeat
Evenement = WaitWindowEvent()
Select EventWindow()
Case Window_0
Window_0_Events(Evenement)
EndSelect
Until Evenement = #PB_Event_CloseWindow
Le formulaire
"Clefs Au Pat-Win.pbf"
Code : Tout sélectionner
;
; This code is automatically generated by the Form Designer.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures need to be put in another source file.
;
Global Window_0
Global Combo_Prog, Combo_CarteReseau, Button_Genere, Button_Recharge, Button_Quitter
Declare Button_RechargeOnClick(EventType)
Declare Button_QuitterOnClick(EventType)
Declare Button_GenereOnClik(EventType)
Procedure OpenWindow_0(x = 0, y = 0, width = 610, height = 130)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
HideWindow(Window_0, 1)
Combo_Prog = ComboBoxGadget(#PB_Any, 10, 20, 250, 20)
Combo_CarteReseau = ComboBoxGadget(#PB_Any, 270, 20, 250, 20)
Button_Genere = ButtonGadget(#PB_Any, 540, 50, 60, 20, "Génère")
Button_Recharge = ButtonGadget(#PB_Any, 540, 20, 60, 20, "Recharge")
Button_Quitter = ButtonGadget(#PB_Any, 540, 100, 60, 20, "Quitter")
EndProcedure
Procedure Window_0_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case Button_Genere
Button_GenereOnClik(EventType())
Case Button_Recharge
Button_RechargeOnClick(EventType())
Case Button_Quitter
Button_QuitterOnClick(EventType())
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
Le module
"Module ProtectionLogiciel.pb"
Code : Tout sélectionner
DeclareModule ProtectionLogiciel
; ******** Constantes et variables Publiques ***************
Structure Reseau
Description .s
Adresse .s
EndStructure
Global NewList Reseau_Liste.Reseau()
; ******** Declaration des procedures Publiques ***************
Declare ChargeListeReseau ( )
Declare .l CalculeCle ( Txt.s )
Declare .a CleOk ( Cle.l )
Declare AddCleIni ( Appli.s , Cle.l )
EndDeclareModule
Module ProtectionLogiciel
; ******** Constantes et variables privées ***************
Global .s FichierIni = "Clefs Au Pat.ini"
; ******** Procedures Privées ***************
; ******** Procedures Publiques ************
Procedure ChargeListeReseau ( ) ; Charge la liste des cartes reseau valide
ClearList( Reseau_Liste() )
MonProg = RunProgram( "ipconfig", "/all", "", #PB_Program_Open | #PB_Program_Read) ; Pour Windows XP-VISTA-7-8-10-11
If MonProg
While ProgramRunning( MonProg )
If AvailableProgramOutput( MonProg )
TmpTxt$ = ""
While( TmpTxt$ = "" )
TmpTxt$ = ReadProgramString( MonProg ) ; Lecture d une ligne non vide
Wend
If FindString( TmpTxt$ , "Description" ) ; Recherche le mot "Description"
Index.i = FindString( TmpTxt$ , ":" ) + 2
Txt1$ = Mid( TmpTxt$, Index ) ; Recupère le nom de la carte réseau
TmpTxt$ = ""
While( TmpTxt$ = "" )
TmpTxt$ = ReadProgramString( MonProg ) ; Lecture d une ligne non vide suivante
Wend
Index.i = FindString( TmpTxt$ , ":" ) + 2
Txt2$ = Mid( TmpTxt$, Index ) ; Recupère l'adresse physique de la carte
Lg.i = Len( Txt2$ )
If( Lg > 11 And Lg < 18 ) ; Si l' adressse est conforme
AddElement( Reseau_Liste( ) ) ; on enregistre les infos dans la liste
Reseau_Liste( )\Description = Txt1$
Reseau_Liste( )\Adresse = Txt2$
EndIf
EndIf
EndIf
Wend
CloseProgram( MonProg ) ; Ferme la connexion vers le programme
EndIf
EndProcedure
Procedure .l CalculeCle ( Txt.s ) ; Retourne la cle calcule depuis Txt
Protected Cle .l = 0
Protected x .i
; Algo de calcule de clefs ( mais vous pouvez changer )
For x = 1 To Len( Txt )
Cle + Asc( Mid( Txt , x , 1 ) ) * x
Next
ProcedureReturn Cle
EndProcedure
Procedure .a CleOk ( Cle.l ) ; Teste si la cle est presente dans le fichier ini
Protected Ok .a = #False
If OpenPreferences ( GetCurrentDirectory() + FichierIni )
ExaminePreferenceGroups ( ) ; Recherche des groupes dans le fichier préférence
While NextPreferenceGroup ( ) ; Tant qu'il existe un groupe à afficher
ExaminePreferenceKeys ( ) ; Recherche les cles du groupe
While NextPreferenceKey ( ) ; Tant qu'il existe une clé à afficher
If Cle = ReadPreferenceLong( PreferenceKeyName( ) , 0 ) ; Si egale alors on a trouve
Ok = #True
EndIf
Wend
Wend
ClosePreferences() ; Fermer le fichier préférence
EndIf
ProcedureReturn Ok
EndProcedure
Procedure AddCleIni ( Appli.s , Cle.l ) ; Ajoute une cle au fichier ini si elle n'existe pas deja
Protected N .i = 1
Protected Ok .a = #False
Protected KeyNameExiste .a = #False
Protected KeyNameDispo .i = 0
If OpenPreferences ( GetCurrentDirectory() + FichierIni ) ; Ouvre le fichier ini s'il existe
ExaminePreferenceGroups ( ) ; Recherche des groupes dans le fichier préférence
While NextPreferenceGroup ( ) ; Tant qu'il existe un groupe à afficher
ExaminePreferenceKeys ( ) ; Recherche les cles du groupe
While NextPreferenceKey ( ) ; Tant qu'il existe une clé à afficher
If Cle = ReadPreferenceLong( PreferenceKeyName( ) , 0 ) ; Si egale alors on a trouve
Ok = #True
EndIf
Wend
Wend
If Not Ok
PreferenceGroup ( Appli ) ; Selectionne le groupe Appli ou le cree s'il n'existe pas
While Not KeyNameDispo
ExaminePreferenceKeys ( )
While NextPreferenceKey ( ) ; Tant qu'il existe une clé à afficher dans le groupe Appli
If PreferenceKeyName ( ) = Str( N ) : KeyNameExiste = #True : EndIf ; Le nom de la cle existe ?
Wend
If KeyNameExiste : N + 1 : KeyNameExiste = #False ; Nom de la cle suivante
Else : KeyNameDispo = N ; Le nom de la cle est dispo
EndIf
Wend
If KeyNameDispo : WritePreferenceLong ( Str( KeyNameDispo ) , Cle ) : EndIf ; Enregistre nom de la cle avec la cle
EndIf
Else ; Le fichier n'existe pas
CreatePreferences ( GetCurrentDirectory() + FichierIni ) ; Creation du fichier ini
PreferenceGroup ( Appli ) ; Creation du groupe
WritePreferenceLong ( "1" , Cle ) ; Enregistre nom de la cle avec la cle
EndIf
ClosePreferences ( ) ; Enregistre et ferme le fichier ini
EndProcedure
; ******* Initialisation *******
EndModule