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 - dissection du virus Extreme
(Article écrit par Xavier Leclercq et extrait d'A-News (Amiga News) - juillet 1990)
|
|
Comme on me réclame à corps et à cris un désassemblage (je me fais plaisir également), en voici un qui provient
d'un nouveau microbe : l'Extreme. Le code de celui-ci n'est pas trop dur ni trop facile à comprendre et surtout
assez court ($2e7). C'est en désassemblant les virus que j'ai, pour ma part, réalisé mes premiers pas en assembleur
et je vous invite à prendre ce chemin si vous vous estimez débutant en la matière...
L'Extreme est "compatible" avec les ROM 1.2, 1.3 et sans doute avec la version 1.4/2.0.
Voici quelques explications supplémentaires sur le code : l'Extreme est un des seuls virus à utiliser la pile
pour toutes une série d'opérations. En effet, la manipulation de la pile est très courte en temps machine et
permet des gains d'octets qui finissaient par devenir appréciables (d'ailleurs c'est dans la pile superviseur
que le virus se niche).
Pour par exemple réaliser un saut inconditionnel (jmp), il pratique de la manière suivante :
pea AdresseDuSaut ; empile l'adresse
rts ; au rts, l'Amiga prendra l'adresse de retour sur la pile l'adresse qui est précisément : AdresseDuSaut...
|
En fait, et pour bien comprendre, cela équivaut à l'instruction assembleur :
...et l'instruction "pea" est similaire à :
lea AdresseDuSaut(pc),a0
move,l a0,-(a7) ; on empile
|
Le ST, par exemple, utilise énormément l'instruction "trap" et "pea" mais sur Amiga ce n'est pas très courant.
Une petite explication au niveau de l'instruction "SetFunction" (utilisée également par le virus IRQ Team pour
modifier OldOpenLibrary()) : elle sert donc à modifier le vecteur qui réalise le branchement d'une fonction
de bibliothèque. Ici c'est DoIo, voici comment on le détermine :
$ffff-$fe38 = $01c7 +1 (car négatif complément à "1") = -454 -2 = -456 ("-2" car c'est un word = 2 octets occupés par le code
de l'instruction jmp, la table étant constituée de code jmp et de vecteurs).
L'instruction "SetFunction", et ceci est très important, réalise une somme de contrôle de la bibliothèque
sans quoi l'ordinateur risque de "planter". Setfunction réalise en effet ceci :
move,l $4.w,a6
move,l NouveauVecteurDOIo,-454(a6)
|
...mais en plus effectue la somme de contrôle.
L'auteur de ce virus a laissé son numéro de téléphone ! A supposer bien entendu que c'est le sien,
il court là un grand danger : je vous rappelle, en effet, que c'est dans une situation identique que
se trouve l'auteur présumé d'un virus assez connu, le DASA (Byte Warrior), jugé en Allemagne pour
la conception de ce microbe.
|