OVH Cloud OVH Cloud

Modification d'un logiciel en cours d'exécution

22 réponses
Avatar
Fuxy
Bonjours,

Voilà je voulais faire un petit logiciel(A) qui ne peut démarrer qu'une
seule fois.

Pour cela, je pensais rajouter un octet à la fin de l'exécutable, au début
cet octet est à zéro = logiciel jamais démarré.

Ensuite, lors de son 1er démarrage, il s'auto-modifie en mettant son dernier
l'octet à 1.

Lors du second démarrage, si l'octet est à 1, il affiche un message
indiquant qu'il ne peut plus s'éxécuter.

J'ai crée mon petit logiciel(A), j'ai mis le dernier octet à Zéro avec un
autre petit logiciel(B), je l'ai lancé et il fonctionne, par contre,
lorsqu'il tente de se modifier tout seul en mettant son dernier octet à 1,
j'ai un message d'erreur !

Apparement un logiciel en cours d'exécution ne peut pas se modifier ? c'est
une protection de Windows ? Y a t'il une solution ?

Par contre quand le 1er logiciel(A) est arrêté et que je met le dernier
octet à 1 avec l'autre logiciel(B), ça fonctionne bien, car si je démarre le
1er logiciel(A) avec l'octet à 1, j'ai bien un message comme quoi il a déja
été éxécuté.

Il me faut juste la solution pour que ce soit le 1er logiciel(A) qui puisse
s'auto-modifier.

Merci

10 réponses

1 2 3
Avatar
Gloops
Bonjour,

Très mauvaise idée : la modification d'un fichier exécutable sans
l'intervention du programmeur est traditionnellement la manifestation
d'un virus. Donc, autant éviter les fausses alertes.

En revanche, pourquoi pas un fichier de paramètres, ou une clef de
registre ? Plutôt une clef de registre, d'ailleurs, l'utilisateur n'ira
pas mettre ses gros doigts dessus.

On l'incrémente à chaque fois qu'on entre dans le programme, et on la
décrémente à chaque fois qu'on en sort, ça permet de savoir combien
d'occurrences du programme sont en cours. Si c'est limité à 1, la clef
vaudra 0 ou 1.
___________________________________
Fuxy a écrit, le 09/02/2005 08:43 :

Bonjours,

Voilà je voulais faire un petit logiciel(A) qui ne peut démarrer qu'une
seule fois.

Pour cela, je pensais rajouter un octet à la fin de l'exécutable, au début
cet octet est à zéro = logiciel jamais démarré.

Ensuite, lors de son 1er démarrage, il s'auto-modifie en mettant son dernier
l'octet à 1.

Lors du second démarrage, si l'octet est à 1, il affiche un message
indiquant qu'il ne peut plus s'éxécuter.

J'ai crée mon petit logiciel(A), j'ai mis le dernier octet à Zéro avec un
autre petit logiciel(B), je l'ai lancé et il fonctionne, par contre,
lorsqu'il tente de se modifier tout seul en mettant son dernier octet à 1,
j'ai un message d'erreur !

Apparement un logiciel en cours d'exécution ne peut pas se modifier ? c'est
une protection de Windows ? Y a t'il une solution ?

Par contre quand le 1er logiciel(A) est arrêté et que je met le dernier
octet à 1 avec l'autre logiciel(B), ça fonctionne bien, car si je démarre le
1er logiciel(A) avec l'octet à 1, j'ai bien un message comme quoi il a déja
été éxécuté.

Il me faut juste la solution pour que ce soit le 1er logiciel(A) qui puisse
s'auto-modifier.

Merci






Avatar
Kiriasse
Ne suffit-il de prévoir cette simple ligne de code au démarrage ?
If App.PrevInstance Then End
Kiriasse
www.kiriasse.fr

== "Gloops" a écrit dans le message de news:
4209cc13$0$28548$
Bonjour,

Très mauvaise idée : la modification d'un fichier exécutable sans
l'intervention du programmeur est traditionnellement la manifestation d'un
virus. Donc, autant éviter les fausses alertes.

En revanche, pourquoi pas un fichier de paramètres, ou une clef de
registre ? Plutôt une clef de registre, d'ailleurs, l'utilisateur n'ira
pas mettre ses gros doigts dessus.

