Histoire des virus informatique
De nouvelles techniques

Michel Dubois
myshell.dubois@neuf.fr
http://vaccin.sourceforge.net


1  Les années 90

En 1991, le nombre de virus connus avoisine les trois cent exemplaires. Alors que les premiers virus sont clairement expérimentaux, leurs successeurs prennent, au début des années 1990, une toute autre orientation.

L'évolution des vers et virus suit étroitement l'évolution des ordinateurs et des réseaux. Il est alors logique que l'avènement de Windows 95 et l'élargissement de l'Internet au grand public marquent le début d'une nouvelle ère dans l'évolution des programmes autoreproducteurs. Les changements qui s'en suivent sont essentiellement de deux ordres. D'une part, les premiers virus sciemment nocifs voient le jour et ceci malgré l'incrédulité de la plupart des utilisateurs. D'autre part, la guerre virus & vers versus logiciels antivirus s'organise. Les pirates informatiques inventent, à cette époque, plusieurs techniques visant à rendre leurs programmes autoreproducteurs indétectables.

1.1  Les premiers virus destructeurs

1.1.1  Datacrime


DATACRIME VIRUS
RELEASED: 1 March 1989
 


Figure 1: Le message de Datacrime



En mars 1989, un hollandais du nom de Fred Vogel contacte Alan Solomon pour lui signaler un nouveau virus. Il précise aussi que ce virus s'appelle Datacrime et qu'il se déclenche le 13 du mois suivant.

Le désassemblage révèle que le virus est programmé pour effectuer un formatage de bas niveau du cylindre zéro des disques durs, à n'importe quel moment entre le 12 octobre et le 31 décembre, chaque année. Les dommages potentiels d'un tel virus sont importants, en effet, la plupart des systèmes enregistrent la table d'allocation des fichiers dans ce cylindre zéro. Un formatage de ce cylindre revient à un effacement complet du disque dur: le système ne sait plus où trouver les fichiers. En plus de ce formatage, Datacrime affiche un message sur l'écran de l'ordinateur infecté (voir Fig. 1). Enfin, il s'agit d'un virus non résident et probablement peu apte à se propager.

Un article présentant simplement les effets du virus est publié. Cet entrefilet est repris par un autre magazine puis un autre et ainsi de suite, chacun embellissant l'histoire. L'effet boule de neige de la machine médiatique aidant, il devient vite un fait établit qu'un virus très dangereux va commencer à sévir dès le 12 octobre. Un magasine américain va même jusqu'à le renommer Columbus Day en souvenir du jour anniversaire de la découverte des Amériques par Christophe Colomb, un 12 octobre. Ce même magasine explique que le virus est écrit par un terroriste norvégien en colère contre les américains qui retirent à Éric Le Rouge le mérite d'avoir le premier découvert le territoire américain!

Pendant ce temps, la police hollandaise, prenant le problème au sérieux, missionne un informaticien pour développer un antivirus spécifique à Datacrime. Ce détecteur est mis en vente dans les commissariats du pays pour la modique somme d'un dollar. Il se vend très bien malgré les nombreuses fausses alarmes qu'il délivre.

En fait, malgré la peur engendrée par les médias, le virus ne provoquera pas la grande panne informatique tant redoutée. Le 15 octobre 1989, le journal le Monde publie un article dénonçant le mouvement de panique, non justifié, apparu en Hollande et en France. Cette évènement montre à quel point une information concernant un programme autoreproducteur, amplifiée par les médias, peut engendrer des phénomènes d'hystéries collectives. Ces conséquences sont néfastes car elles discréditent le discours des spécialistes en sécurité informatique auprès du grand public. Ce dernier est donc moins enclin à mettre en oeuvre les mesures de prévention simple: mise à jour antivirale, mise à jour corrective des systèmes d'exploitation, ...C'est une aubaine inespérée pour les pirates qui ne vont pas se priver d'utiliser cette faille.

1.1.2  Dark Avenger

Au printemps 1989 un nouveau virus apparaît en Bulgarie. DarkAvenger1 ou DarkAvenger.1800 est un virus de 1800 octets qui infecte les fichiers .COM et .EXE dont la taille est supérieure à 1775 octets. Les seules informations concernant son auteur sont issues d'un texte figurant à l'intérieur du code (voir Fig. 2). Le virus se propage rapidement en Bulgarie, dans plusieurs pays d'Europe, en Allemagne de l'est et en URSS.

