Page 1 sur 1

Rendre Executable Utilisable Une Seule Fois

Posté : mer. 20 mai 2020 14:00
par Antho
Bonjour à tous!

J'ai une question qui peut paraître simple pour beaucoup mais moins pour moi qui met les pied sur AutoIt depuis une semaine seulement :)

J'ai besoin de faire un "logiciel" qui ne serait utilisable qu'une fois, est-ce possible?

C'est à dire qu'un fois que l’exécutable est lancé, il ne le sera plus jamais. j'ai pensé à créer des fichiers dans des répertoires de l'ordinateur mais ça signifie que si le fichier va sur une autre machine, il est réutilisable.

Cela est-il possible? Que l'exe s'auto modifie?

Il y a aussi la solution de stocker une valeur sur un serveur en ligne et e verifier sur ma BDD, qu'en pensez vous?

Merci à tous!

Re: Rendre Executable Utilisable Une Seule Fois

Posté : mer. 20 mai 2020 14:30
par Tlem
Bonjour Antho, il existe différentes solutions pour essayer de "protéger" un exécutable, mais généralement la motivation de celui qui va vouloir le pirater, sera proportionnelle à la protection mise en place. :D
En fait, toutes les protections gratuites que vous pourrez mettre en place sur un script AutoIt seront très facilement contournable.
Donc après il faut estimer les risques et savoir jusqu'où en temps et en ressources vous êtes capable d'aller. ^^

Une simple autodestruction de l'exe permet une forme simple d'autoprotection, mais il suffit d'en avoir une copie pour contourner le problème.

Après il y a la possibilité d'utiliser un identifiant unique de la machine du client mais là il vous faudra compiler chaque exe à la demande afin de le personnaliser.
Et là aussi il est toujours possible de decompiler l'exe pour y apporter les modifications nécessaires.

Bref je n'ai fait que survoler à des centaines de kilomètre le sujet. Faites quelques recherches sur le forum, vous verrez que cela n'est franchement pas aussi simple que ça.

Cordialement
Thierry

Re: Rendre Executable Utilisable Une Seule Fois

Posté : mer. 20 mai 2020 15:38
par Antho
Merci Thierry pour la réponse!

Je vais regarder un peu ce qui se fait :) Mes clients n'étant pas des férus, ça limite le risque ^^

C'est juste pour éviter à certains d'exploiter ma solution automatisée.

Je vais miser sur un mot de passe à l'ouverture + suicide une fois que tout s'est bien déroulé :)

Cordialement,
Anthonin

Re: Rendre Executable Utilisable Une Seule Fois

Posté : mer. 20 mai 2020 16:11
par walkson
Bonjour,
C'est pas compliqué mais des fois ça peut aider :mrgreen:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=prog1.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
If Not @Compiled Then Exit MsgBox(16,"","non compilé")
$tps = FileGetAttrib(@ScriptDir & "\prog1.exe")
MsgBox(0,"Pour voir",$tps,2)
If $tps = "AT" Then Exit MsgBox(16,"","plus de lancement",2)

MsgBox(32,"Ici le programme","premier lancement",2)

FileSetAttrib(@ScriptDir & "\prog1.exe","+T")

Re: Rendre Executable Utilisable Une Seule Fois

Posté : mer. 20 mai 2020 16:50
par Antho
Merci Walkson pour ce partage !

Ça invalide l'exe en fonction de la date si je comprends bien le code?

J'ai une autre question, j'ai un soucis de connexion à une BDD en SQL, voici un code que j'ai récupéré ici (oui c'est mal de pas créer ^^)

Certains ont des soucis avec de simples requètes, moi c'est à la connexion à la BDD, pour mes essais en local, j'ai une erreur au bout de 5-10 seconde de "moulinage"...

Voici mon code:

Code : Tout sélectionner

Global $adCN

$constrim="DRIVER={SQL Server};SERVER=localhost;DATABASE=bddvag;uid=root;pwd=root;"
$adCN = ObjCreate ("ADODB.Connection") ; <== Create SQL connection
$adCN.Open ($constrim) ; <== Connect with required credentials
MsgBox(0,"",$constrim )

if @error Then
       MsgBox(0, "Erreur BDD", "Connexion à la base échouée")
       Exit
Else
       MsgBox(0, "Réussi!", "Connexion à la base réussie!")
EndIf

$sQuery = "select * from maj"

$result = $adCN.Execute($sQuery)
MsgBox(0, "", $result.Fields( "s_username" ).Value)
$adCN.Close ; ==> Close the database

Et voici l'erreur générée:

Code : Tout sélectionner

>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "D:\TestBDD.au3"    
"D:\TestBDD.au3" (10) : ==> The requested action with this object has failed.:
$adCN.Open ($constrim)
$adCN^ ERROR
>Exit code: 1    Time: 17.05
Merci de vos lumières!

Re: Rendre Executable Utilisable Une Seule Fois

Posté : mer. 20 mai 2020 16:56
par walkson
Oubliez mon code, je suis à coté de mes pompes :oops:
[Edit] j'ai rectifié en modifiant les attributs mais sans intérêt. Les attributs sont modifiés en changeant d'ordinateur et renvoie sur archive :cry:

Re: Rendre Executable Utilisable Une Seule Fois

Posté : mer. 20 mai 2020 18:50
par jchd
Une possibilité : fournir un .exe qui ne sera qu'une coquille essentiellement vide et qui reposera sur le téléchargement à la volée et le lancement d'une autre partie exécutable fonctionnelle (utile) depuis un serveur après fourniture d'identifiants uniques, faciles à bloquer sur le serveur après la première (ou Nième) utilisation.

La contrepartie c'est le besoin d'une connexion Internet, mais c'est aujourd'hui une contrainte faible.

Par contre, c'est contournable par des petits fûtés qui se feraient avoir le 1er coup mais seraient capables de mettre en oeuvre les moyens requis pour capturer en bon état, lors d'un second achat, l'ensemble de l'image exécutable pour réutilisation ultérieure. On peut quand même faire en sorte que ce soit loin d'être trivial.

Re: Rendre Executable Utilisable Une Seule Fois

Posté : jeu. 21 mai 2020 12:08
par Antho
Jchd c'est une idée de génie!!

Je n'y avais pas pensé comme ça! L'idée serait de faire un second exe qui télécharge le premier en le cachant bien comme il faut pour ensuite l'executer et qu'il disparaisse avec la fonction suicide que je lui ai inclus déjà!

Pour le prochain achat, c'est plus simple car c'est une mise à jour d'un câble qui une fois faite n'est plus nécessaire et que forcément si un client le commande 5 fois ça me permet de faire attention en amont

Re: Rendre Executable Utilisable Une Seule Fois

Posté : jeu. 21 mai 2020 20:31
par TommyDDR
Je ne sais pas de quelle fonction suicide vous parlez, mais il y en a une inclue dans l'installation de scite 4 autoit, si vous faires : "selfdelete" puis espace :
Func _SelfDelete($iDelay = 0)
   Local $sCmdFile
   FileDelete(@TempDir & "scratch.bat")
   $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
         & ':loop' & @CRLF _
         & 'del "' & @ScriptFullPath & '" > nul' & @CRLF _
         & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
         & 'del ' & @TempDir & 'scratch.bat'
   FileWrite(@TempDir & "scratch.bat", $sCmdFile)
   Run(@TempDir & "scratch.bat", @TempDir, @SW_HIDE)
EndFunc