On l'incrémente à chaque fois qu'on entre dans le programme, et on la
décrémente à chaque fois qu'on en sort, ça permet de savoir combien
d'occurrences du programme sont en cours. Si c'est limité à 1, la clef
vaudra 0 ou 1.
___________________________________
Fuxy a écrit, le 09/02/2005 08:43 :

Bonjours,

Voilà je voulais faire un petit logiciel(A) qui ne peut démarrer qu'une
seule fois.

Pour cela, je pensais rajouter un octet à la fin de l'exécutable, au
début
cet octet est à zéro = logiciel jamais démarré.

Ensuite, lors de son 1er démarrage, il s'auto-modifie en mettant son
dernier
l'octet à 1.

Lors du second démarrage, si l'octet est à 1, il affiche un message
indiquant qu'il ne peut plus s'éxécuter.

J'ai crée mon petit logiciel(A), j'ai mis le dernier octet à Zéro avec un
autre petit logiciel(B), je l'ai lancé et il fonctionne, par contre,
lorsqu'il tente de se modifier tout seul en mettant son dernier octet à
1,
j'ai un message d'erreur !

Apparement un logiciel en cours d'exécution ne peut pas se modifier ?
c'est
une protection de Windows ? Y a t'il une solution ?

Par contre quand le 1er logiciel(A) est arrêté et que je met le dernier
octet à 1 avec l'autre logiciel(B), ça fonctionne bien, car si je démarre
le
1er logiciel(A) avec l'octet à 1, j'ai bien un message comme quoi il a
déja
été éxécuté.

Il me faut juste la solution pour que ce soit le 1er logiciel(A) qui
puisse
s'auto-modifier.

Merci









Avatar
Gloops
Ah, bien entendu, si c'était déjà prévu ...

Pour quand tout le monde sera passé à .Net, je vais bien finir par
maîtriser VB6
_______________________________________
Kiriasse a écrit, le 09/02/2005 09:52 :

Ne suffit-il de prévoir cette simple ligne de code au démarrage ?
If App.PrevInstance Then End
Kiriasse
www.kiriasse.fr



Avatar
Nicolas
Petite question :

Votre méthode peut sûrement être utile mais si vous modifié à 1 la clef
et que le pc plante pendant l'exécution du programme (coupure de courant
par exemple). Le logiciel ne redémarrera jamais car ça sera toujours à 1.

Tandis que la méthode avec le App a l'avantage de ne pas créer ce résultat.

Faut prévoir aussi les plantages en dev ;-) .

Amicalement

Nicolas.



Gloops a écrit :
Ah, bien entendu, si c'était déjà prévu ...

Pour quand tout le monde sera passé à .Net, je vais bien finir par
maîtriser VB6
_______________________________________
Kiriasse a écrit, le 09/02/2005 09:52 :

Ne suffit-il de prévoir cette simple ligne de code au démarrage ?
If App.PrevInstance Then End
Kiriasse
www.kiriasse.fr






Avatar
Fuxy
Merci de vos réponses, mais je ne pense pas que ça corresponde à ce que je
veux faire.

En fait voilà le projet :

Je veux faire un petit jeu avec des copains, on s'envoie des messages, mais
qu'on ne peut lire qu'une seule fois. voilà a ce que j'avais pensé.

- Créer un petit fichier .EXE avec juste un Text1.text

- Lors de l'éxécution du fichier EXE :

- Il vérifie si son dernier octet est à Zéro, si oui alors
il affiche un texte pendant 5 secondes (Timer)
il met le dernier octet à 1 (mon problème de
modification de fichier déja ouvert)
il se referme (End)
- Sinon, il affiche un message indiquant que le texte à déja été lu
Avatar
ng
Salut,

En effet un prog comme celui ci ne fonctionne pas :

Option Explicit

Dim strAppChe As String

Private Sub Form_Load()
If Right$(App.Path, 1) <> "" Then strAppChe = App.Path & "" Else
strAppChe = App.Path

Dim k As Integer
Dim bByte As Byte

k = FreeFile
Open strAppChe & App.EXEName & ".exe" For Binary As #k
Get #k, LOF(k), bByte
If bByte = 0 Then
Put #k, LOF(k), 1
ElseIf bByte = 1 Then
Call MsgBox("Erreur !")
Else
Put #k, LOF(k) + 1, 1
End If
Close #k
End Sub

