This book deals with computer viruses envisaged from three different points of view, namely the theoretical fundamentals of computer virology, algorithmic and practical aspects of viruses and their potential applications to various areas. The theoretical formalization by means of Turing machines, self-reproducing automata and recursive functions enable a precise and exhaustive description of the different types of malware. It follows that the main stakes of computer defense and antiviral fighting are easily highlighted. Detailed analysis of the source code for representative members of each virus/worm family allows the reader to grasp the basic algorithmic aspects involved in self-reproducing codes. The C programming language has been systematically used for a better understanding of the considered codes.