Le virus que nous allons étudier se reproduit
en infectant un objet programme d’une librairie, de sorte qu’il soit évalué à
la place de ce programme lorsque celui ci est appelé.
Avant d’entamer la recherche d’une cible, le
virus teste si il y a assez de mémoire pour se répliquer, et si il se trouve
bien sur une HP48 G ou GX (et pas une S ou SX). Ensuite, pour rechercher une
librairie à infecter, il lit dans une zone mémoire où sont répertoriées les
adresses de toutes les librairies de la HP48. Il les examine une à une, en
effectuant des tests pour éliminer les librairies situées en ROM, et pour voir
si elles ne sont pas déjà infectées. Puis il examine au plus les 5 premiers
objets contenus dans cette librairie à la recherche d’un programme.
Une fois ce programme trouvé, on quitte le
code en langage machine pour une séquence en RPL étendu qui construit un entier
binaire dont la taille vaux celle du virus. On enregistre ensuite cet entier au
début du Port 0. Cette astuce permet d’éviter de changer tous les pointeurs
vers les objets situés entre la fin de la mémoire libre et le début du Port 0,
qu’il faut décaler pour pouvoir insérer le virus dans la librairie. Ce sont des
programmes résidants en ROM qui effectuent donc ces taches, qui autrement
auraient été extrêmement longues à programmer. D’autre part, on n’essaye pas de
modifier le programme au sein de la librairie, ce qui imposerait de
reconstruire toute la Link Table. On préfère installer le virus entre le Config
Object et le CRC de la librairie, et le faire se terminer par un saut en
direction du programme. On modifie alors la Link Table pour que, lorsque le
programme infecté de la librairie soit appelé, le virus soit exécuté à sa
place. Une librairie n’étant pas éditable par la HP48, une telle supercherie
passe inaperçue.
Pour ce faire, il faut encore décaler la zone
mémoire comprise entre la fin de l’entier binaire et la fin de la librairie à
infecter vers le début du Port 0, en écrasant l’entier binaire. Puis dans
l’intervalle ainsi ménagé entre la fin de la librairie à infecter et le début
de la librairie suivante, recopier le virus.
Une fois cette copie installée dans la librairie,
il reste à modifier la Link Table pour que le virus soit exécuté à la place du
programme infecté, à permettre au nouveau virus de connaître l’emplacement du
programme qu’il parasite pour pouvoir l’exécuter, à recalculer les pointeurs
vers les librairies qui ont été décalées car elles étaient entre le début du
Port 0 et la librairie à infecter, et à terminer l’exécution du virus.
Aucun commentaire:
Enregistrer un commentaire