Le problème c'est que je ne vois pas d'alternative évidente (sauf trimballer
un fichier avec l'exe) car tout ce qui est BDR & Co ca dépend de la machine,
si on copie l'exe sur une autre machine il fonctionnera qd mm...


--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Fuxy wrote:
Bonjours,

Voilà je voulais faire un petit logiciel(A) qui ne peut démarrer
qu'une seule fois.

Pour cela, je pensais rajouter un octet à la fin de l'exécutable, au
début cet octet est à zéro = logiciel jamais démarré.

Ensuite, lors de son 1er démarrage, il s'auto-modifie en mettant son
dernier l'octet à 1.

Lors du second démarrage, si l'octet est à 1, il affiche un message
indiquant qu'il ne peut plus s'éxécuter.

J'ai crée mon petit logiciel(A), j'ai mis le dernier octet à Zéro
avec un autre petit logiciel(B), je l'ai lancé et il fonctionne, par
contre, lorsqu'il tente de se modifier tout seul en mettant son
dernier octet à 1, j'ai un message d'erreur !

Apparement un logiciel en cours d'exécution ne peut pas se modifier ?
c'est une protection de Windows ? Y a t'il une solution ?

Par contre quand le 1er logiciel(A) est arrêté et que je met le
dernier octet à 1 avec l'autre logiciel(B), ça fonctionne bien, car
si je démarre le 1er logiciel(A) avec l'octet à 1, j'ai bien un
message comme quoi il a déja été éxécuté.

Il me faut juste la solution pour que ce soit le 1er logiciel(A) qui
puisse s'auto-modifier.

Merci


Avatar
Fuxy
"ng" a écrit dans le message de news:
e$
Salut,

En effet un prog comme celui ci ne fonctionne pas :



A quelque lignes de code près, c'est ce que j'avais fais, mais
effectivement, ça Bug ...
Avatar
jean-marc
"Fuxy" wrote in message
news:4209ef7f$0$623$

"ng" a écrit dans le message de news:
e$
> Salut,
>
> En effet un prog comme celui ci ne fonctionne pas :
>
A quelque lignes de code près, c'est ce que j'avais fais, mais
effectivement, ça Bug ...



Hello,

tu ne peux pas modifier un exe en cours d'exécution et c'est normal.
Moi je ferais comme ça:
j'aurais un exe avec une TextBox et ton text à afficher.
Au lancement du programme, je récupérerais le texte de la
textBox, je calculerai un Hash MD5, puis j'irais vérifier dans la base de
registre dans la section de ton programme si cette valeur existe ou non.
Si non, je l'ajoute. Si oui, j'affiche "Déja exécuté ou déja lu".

Ca te permet d'être sur que chaque exe différent (donc avec texte différent)
ne peut être exécuté qu une fois.

Attention: c'est NUL comme protection, mais pour faire un petit jeu entre
amis,
c'est sans doute suffisant.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
ng
et pourquoi pas une Private Const str As String = "eee" à la place du txtbox
?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

jean-marc wrote:
"Fuxy" wrote in message
news:4209ef7f$0$623$

"ng" a écrit dans le message de news:
e$
Salut,

En effet un prog comme celui ci ne fonctionne pas :



A quelque lignes de code près, c'est ce que j'avais fais, mais
effectivement, ça Bug ...



Hello,

tu ne peux pas modifier un exe en cours d'exécution et c'est normal.
Moi je ferais comme ça:
j'aurais un exe avec une TextBox et ton text à afficher.
Au lancement du programme, je récupérerais le texte de la
textBox, je calculerai un Hash MD5, puis j'irais vérifier dans la
base de registre dans la section de ton programme si cette valeur
existe ou non.
Si non, je l'ajoute. Si oui, j'affiche "Déja exécuté ou déja lu".

Ca te permet d'être sur que chaque exe différent (donc avec texte
différent) ne peut être exécuté qu une fois.

Attention: c'est NUL comme protection, mais pour faire un petit jeu
entre amis,
c'est sans doute suffisant.


Avatar
Fuxy
Le soucis c'est que le programme est exécutable sur un autre PC .. et je
veux pas
1 2 3