This program was written in the city of Sofia (C)
1988-89 Dark Avenger
 


Figure 2: La signature de DarkAvenger



Ce virus est aussi innovant que dangereux. À chaque fois qu'un programme infecté est exécuté, le virus incrémente un compteur. Lors de la seizième exécution, DarkAvenger efface le contenu d'un secteur du disque dur pris au hasard en y inscrivant les 512 premiers octets de son code. L'innovation de ce virus réside dans son mode d'infection. C'est un infecteur rapide: quand il est en mémoire, il suffit juste de copier ou d'ouvrir un fichier pour que ce dernier soit infecté. Ainsi si l'utilisateur, pensant avoir un virus sur son ordinateur, décide de scanner son disque à l'aide d'un programme antivirus, alors que DarkAvenger est en mémoire, tous les fichiers du disque sont infectés.

L'auteur de ce virus, Dark Avenger, a par la suite développé de nombreux autres virus, tous hautement néfastes et très efficaces. Parmi eux nous trouvons des variantes de son premier virus: DarkAvenger.2000 et DarkAvenger.2100 dans lesquels il essaie de brouiller les pistes sur son identité en indiquant, dans le code des virus, le nom de personnalités du monde de la recherche antivirale tel Vesselin Bontchev2.

Il est aussi l'auteur des virus suivants: Les virus de Dark Avenger introduisent deux idées nouvelles dans le monde de la virologie informatique [1], la notion d'infecteur rapide d'une part et le type de dommages occasionnés d'autre part. Avec le concept d'infecteur rapide, le virus n'a plus besoin d'attendre que l'utilisateur exécute un programme ou modifie un fichier pour se reproduire. Il suffit d'un simple accès en lecture pour que le virus infecte le fichier. Comme nous l'avons vu plus haut, ce dispositif permet ainsi de détourner l'utilisation d'un antivirus afin de faciliter et de systématiser la propagation du virus. Les dommages causés par les virus de Dark Avenger sont très subtils et difficiles à détecter. Ainsi DarkAvenger.1800 efface aléatoirement un secteur sur le disque dur. Les fichiers ainsi corrompus peuvent être sauvegardés par l'utilisateur sans qu'il s'aperçoive de la perte d'informations. Lorsque l'utilisateur veut restaurer les données sur son disque dur, les fichiers corrompus sont restaurés et les données définitivement perdues.

Enfin la créativité de Dark Avenger ne s'arrête pas là [2]. Il met en oeuvre le premier Bulletin Board System3 d'échange de virus, le Virus eXchange BBS. L'administrateur de ce BBS est un étudiant en informatique de l'université de Sofia. Le système propose deux types de fichiers en téléchargement, des programmes antivirus en shareware et des virus. Pour pouvoir accéder à la base de données des virus et télécharger leur code source, il faut auparavant uploader un virus. Rapidement, le nombre de virus disponibles dépasse les 300. L'objectif de Dark Avenger est clair, encourager la création de virus et l'esprit de compétition entre développeurs. Il fait ainsi de la Bulgarie le pays leader du développement de virus, certains chercheurs parlent alors de l'Usine à Virus Bulgare.

1.2  De nouvelles techniques virales

1.2.1  Polymorphisme

Le terme polymorphe vient du mot grec LGRcmrbnpol'us signifiant nombreux et du mot LGRcmrbnmorf>h qui signifie forme du corps, apparence [3]. Une entité polymorphe peut donc prendre plusieurs formes différentes.

Au début des années 1990, le fonctionnement d'un antivirus est essentiellement basé sur le mécanisme des signatures virales. Pour chaque virus détecté, une signature unique et propre à ce virus est élaborée souvent à partir de son code source. Ainsi, si cette signature est détectée sur un système c'est que le virus correspondant s'y trouve. En fait, quand un utilisateur achète un antivirus, il achète une base de données de signatures virales et un programme qui va scanner son système à la recherche des dites signatures. Jusqu'à l'avènement des virus polymorphes, ce mécanisme a été relativement efficace malgré la nécessité de mettre à jour fréquemment sa base de données de signatures.

