Dans le processus de recherche du fonctionnement (et des failles éventuelles) d'un programme compilé, un désassemblage est souvent nécessaire (voire obligatoire).

Un des outils les plus connus reste IDA. Mais il existe un autre outil sous Linux...

Radare2 est un désassembleur puissant avec des fonction évoluées :

  • reverse engineering de code
  • transformation en code plus lisible (ex: mov eax, 18 -> eax=18)
  • graphe des appels systèmes (et bien d'autres)

Et beaucoup d'autres choses que je n'ai pas encore regardé, n'étant pas encore totalement opérationnel sur ce coté du pentesting. mais ce post à surtout pour but de parler du fait que radare2 peut être controlé par un script python, ce qui permet d'automatiser certaines opérations.

Voici à titre d'exemple, un script python qui à partir d'un binaire génère une image jpg du graphe des appels du binaire :

r2graphasm.py :

#!/usr/bin/env python3 

import r2pipe
import sys
import os

try:
  binary=sys.argv[1]
except:
  print ("Usage : %s <binary>" %(sys.argv[0]))
  sys.exit(2)

try:
  out=os.popen("radare2 -v").read()
  if ("radare2 2." in out): version=2
  if ("radare2 3." in out): version=3
except:
  print ("No radare2 installed ???")
  sys.exit(0)

filename=os.path.basename(binary)

r = r2pipe.open(binary)
r.cmd("aaa")

if (version==2):
  r.cmd('ag main > main.dot')

if (version==3):
  r.cmd("s main")
  r.cmd('agfd > main.dot')

os.system ("dot -Tjpg -o "+filename+".jpg main.dot")
os.remove ("main.dot")

Comme vous pouvez le voir dans le code, certaines fonctions de radare2 ont évolué entre la version 2.x et 3.x. Le script en tient compte.