Nicolas SURRIBAS

Sécurité Informatique / Capture The Flag / Développement / Réseaux / PenTest

Tutoriel d'utilisation de HT Editor

Rédigé par devloop - -

HT Editor est un désassembleur et éditeur d'exécutables. Il est sous licence GNU GPL et est disponible pour Linux, *BSD et Windows.

Il y a peu d'attrait pour les désassembleurs sous Linux et la plupart ne sont pas simple d'utilisation (tout en ligne de commande par exemple). Cela peut s'expliquer par le fait que les programmes sous Linux sont généralement open-source et gratuits.

HT offre une interface en ncurse permettant de naviguer facilement dans le code, ce qui le rend bien plus agréable à utiliser que le vieux objdump. De plus il est capable de lire différents formats d'exécutables et permet de "switcher" entre différentes vues (hexa, assembleur, entêtes du fichier...)

Dans ce billet on va seulement se concentrer sur l'utilisation du logiciel (touches à connaître) pour naviguer facilement.

Pour lancer HT (après compilation, le nom du programme doit être "ht"), le plus simple est de lui passer le fichier à analyser en paramêtre. Mais vous pouvez aussi le lancer sans arguments et utiliser la touche F3 ou faire un Alt+F > Open puis donner le chemin du fichier.

Une fois le fichier ouvert vous vous retrouvez face à la vue par défaut qui est un éditeur hexadécimal tout ce qu'il y a de plus banal :

Quelque soit la vue dans laquelle vous vous trouvez, vous pouvez toujours vous déplacer avec les touches de direction ainsi qu'avec les touches PageUp et PageDown.
En haut de la fenêtre se trouve les menus accessibles avec la touche Alt + lettre en rouge.
En bas de la fenêtre sont marquées les commandes accessibles par les touches "F" (F1, F2... jusqu'à F10) qui sont en haut de votre clavier.

La touche F6 fait apparaître un menu qui vous permet de changer le mode d'affichage. A chaque fois que vous vous retrouvez sur un menu ou une boîte de dialogue, sachez que vous pouvez en sortir avec la touche Echap.

Le mode auquel nous allons nous intéresser est le mode "elf/image" qui est le plus évolué pour analyser le code assembleur. Déplacez vous avec les touches et tappez sur Entrée pour valider.
L'étape suivante consiste à trouver le point d'entrée du programme (_start). C'est lui qui va faire appel à la fonction "main" du programme. Pour cela scrollez vers le bas et vous devriez le trouver sans difficultés.

Les adresses vers lesquelles on peut "naviguer" sont en blanc dans le code. Il suffit de tapper sur la touche Entrée pour s'y rendre. Pour faire marche arrière vous pouvez utiliser la touche Backspace.
Faites Entrée pour vous rendre dans le main.

HT ne résoud pas tout seul le noms des fonctions (libc et autres librairies) quand le programme a été compilé dynamiquement. A la place on trouve des noms de fonction du type "wrapper_XXXXXXX_XXXXXXX" qui ne sont pas très parlantes.
Pour trouver le nom des fonctions correspondantes on peut parfois le faire au feeling (par exemple une chaine de formatage en premier argument est bon signe pour un printf) mais il est plus efficace d'utiliser objdump.
objdump -R /tmp/locale/s
/tmp/locale/s:     file format elf32-i386

DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE
08049e48 R_386_GLOB_DAT    __gmon_start__
08049e10 R_386_JUMP_SLOT   mkdir
08049e14 R_386_JUMP_SLOT   setenv
08049e18 R_386_JUMP_SLOT   chmod
08049e1c R_386_JUMP_SLOT   execv
08049e20 R_386_JUMP_SLOT   chdir
08049e24 R_386_JUMP_SLOT   __libc_start_main
08049e28 R_386_JUMP_SLOT   strcat
08049e2c R_386_JUMP_SLOT   printf
08049e30 R_386_JUMP_SLOT   fclose
08049e34 R_386_JUMP_SLOT   exit
08049e38 R_386_JUMP_SLOT   getcwd
08049e3c R_386_JUMP_SLOT   memset
08049e40 R_386_JUMP_SLOT   fopen
08049e44 R_386_JUMP_SLOT   fwrite

En faisant le regroupement entre une adresse obtenue par objdump et la première adresse figurant après "wrapper_" dans HT on peut en déduire le nom de la fonction. Par exemple "wrapper_8049e10_80484a0" correspond à la fonction mkdir.

On peut alors changer facilement le label de la fonction. Il suffit de se rendre à l'entrée de la fonction sur le label (qui est toujours de la forme "nom_du_label:" et de tapper sur la touche n pour le changer. On peut aussi insérer de nouveaux labels dans le code.

Remarquez aussi sur l'image précédente que l'on voit les adresses ayant amenées à la fonction ("xref"). Ca peut être utile dans certains cas.

Tout comme pour les labels on peut insérer des commentaires avec la touche #.

Une fois que vous avez terminé, enregistrez votre travail avec F2 puis utilisez F10 pour quitter.

J'ai fait une petite vidéo d'une session d'analyse de code (Google Vidéo) sur un binaire récupéré sur le honeypot. La qualité est pas top après traitement par Google et l'analyse en elle même a été faite rapidement (j'ai quelques erreurs par rapport au code original de l'exploit) mais ce sera probablement suffisant pour montrer la navigation à travers HT.

HT Editor

Classé dans : Non classé - Mots clés : malware

Les commentaires sont fermés.