S'inspirant du code source de Cascade et des travaux du programmeur allemand Ralph Burger sur le virus Vienna4, Mark Washburn développe, en 1990, la première famille de virus polymorphes: la famille Chameleon. Elle regroupe les virus suivants - dans l'ordre chronologique d'apparition et du plus simple au plus complexe: 1260, V2P1, V2P2 et V2P6.





Routine de chiffrement du virus 1260: Ce graphique montre deux exemples de routine de déchiffrement du virus 1260. Il est intéressant de noter que les deux fichiers contiennent chacun les huit mêmes instructions - elles configurent la boucle de chiffrement. Les autres instructions sont choisies au hasard, de manière à ne pas affecter le contenu des registres utilisés par les routines de déchiffrement. Ce mécanisme rend le virus impossible à découvrir à partir d'une simple recherche de motifs hexadécimaux.

D'après Virus Bulletin - novembre 1993 - page 14


Figure 3: Code de chiffrement du virus 1260



À la différence de Cascade, le code des virus Chameleon n'est pas simplement chiffré, il change à chaque infection. Pour arriver à ce résultat, le code des virus contient deux clés de déchiffrement. Chaque octet du corps des virus est transformé à l'aide d'un OU EXCLUSIF (XOR) avec l'une des deux clés. Seules les instructions de déchiffrement ne sont pas touchées. En plus de ce chiffrement pseudo-aléatoire, les instructions de déchiffrement, au nombre de huit, sont mélangées5. Ce mécanisme rend la détection du virus par signature impossible.

En janvier 1991, Dark Avenger développe et diffuse un logiciel d'un type nouveau: un générateur polymorphe. Son Mutation Engine (MtE) n'est pas un virus en soi, c'est un module qui, lié à un virus, le rend polymorphe. Basé sur un générateur de nombres aléatoires, MtE fournis les routines de chiffrement et de déchiffrement du virus. Dark Avenger annonce, qu'avec son générateur, un virus peut prendre 4 000 000 000 de formes différentes. Les virus développés avec MtE sont difficiles à détecter et très vite, plusieurs d'entre eux, basés sur MtE, voient le jour.

D'autres outils similaires apparaissent par la suite. Fin 1993, nous en comptons sept dont:

1.2.2  Tequila et Maltese Amoeba

Étant donnée que les virus polymorphes développés par Mark Washburn sont basés sur Vienna leur aptitude à se propager est limitée. Ce n'est qu'un an plus tard, en avril 1991, que le premier virus polymorphe provoque une épidémie. Il s'agit de Tequila.

Écrit par deux frères suisses âgés de 18 et 21 ans, Tequila est un virus multipartite6, partiellement furtif et hautement polymorphe. Un ami des auteurs, dont le père distribue des logiciels de jeu, dérobe le virus et l'inclus aux disquettes de jeu. Le virus est ainsi diffusé à grande échelle. Son mode d'action est standard: quand un programme infecté est exécuté, il s'installe dans le Master Boot Record du disque dur. Lors du démarrage suivant, le virus se charge en mémoire prêt à infecter les programmes exécutés. En fonction de la date et du nombre de fichiers infectés, il affiche une courbe fractale de Mandelbrot.

Tequila utilise un algorithme de chiffrement variable ce qui en fait un virus polymorphe difficile à détecter. Il met en oeuvre une autre subtilité qui le rend furtif. Afin d'éviter les infections à répétition, il marque les fichiers infectés en mettant les secondes à 62 dans l'heure de modification. L'explorateur de Windows n'affichant pas les secondes le marqueur est invisible pour utilisateur non averti.

Il faut plusieurs mois pour que les antivirus arrivent à détecter efficacement Tequila. À peine y sont-ils arrivés, qu'un nouveau virus encore plus difficile à repérer est découvert: Maltese Amoeba.

Écrit dans l'île de Malte, c'est en Irlande qu'il est repéré pour la première fois en septembre 1991 - ce qui montre sa faciliter à se propager. Maltese Amoeba est un virus polymorphe, résident en mémoire et infecteur rapide s'attaquant aux fichiers .EXE et .COM. Le 15 mars et le 1er novembre il écrase les premiers secteurs des disquettes et disques durs. Ensuite, il fait clignoter l'écran et éteint l'ordinateur. Au redémarrage, il affiche à l'écran les quatre premiers vers des Auguries of Innocence du poète anglais William Blake (voir Fig. 4).

