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 - désassemblage et explication du code source du virus SCA
(Article écrit par Cédric Beust et extrait d'A-News (Amiga News) - décembre 1988)
|
|
Pour la rubrique assembleur de ce mois-ci, nous avons désassemblé le virus SCA. Ceci est un bon moyen de savoir comment il
fonctionne et comment utiliser l'assembleur dans un cas concret, bien que nuisible.
On commence ici. Je rappelle qu'en entrée, A1 pointe sur un IO_REQUEST.
Block initialisé et prêt à l'usage.
Le code qui suit est exécuté durant le redémarrage. A ce niveau, le pointeur CoolCapture() a été revectorisé.
Pour ceux qui l'ignoreraient encore ou qui n'auraient pas compris les lignes qui précédent, tenir le bouton gauche de la
souris appuyé durant un redémarrage vide la mémoire du virus. Mais cela ne désinfecte pas les disquettes atteintes !
Quand on arrive ici, c'est qu'un DoIO a été requis. Le virus doit vérifier s'il s'agit d'une requête concernant le bloc
d'amorce.
Là, on entre dans le coeur du virus.
Note : une aide nous a été apporté pour la requête en 030122 :
le code 1 correspond à la commande CMD-RESET. Cette commande réinitialise le device considéré, c'est-à-dire
qu'elle le remet à sa configuration par défaut, qu'elle interrompt toutes ses entrées-sorties en cours d'exécution, et qu'elle
remet à 0 toutes les structures internes de données.
Ici commence la routine qui inscrit votre message préféré au milieu de la célébrissime bande rouge, qui n'est autre que
le résultat d'une vulgaire liste Copper...
Donc la fenêtre aura pour dimensions ($D5-$75) x ($F6-$2E) = 96x200.
Voici la signification des bits de DMACONWR :
- Bit 15 (SET/CLR) : s'il est à 1 (SET), les bits suivants qui sont à devront être également mis à 1 dans DMACON, s'il est à 0
(CLR), ils devront être mis à 0.
- Bit 14 (BBUSY) : lecture seulement. Est à 1 tant que le Blitter n'a pas terminé l'opération qu'il est en train de faire.
- Bit 13 (BZERO) : lecture seulement. Est à 1 si durant la dernière opération du Blitter, la sortie était toujours 0.
- Bit 11, 12 : inutilisés.
- Bit 10 (BLTPRI) : bit de priorité du Blitter. Lorsqu'il est à 1, le Blitter a priorité totale sur le 68000.
- Bit 9 (DMAEN) : autorise les canaux DMA. Ce bit doit être à 1 si on veut que les bits 0 à 8 seront pris en considération.
- Bit 8 (BPLEN) : autorise le canal DMA pour les plans de bits.
- Bit 7 (COPEN) : autorise le canal DMA du Copper.
- Bit 6 (BLTEN) : autorise le canal DMA pour le Blitter.
- Bit 5 (SPREN) : autorise le canal DMA des sprites.
- Bit 4 (DSKEN) : autorise le canal DMA du disque.
- Bit 3 à 0 (AUD x EN) : autorise les canaux DMA pour les différents canaux sonores.
Plus précisément, le fait d'ajouter #$122 au registre augmente le rouge d'une unité, le vert de 2 et le bleu
de 2. C'est cette routine qui crée l'apparition et la disparition graduelle des messages.
Début de la liste Copper.
Compteurs absolu et relatif. Petit jeu amusant : mettre l'adresse qui suit à une valeur qui se termine par "f" (exemple : 002f),
amorcer la disquette (après avoir validé la somme de contrôle du bloc d'amorce puis démarrer une disquette protégée qui ne
contient pas le virus. Devinez ce que vous verrez...
Noms des bibliothèques utilisées.
Et enfin, les messages. Remarquez que chaque phrase est précédée par sa longueur et son abscisse. C'est plus pratique que
de devoir les calculer.
Là, c'est un JMP ($4EF9) qui sera initialisé par la suite.
Pour boucher les trous.
|