Voilà un exemple pour générer une petite protection par clé en utilisant ADS.
2 programmes.
- le 1er est le petit keygen qui va créer une 1ère clé. Cette clé vous devez la copier dans le second code ligne 74
- Le second est l'exe que vous compilerez est qui sera destiné à votre client.
Instructions :
- Compilez le code 2 en un fichier test.exe
- Lancez le
Il vous demande nom et prénom. Vous devrez alors rentrer
Dupont Jean dans cet exemple sauf si vous avez généré une autre clé avec le keygen
Une fois cela fait, le programme vous demandera de redémarrer. Si les noms et prénom sont bons, la fenêtre du prog s'ouvrira.
Petite protection supplémentaire.
L'exe sera lié au serial de votre disque C en plus de votre nom et prénom.
Note : je suis bien conscient que cette protection nécessite de créer un exe pour chaque client et que l'ADS reste très volatile comme protection.
Cet exemple est pour le fun. Je me suis bien amusé.
Code : Tout sélectionner
; Générateur de clé
UseSHA3Fingerprint()
Procedure.s GenerateLic(Mot$)
N$ = UCase(Mot$)
N$ = Trim(Mot$)
ProcedureReturn StringFingerprint(N$, #PB_Cipher_SHA3)
EndProcedure
; Exemple de création de la clé à coller dans le code du programme principal
NameKey$ = GenerateLic(Trim("DUPONT JEAN"))
SetClipboardText("NameKey$ = "+Chr(34)+NameKey$+Chr(34))
; Vous pouvez directement faire un clic droit / coller ligne 74 du programme principale.
Code : Tout sélectionner
; Falsam : ADS / MVXA : HDD SERIAL /Ar-S : Prog
UseSHA3Fingerprint()
Procedure.s ReadADS(ADS.s)
Protected Buffer.s
Protected Filename.s = ProgramFilename()
If ReadFile(0, Filename + ":" + ADS, #PB_File_SharedRead)
Buffer = ReadString(0, #PB_Unicode)
CloseFile(0)
EndIf
ProcedureReturn Buffer
EndProcedure
Procedure WriteADS(ADS.s, Value.s)
Protected Filename.s = ProgramFilename()
If CreateFile(0, Filename + ":" + ADS, #PB_File_SharedWrite)
WriteData(0, @Value, StringByteLength(Value))
CloseFile(0)
EndIf
EndProcedure
Procedure.s GenerateLic(Mot$)
ProcedureReturn StringFingerprint(Mot$, #PB_Cipher_SHA3)
EndProcedure
Procedure.s ReturnHDDSerial(Laufwerk.s)
;code de MVXA
Define.i tmpSerial
Define.s tmpLfwrk, tmpFileSystem
tmpLfwrk = Left(Laufwerk, 1) + ":\"
tmpFileSystem = Space(256)
GetVolumeInformation_(@tmpLfwrk, @tmpFileSystem, 255, @tmpSerial, 0, 0, @tmpFileSystem, 255)
Debug Hex(tmpSerial)
ProcedureReturn Hex(tmpSerial)
EndProcedure
Procedure OW()
If OpenWindow(0, 0, 0, 220, 100, "Licence OK !...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget (1, 10, 60, 200, 30, "Fermer")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
CloseWindow(0)
End
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
EndProcedure
; -----------------------------------------------------
; Clé générée avec le keygen du code précédent
NameKey$ = "18ff575513a42ae5ea7dad4cd8165c032dd837ff09f8197bd6ab9078b8a3baec" ;
;------------------------------------------------------
LicRead.s = ReadADS("NAMEKEY")
If LicRead =""
WriteADS("NAMEKEY", NameKey$)
LicRead = NameKey$
EndIf
If Len(LicRead) = 64 ; s'il ni a que le nom prenom
N$ = InputRequester ("Licence","Entrez votre nom et prénom (ex : marc dumoulin)","")
N$ = Trim(UCase(N$))
N$ = GenerateLic(N$)
If N$ = LicRead.s
DD$ = GenerateLic(ReturnHDDSerial("c"))
Licence.s = N$+":"+DD$
WriteADS("NAMEKEY", Licence.s)
MessageRequester("Succés","Vous devez relancer le logiciel pour terminer l'activation"+Chr(10)+"Cle "+Licence.s ,#PB_MessageRequester_Info)
End
Else
MessageRequester("Erreur","Vous devez entrer votre Nom et Prénom"+Chr(10)+"Ce programme va se terminer",#PB_MessageRequester_Error)
End
EndIf
ElseIf Len(LicRead) > 64
; VerifDD
DDcrypt.s = Mid(LicRead,FindString(LicRead,":")+1,Len(LicRead)-FindString(LicRead,":")+1 )
; MessageRequester("test",DDcrypt.s + " = " + ReturnHDDSerial("c"),#PB_MessageRequester_Ok)
If DDcrypt.s = GenerateLic(ReturnHDDSerial("c"))
OW()
Else
MessageRequester("Attention","Ce logiciel est lié à un seul ordinateur",#PB_MessageRequester_Info)
End
EndIf
EndIf