To see a world in a grain of sand,
And a heaven in a flower,
Hold infinity in the palm of your hand,
And eternity in an hour.
THE VIRUS 16/3/91


Figure 4: Le message de Maltese Amoeba



Comme algorithme de polymorphisme, Maltese Amoeba utilise un mécanisme similaire au virus 1260. La majeure partie de son code est chiffrée et il utilise une clé de déchiffrement différente en fonction du type de fichier qu'il infecte. C'est un infecteur rapide, un simple accès en lecture sur un fichier suffit donc à l'infecter. Enfin c'est un virus résident, qui une fois actif se cache dans la partie haute de la mémoire vive disponible.

1.2.3  Les générateurs de virus

Même si la programmation d'un virus informatique est auréolée de mystères, ce n'est pas un exercice intellectuel insurmontable. Les générateurs de virus vont simplifier encore davantage la tâche. Avec de tels outils, chacun peut créer son propre virus en cliquant sur des menus déroulants et en sélectionnant des options parmi une liste d'actions et de modes d'infection plus ou moins exhaustive.

Le premier d'entre eux, GenVir, voit le jour en France en mars 1991. Son auteur, J. Struss, le développe et le distribue sous forme de shareware. Son objectif est d'évaluer les performances des logiciels antivirus avec de nouveaux virus. Il se présente comme un logiciel classique avec ses menus déroulants. La documentation fournie est très détaillée. Plus de dix virus basés sur GenVir sont référencés.

Plus tard, en juillet puis en août 1992, deux nouveaux générateurs de virus voient le jour. Le premier, Virus Creation Laboratory (VCL), est développé par Nowhere Man membre du groupe américain Nuke. Le deuxième, Phalcon-Skism Mass Produced Code Generator (PS-MPC), est developpé par Dark Angel du groupe américain Phalcon-Skism.

VCl possède une interface élaborée basée sur l'environnement de développement de Borland C++. En quelques clics, les fonctionnalités du virus sont choisies et le logiciel produit le code source assembleur correspondant. VCL supporte un grand nombre de charges possibles, le polymorphisme et plusieurs techniques d'infections.

PS-MPC n'a pas l'interface utilisateur élaborée de son concurrent VCL. Par contre, les virus qu'il produit sont plus fonctionnels. La première version de PS-MPC ne permet de créer que de simples virus. Les versions suivantes permettent de mettre au point des virus résidents, ou encore des virus infectant les fichiers .EXE. Enfin ce kit ne propose pas de polymorphisme par contre les virus peuvent être chiffrés avec différents algorithmes.

Plusieurs autres générateurs de virus voient le jour dans les mois et les années qui suivent: La profusion et la diversification des générateurs de virus, multiplient le nombre de virus potentiels et augmentent donc le risque d'infection des ordinateurs. Ce phénomène pousse les éditeurs de logiciels antivirus à améliorer continuellement leurs algorithmes de détection et d'éradication des souches virales.

1.3  Les virus de macro

Une macrocommande est un terme générique pour désigner un moyen de mémoriser un enchaînement de tâches au sein d'un logiciel. Ainsi, une macrocommande peut automatiser la sauvegarde des fichiers toutes les minutes ou encore la saisie d'informations dans un formulaire. La macro est écrite dans un langage interprété spécifique au logiciel utilisé.

Les virus de macro sont des macrocommandes particulières qui se reproduisent d'elles-mêmes au sein des fichiers de données gérés par les logiciels implémentant des langages de macro. Par exemple, lorsqu'un fichier Word contenant un virus de macro est ouvert, le virus se recopie automatiquement dans le modèle global de Word - NORMAL.DOT. Ainsi le virus pourra infecter tous les fichiers qui seront créés par la suite. L'avantage des virus de macro réside dans le fait que la propagation n'est plus limitée par le type de système d'exploitation.

L'avènement des premiers virus de macro provoque un mouvement de panique chez les utilisateurs et chez les éditeurs de logiciels antivirus. En effet, malgré plusieurs alertes des spécialistes sur la possibilité d'utiliser ce type de vecteur pour propager des virus, aucun logiciel antivirus ne détecte les virus de macro en 1995.

1.3.1  Le virus Concept

Comme nous venons de le voir, Microsoft Word dispose de son propre langage de programmation. Lors de la découverte de Concept en août 1995, ce langage est le Word Basic qui, comme son nom l'indique est une réminiscence du langage Basic.

