=====================================================================
4 . VIRUS : INTRODUCTION AUX VIRUS ELF
(Part I)
=====================================================================

Date : 05/07/2003
Auteur : deepfear (DHS Admin)

Introduction :
Un exécutable au format ELF est compose d' une en-tête ELF suivi d' une table de programmes ou de sections ou des deux . l' en-tête ELF est tjrs au tout début du fichier tandis que les deux autres tables, ils sont situés selon la définition de l' en-tête ELF .
Cet exécutable s'organise sous la forme suivante : (figure 1-1 )

- En-tête ELF : contient les informations qui décrit l' organisation du fichier .
- Table d' en-tête de programme : indique au système comment créer l'image du processus (figure 2) .
- Segment 1 (texte) : c' est la zone ou contient le code qui sera exécute .
- Table d' en-tête de sections : tous simplement elle décrit les sections du fichier .
- Les sections : contiennent les données brutes d' informations du fichiers : instructions, données , table de symbole …

(figure 2) :
1- [TTTTTTTTTT]
2- [TTTTTTTTPP]
3- [PPPPPPTTTT]
4- [DDDDDDDDPP]

1-2 segment texte (T)
3-4 segment donnée (D)
(P) : padding (remplissage) il sert a compléter les segments pour que chaque page fasse ( c' est a dire chaque segment doit être multiple de 4ko ) .
(PAGE_SIZE = 4ko pour linux x86 [man getpagesize ] pour savoir la sienne ;) )

Virus :
Pour infecter un Elf on va essayer de faire une copie et d insérer le code malicieux dedans .
Puisque le segment texte contient le code qui sera exécute , le virus doit être insérer dans ce segment .
Si on modifie le S.T (segment texte) on risquera d' avoir des problèmes donc il sera préférable de l' insérer après le segment le segment texte (comme le montre la figure 1-2) en ajoutant une page qui sera termine par des 0 pour quelle soit égale à PAGE_SIZE .
En comparant la figure 1-1 et 1-2 on remarque que les offsets de certains segments doivent être changer notamment celui du segment 2 (donnée) ou il faut ajouter la taille du virus a son offset . sinon on va ajouter la taille du virus a la taille du segment texte pour qu'il soit admis comme une partie de ce segment et qu il soit charger .
En ce qui concerne la partie section : si
{
la table d' en-tête de programmes est situe avant celle de sections(la table d' en-tête de section est situe après le virus ;) figure 1-2 ) on ajoute PAGE_SIZE a l' index de section et a chaque offset de sections ;
}
sinon { on fais rien ; // figure 3 }

Pour faire exécuter le virus, il faut que le flux d' exécution (point d' entrée ELF) contienne l' adresse du code du virus .
L' adresse du virus est l' offset du début du segment texte + sa taille voir figure 1-2 .
NB : faut pas oublier de rendre la main J au vrai code (prg) pour que le programme s'exécute normalement .
Voilà l'étude théorique est finis , le prochain article sera de la pratique (le créer J ).
Si vous n' avez pas compris relisez le bien en utilisant les figures sinon y a le forum ;) .


ciao



...::: ELF Infector PART 1 By deepfear:::...