Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : Assembleur - Antivirus des Zeus Brothers
(Article écrit par Little Zeus et extrait d'Amiga News Tech - février 1990)
|
|
Comment, quoi, que vois-je ? Nos chers Zeus Brothers seraient-ils tombés malades ? Que leur arrive-t-il ?
Ils nous avaient habitué à une programmation de qualité avec leur
Tube-Intro et voilà qu'ils font preuve
d'un manque de maturité flagrant en osant faire publier un antivirus qui, non content d'être lui-même
un virus, ne guérira pas plus de 50% des disquettes infectées.
A ces mots, je vois les intéressés se lever, prêts à me balancer leur clavier en pleine figure. Bon,
ils ont quand même droit à quelques explications. L'antivirus des Zeus Brothers est calqué sur le
fonctionnement du SCA
(Swiss Cracking Association), le plus primitif : il reprogramme les vecteurs CoolCapture et DoIO.
C'est bien et ça empêchera facilement les trois-quarts des virus de se reproduire (je ne me contredis
pas, seule la moitié sera réellement tuée) mais reste l'autre quart. Énumérons quelques-uns de ces phénomènes :
- Le Byte Bandit est l'exemple même du virus étanche aux remontrances des Zeus Brothers : il ne reprogramme ni
le CoolCapture, ni le DoIO général. Il s'attaque à l'interruption de niveau 5, au vecteur DoIO
propre au trackdisk.device et enfin, installe une structure résidente. Ici, je sens que le public néophyte
commence à se demander quel langage je parle. Ne vous en faites pas, je m'expliquerai sur ces points sombres
un peu plus tard.
- Le Byte Warrior (ou DASA) est en fait un antivirus... qui plante l'ordinateur. Après le traitement
à la sauce Zeus Brothers, il ne pourra certes plus se reproduire, mais ses effets pernicieux demeureront : lui
aussi installe une structure résidente, et de plus, il affecte les vecteurs CoolCapture et ColdCapture (patience,
les excités du clavier, je vais venir aux explications).
- L'IRQ est un cas à part : il ne s'installe pas sur le bloc d'amorce mais se greffe sur les fichiers exécutables
de votre disquette. Je sais peu de choses sur son mode de fonctionnement sauf que lui aussi fonctionne avec une
interruption (IRQ signifie Interrupt Request).
C'est parti pour le cours de L.M.
Ça suffit pour les exemples. Les maniaques de l'assembleur sont-ils toujours à leur poste ? Oui ? OK.
C'est parti pour le voyage à l'intérieur de l'Amiga. A titre de renseignement, toutes les explications que
je vais donner sont largement inspirées d'un certain livre de 639 pages qui devrait être le nouveau testament
pour nous tous !
Je passerai sur le vecteur DoIO général. Il est assez expliqué dans les colonnes de la Zeus-saga. Je signalerai
cependant l'existence d'un vecteur DoIO propre à chaque périphérique logique. On le trouve au décalage négatif -28 de la
structure Device. J'ajouterai à l'existence d'un vecteur CoolCapture celle d'un vecteur ColdCapture à l'adresse
Execbase +42. Son fonctionnement diffère un peu de celui de CoolCapture. En effet, il n'y est pas permis
d'utiliser le pointeur de pile (SP) et par conséquent, la routine ne peut pas se terminer par un RTS (les
instructions JSR, BSR et RTS utilisant le pile). On la termine donc avec un JMP (A5).
Les structures résidentes se trouvent un peu partout en mémoire. Elles sont trouvées à l'initialisation par
le premier mot suivi du premier long mot (cfr infra) et leur code est exécuté selon le mode de fonctionnement
de la structure. En voici la forme :
Taille |
Nom |
Rôle |
Word |
MatchWord |
$AFC pour que le système reconnaisse ici une structure résidente |
Long |
MatchTag |
Pointeur sur l'adresse 0 de la structure. Pour que le système vérifie qu'on ait ici une structure résidente |
Long |
EndSkip |
Pointeur sur la fin de la structure |
Byte |
Flags |
Détermine le mode de fonctionnement de la structure : est-elle présente pour créer une bibliothèque ou pour activer une routine ? |
Byte |
Version |
|
Byte |
Type |
|
Long |
Name |
Pointeur sur le nom de la structure |
Long |
IDString |
Pointeur sur les commentaires de la structure |
Long |
Init |
Pointeur sur la routine à exécuter |
L'alternative
Le programme que je propose dispose d'assez de commentaires pour être compris. Je tiens à signaler qu'il
ne tue pas les virus présents sur le bloc d'amorce. Il ne fait que les tuer en mémoire. Si vous désirez
"nettoyer" le bloc d'amorce, le mieux (et le plus simple) est encore d'utiliser la commande "install df0:"
du CLI.
PS : A la dernière minute, j'ai remarqué qu'il restait un bogue
dans la version du programme ci-joint : il détecte et tue en effet une structure résidente appartenant au
système. Cela ne provoque apparemment pas de problèmes de fonctionnement, mais le message d'avertissement
est affiché à chaque fois que le programme est appelé.
|