Lors de l'ouverture d'un fichier de données, Word, par défaut recherche dans le document la présence de la macro AutoOpen. Si cette macro existe, il l'exécute sans en informer l'utilisateur. En générale, cette macro configure l'environnement de travail tel que le document ou l'utilisateur l'ont prévu. Microsoft Word n'implémente pas de mécanisme de gestion des privilèges, ainsi une macro peut effectuer des changements permanents.

Dans le cas de Concept, le fonctionnement de la macro AutoOpen se déroule selon les étapes suivantes7:
  1. La macro AutoOpen commence par vérifier si l'ordinateur n'est pas déjà infecté en recherchant la présence d'une macro nommée PayLoad. Si c'est le cas, le déroulement de AutoOpen s'arrête.
  2. Un deuxième test cherche ensuite à vérifier la présence de la macro FileSaveAs. Si le test est positif, le virus installe un drapeau interne appelé TooMuchTrouble et le déroulement de AutoOpen s'arrête.
  3. Si ces deux tests sont passés avec succès, le virus ajoute quatre nouvelles macros dans l'environnement par défaut de l'utilisateur, stocké dans le fichier normal.dot. Ces macros sont: AAAZAO, AAAZFS, PayLoad et FileSaveAs.
  4. Le virus ouvre ensuite une fenêtre de message affichant le chiffre 1. Ce message semble être un compteur du nombre d'infections, mais en raison d'un bogue des programmeurs du virus, ce compteur ne fonctionne pas.
  5. Une fois que l'utilisateur clique sur ce message, le virus devient résident. Lorsque un fichier est enregistré à partir de la commande File/SaveAs8, le virus copie ses quatre macros dans le nouveau fichier.

Sub MAIN
 REM That's enough to prove my point
End Sub
 


Figure 5: La macro PayLoad de Concept



Concept n'a pas d'action néfaste en lui-même, la macro payload n'est jamais exécutée. Elle contient juste une remarque (voir Fig. 5) tendant à montrer qu'il s'agit d'une preuve de concept. Dans son analyse du virus, Sarah Gordon explique que quelques changements triviaux dans le code du virus suffisent pour activer la macro PayLoad.

Ce premier virus de macro fonctionne avec Word aussi bien sous DOS, sous Windows et sous MacOS. En un mois, il fait le tour du monde et continue à se propager pendant plusieurs années9 (voir Fig. 5). En septembre 1995, la société Digital Equipment Corporation (DEC), l'un des principaux fabricants de matériel informatique, distribue par accident des copies du virus Concept aux participants à une conférence DECUS10. Dans le même temps, Microsoft diffuse deux CD ROM intitulés respectivement Microsoft Windows95 Software Compatibility Test et The Microsoft Office 95 and Windows 95 Business Guide. Tous les deux contiennent le virus Concept11. En octobre de la même année, la compagnie anglaise ServerWare diffuse un CD ROM intitulé Snap-On Tools for The Windows NT Professional contenant des fichiers infectés par concept.

1.3.2  Le virus Laroux

En juillet 1996 un nouveau virus de macro est découvert simultanément dans les réseaux informatiques de deux compagnies de forage pétrolier situées respectivement en Alaska et en Afrique du sud. Ciblant les fichiers Microsoft Excel, Laroux, est programmé dans le langage de macro Visual Basic for Application (VBA). À cette époque seuls Excel et Access utilisent VBA, Word met toujours encore en oeuvre Word Basic.

À l'instar de son cousin Concept, Laroux ne contient pas de charge effective, c'est juste un virus au sens propre, c'est à dire un programme qui se reproduit. Son fonctionnement est basé sur deux macros auto_open et check_files. Comme pour Word, la macro auto_open est lancée à chaque ouverture d'une feuille de calcul Excel. Dans le cas de Laroux, auto_open exécute la macro check_files. Ensuite le déroulement de l'infection suit les étapes suivantes:
  1. La macro check_files cherche le fichier PERSONAL.XLS dans le répertoire de démarrage de Excel XLSSTART;
  2. Ensuite, le virus cherche la présence de procédures en VBA dans le classeur Excel ouvert. Il y a alors, quatre solutions possibles:
    1. Le fichier PERSONAL.XLS n'existe pas et le classeur ouvert ne contient pas de procédures VBA. Dans ce cas, le déroulement de la macro check_files s'arrête;
    2. Le fichier PERSONAL.XLS n'existe pas mais le classeur ouvert contient au moins une procédure VBA. Cela signifie que le virus s'exécute pour la première fois, dans ce cas, il crée le fichier PERSONAL.XLS et ce copie dedans. Au prochain démarrage d'Excel, le virus sera automatiquement exécuté12;
    3. Le fichier PERSONAL.XLS existe et le classeur ouvert ne contient pas procédure VBA. Dans ce cas, le virus se copie dans le classeur en tant que procédure;
    4. Le fichier PERSONAL.XLS existe et le classeur ouvert contient au moins une procédure VBA. Dans ce cas aussi, le déroulement de la macro check_files s'arrête;
