Rendre Executable Utilisable Une Seule Fois

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Antho
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 20 mai 2020 12:26
Status : Hors ligne

Rendre Executable Utilisable Une Seule Fois

#1

Message 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!

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11548
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Rendre Executable Utilisable Une Seule Fois

#2

Message 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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

Antho
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 20 mai 2020 12:26
Status : Hors ligne

Re: Rendre Executable Utilisable Une Seule Fois

#3

Message 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

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 786
Enregistré le : ven. 12 août 2011 19:49
Localisation : Essonne
Status : Hors ligne

Re: Rendre Executable Utilisable Une Seule Fois

#4

Message 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")
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)

Antho
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 20 mai 2020 12:26
Status : Hors ligne

Re: Rendre Executable Utilisable Une Seule Fois

#5

Message 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!

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 786
Enregistré le : ven. 12 août 2011 19:49
Localisation : Essonne
Status : Hors ligne

Re: Rendre Executable Utilisable Une Seule Fois

#6

Message 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:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)

jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2132
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: Rendre Executable Utilisable Une Seule Fois

#7

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

Antho
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 20 mai 2020 12:26
Status : Hors ligne

Re: Rendre Executable Utilisable Une Seule Fois

#8

Message 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

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1864
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: Rendre Executable Utilisable Une Seule Fois

#9

Message 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
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Répondre