La magie de l'ELF
by Emile `iMil' Heitor - 2008-12-10
En comparant le projet qui m’obsède jour et nuit et les outils similaires déjà existants (crunchgen(1), rescue
), j’en suis venu à me poser des questions sur le cas d’un mode “full static”. Pour mémoire, BeastieBox “trouve” la fonction à appeler fonction de argv[0]
, et je pars du principe que chaque nom de fonction doit être construit dynamiquement. Ce tour de passe-passe est facilement geré par les fonctions dlopen(3) / dlsym(3)
dans le cas d’un binaire compilé dynamiquement, mais quid d’un binaire beastiebox
compilé à l’aide du swtich -static
? Point de ld.so_elf
à la rescousse ici, la seule solution qui m’est apparue… c’est d’attaquer le binaire comme le fait précisemment ld.so_elf
, en mmap
‘ant le binaire et en l’adressant via les structures ELF.
J’ai posté l’explication dans la Mollacademy, et le code associé de BeastieBox est visible ici, ici et là.