Dans son analyse du virus Laroux, Sarah Gordon13 conclut en rappelant, que déjà, lors de l'épisode de Concept elle avait mis en garde contre l'émergence des macrovirus. À l'époque, en août 1995, elle spécifiait que les techniques utilisées pour développer des virus de macro étaient tellement simples, qu'elle étaient à la portée de tous et qu'il fallait s'attendre à voir de plus en plus de virus de ce type14.

1.3.3  Evolutions

La simplicité de développement et de diffusion des virus de macro provoque une explosion de leur nombre dans les années qui suivent 1995. En septembre 2001, Vesselin Bontchev15, dénombre: La profusion de virus de macro est telle qu'ils inversent les tendances des alertes virales recensées. Ainsi, en 1995, les virus systèmes représentent 80% des alertes, tandis qu'en 1998, ce sont les macrovirus qui constituent 80% des alertes virales.

References

[1]
Solomon (A.),  A brief history of pc viruses , 1993. Consultable sur http://vx.netlux.org/lib/aas14.html.

[2]
Bontchev (V. V.),  The bulgarian and soviet virus factories , First conférence - Virus Bulletin, 1991, p. 11–25. Consultable sur http://www.people.frisk-software.com/\~bontchev/.

[3]
Bailly (A.), Abrégé du dictionnaire Grec Français. Librairie Hachette, 1901. Consultable sur http://home.tiscali.be/tabularium/bailly/.

1
Virus Bulletin - Février 2002 - Virus Dissection - Fridrik Skulason.
2
http://www.people.frisk-software.com/\~bontchev/
3
Un Bulletin Board System ou BBS est un système informatique qui, à partir d'une ligne téléphonique et d'un terminal, permet à ses utilisateurs de télécharger des logiciels ou des données, d'échanger des messages, de lire les nouvelles, de jouer en réseau, etc. Les BBS sont les précurseurs du World Wide Web actuel. Voir http://en.wikipedia.org/wiki/Bulletin_board_system.
4
En 1987, Ralph Burger désassemble le virus Vienna et publie les résultats dans son livre Computer Viruses: a High-Tech Disease.
5
"The Shape Shifters" - Virus Bulletin - Novembre 1993.
6
Le multipartisme est la caractéristique des virus qui infectent simultanément les fichiers et les zones systèmes comme le secteur de boot.
7
"What a (Winword.)Concept" - Sarah Gordon - Virus Bulletin - Septembre 1995
8
Fichier / Enregistrer sous
9
Aujourd'hui encore, il existe plusieurs centaines de variantes de Concept en circulation.
10
Digital Equipment Corporation Users
11
Afin de minimiser l'affaire, Microsoft rebaptise le virus en le nommant Prank ce qui signifie escapade, farce. Deux mois plus tard, Microsoft livre un correctif nommé ScanProt et destiné à protéger les ordinateur de Concept. C'est l'effet inverse qui se produisit, et très vite les nouveaux virus de macro Word utilisèrent ScanProt pour se propager.
12
À chaque fois que Excell démarre, il charge automatiquement l'ensemble des fichiers contenu dans son répertoire de démarrage.
13
Excel Yourself! - Sarah Gordon - Virus Bulletin - août 1996
14
The techniques used by this virus are so simple that any idiot could use them to construct similar viruses. If history is any indicator, we can expect to see more of this type of virus.
15
ftp://agn-www.informatik.uni-hamburg.de/pub/texts/macro/Macrolst.019
Page précédente SourceForge.net Logo

This document was translated from LATEX by HEVEA.