Ce peut etre un marqueur qui compte le nombre d'éxécutions d'un script (par exemple comme récement dans ce sujet) une protection de licence (même si autoit n'est aps le langage idéal pour développer du code qui doit etre protégé... etc etc.
Le problème se résume a un axiome assez simple (il est a la base des doctrines militaires, c'est dire si c'est pas dur a comprendre) : Si on peut le voir, on peut l'atteindre, et si on peut l'atteindre, on peut le détruire.
Et la parade est un bon vieux dicton bien de chez nous : Pour vivre heureux, vivons cachés.
Oui mais voilà comment faire pour cacher une information que mon programme devra pouvoir lire et écrire, mais dont personne ne soupçonnera l'existence ?
Mais tout simplement en utilisant une des fonctionnalités de regedit bien sur ! (Certains diront que c'est un bug, mais ce sont des mauvaises langues).
Il faut savoir que l'immense majorité des utilisateurs qui vont chercher quelquechose dans la registry vont utiliser regedit. Or pour ce programme, quand le nom d'une valeur fait plus de 255 caracteres, il considère qu'on est a la fin de la clé, et passe a la clé suivante.
Il suffit donc de créer une clé de registre, dans laquelle on met 2-3 valeurs utiles ou bidon, peu importe, le but etant juse d'avoir une clé de registre qui ne soit pas vide. Puis il suffit juste d'ajouter une valeur dont le nom fasse 255 caracteres, et toutes les valeurs crées ensuite dans la clé seront invisibles. Elles seront pourtant tout a fait lisible par le script.
Petit exemple :
Code : Tout sélectionner
$chaine = "1"; on crée une chaine de 1 caractere
For $i = 1 To 255
$chaine = $chaine & "1" ; et on en rajoute 255 ce qui fait un total de 256 caracteres.
Next
RegWrite("HKLM\SOFTWARE\test", "Nom Appli", "REG_SZ", "mon appli a moi que j'ai faite") ; on crée une valeur 'utile'
RegWrite("HKLM\SOFTWARE\test", "Version", "REG_SZ", "1.2") ; et meme 2
RegWrite("HKLM\SOFTWARE\test", "Release", "REG_SZ", "2 Final") ; allez soyons fous, faisons en une 3eme
RegWrite("HKLM\SOFTWARE\test", "LicenceCode", "REG_SZ", "{BF58665A-TS988-7669eAF-pQ}") ; et là on crée une pseudo clé de licence
RegWrite("HKLM\SOFTWARE\test", $chaine, "REG_SZ", "Là je suis caché") ; a partir de là les valeurs crées dansla clé seront cachées
RegWrite("HKLM\SOFTWARE\test", "Valeur cachée 2", "REG_SZ", "là aussi")
RegWrite("HKLM\SOFTWARE\test", "Valeur cachée 3", "REG_SZ", "et là encore")
MsgBox(0, "Vérification", "explorez la base de registre et allez voir le contenu de HKLM\SOFTWARE\Test") ; pour vérifier
Run(@WindowsDir & "\regedit.exe") ; on regarde avec regedit
Sleep(5000)
$msg = "et pourtant dans HKLM\SOFTWARE\test, il y a aussi les valeurs suivantes :" & @CRLF _ ; et on compare avec ce que le programme est capable d'aller chercher
& "[La chaine de 256 caracteres] = " & RegRead("HKLM\SOFTWARE\test", $chaine) & @CRLF _
& "Valeur cachée 2 = " & RegRead("HKLM\SOFTWARE\test", "Valeur cachée 2") & @CRLF _
& "Valeur cachée 3 = " & RegRead("HKLM\SOFTWARE\test", "Valeur cachée 3") & @CRLF
MsgBox(0, "clé cachée", $msg) ; étonnant non ?
il faudrait donc faire en sorte que les clés soient dissimulées, même là.
Et bien ma foi on va en plus exploiter une fonctionalité de la commande reg.
Puisqu'elle présente le contenu des clés selon un format précis ([4 espaces][tab][le nom de la valeur][tab][type de valeur][tab][contenu de la valeur]) on va ruser et lui faire afficher ce qu'il afficherait si on avait des clés qui existent :
Code : Tout sélectionner
$chaine = "ValeurPipo1 REG_SZ Une valeur bidon."&@CRLF; on crée une chaine de 256 caractere qui resemble a ce qu'afficherait la commande reg sous dos
$chaine = $chaine & " ValeurPipo2 REG_SZ valeur bidon2."&@CRLF
$chaine = $chaine & " ValeurPipo3 REG_SZ Encore une 'tite valeur bidon"&@CRLF
$chaine = $chaine & " ValeurPipo4 REG_SZ Et encore une valeur bidon"&@CRLF
$chaine = $chaine & " ValeurPipo5 REG_SZ On rajoute encore une valeur bidon"&@CRLF
$chaine = $chaine & " ValeurPipo6"
$chaine2 = "ValeurPipu1 REG_SZ Une valeur bidon."&@CRLF; on crée une 2eme chaine de 256 caractere qui resemble a ce qu'afficherait la commande reg sous dos
$chaine2 = $chaine2 & " ValeurPipu2 REG_SZ valeur bidon2."&@CRLF
$chaine2 = $chaine2 & " ValeurPipu3 REG_SZ Encore une 'tite valeur bidon"&@CRLF
$chaine2 = $chaine2 & " ValeurPipu4 REG_SZ Et encore une valeur bidon"&@CRLF
$chaine2 = $chaine2 & " ValeurPipu5 REG_SZ On rajoute encore une valeur bidon"&@CRLF
$chaine2 = $chaine2 & " ValeurPipu6"
RegWrite("HKLM\SOFTWARE\test", "Nom Appli", "REG_SZ", "mon appli a moi que j'ai faite") ; on crée une valeur 'utile'
RegWrite("HKLM\SOFTWARE\test", "Version", "REG_SZ", "1.2") ; et meme 2
RegWrite("HKLM\SOFTWARE\test", "Release", "REG_SZ", "2 Final") ; allez soyons fous, faisons en une 3eme
RegWrite("HKLM\SOFTWARE\test", "LicenceCode", "REG_SZ", "{BF58665A-TS988-7669eAF-pQ}") ; et là on crée une pseudo clé de licence
RegWrite("HKLM\SOFTWARE\test", $chaine, "REG_SZ", "La je suis cache") ; a partir de là les valeurs crées dans la clé seront cachées
RegWrite("HKLM\SOFTWARE\test", $chaine2, "REG_SZ", "La aussi je suis cache") ; une 2eme valeur cachée
MsgBox(0, "Vérification", "explorez la base de registre et allez voir le contenu de HKLM\SOFTWARE\Test") ; pour vérifier
Run(@WindowsDir & "\regedit.exe") ; on regarde avec regedit
$file=FileOpen(@TempDir&"\reg.bat",1)
FileWrite($file,@SystemDir & "\reg.exe query HKLM\SOFTWARE\test >"&@TempDir&"\reg.log"&@CRLF) ; on regarde avec reg query
FileWrite($file,"type "&@TempDir&"\reg.log"&@CRLF)
FileWrite($file,"pause"&@CRLF)
FileClose($file)
RunWait(@TempDir&"\reg.bat")
FileDelete(@TempDir&"\reg.bat")
$msg = "et pourtant dans HKLM\SOFTWARE\test, il y a aussi les valeurs suivantes :" & @CRLF _ ; et on compare avec ce que le programme est capable d'aller chercher
& "[La 1° chaine de 256 caracteres] = " & RegRead("HKLM\SOFTWARE\test", $chaine) & @CRLF _
& "[La 2° chaine de 256 caracteres] = " & RegRead("HKLM\SOFTWARE\test", $chaine2)
MsgBox(0, "clé cachée", $msg) ; étonnant non ?