OTX est un désassembleur pour MacOSX. Les exécutables des systèmes MacOSX sont dans un format propriétaire appelé Mach-O. HexFiend est un éditeur Héxadécimal graphique pour MacOSX.





0x01. DESASSEMBLAGE



otx va désassembler un binaire vers la sortie standard par défaut. Il s'agit d'un programme à utiliser dans le terminal :


Usage: otx [-ledcmbnrvpo] [-arch ] 
	-l    n'affiche pas les adresses locales
	-e    n'ajoute pas de tabulation dans la sortie
	-d    affiche la section de donnée .data
	-c    ne calcule pas le hash MD5
	-m    n'affiche pas les informations à propos de objc_msgSend
	-b    sépare les bloc logiques
	-n    don't demangle C++ symbol names
	-r    ne montre pas les type de méthodes retournés Obj-C
	-v    ne montre pas les membres des types de variable Obj-C
	-p    affiche une barre de progression
	-o    vérifie si l'exécutable a été protégé
	-arch spécifie l'architecture dans un binaire universel : ppc ou i386
 
otx CrackMe > CrackMe.txt



0x02. FAILLE



C'est une fois désassemblé que nous allons décortiquer le programme. Appelé aussi du deadlisting (analyse statique) par opposition au livelisting (analyse dynamique) ce genre d'analyse requiert de la patience et un outil de désassemblage.

La protection résistera à hauteur de la pertinence de la recherche. Par exemple, une recherche dans la sortie d'OTX sur du texte comme "serial" ou encore "trial" permet d'ajuster le périmètre de recherche.





0x03. MODIFICATION


Une fois la faille déterminée et les décisions prises, nous utiliserons HexFiend pour éditer les instructions pour que le programme agisse dans notre sens.





0x04. EXEMPLE D'UN CRACKME


otx ./crackme > ./crackme.log 
+1901	000407fd  a1f0b10500			  movl		  0x0005b1f0,%eax			    dictionaryWithObjectsAndKeys:
 +1906	00040802  c7442420209b0500		  movl		  $0x00059b20,0x20(%esp)	    http://www.crackme.net
 +1914	0004080a  c744241c309b0500		  movl		  $0x00059b30,0x1c(%esp)	    deactivate
 +1922	00040812  c7442414609b0500		  movl		  $0x00059b60,0x14(%esp)	    trial
 +1930	0004081a  c744240c909b0500		  movl		  $0x00059b90,0x0c(%esp)	    activate
 +1938	00040822  89442404				  movl		  %eax,0x04(%esp)

On reconnait les procédures activate, trial et activate. Plutôt que de chercher quelque part un saut conditionel (je, jne) nous allons modifier le comportement du programme pour qu'il fasse activate, activate & activate !

Dans Hexfiend on va chercher :


c7 44 24 1c 30 9b 05 00  c7 44 24 14 60 9b 05 00  c7 44 24 0c 90 9b 05 00
 deactivate               trial                    activate

pour le remplacer par :


c7 44 24 0c 90 9b 05 00  c7 44 24 0c 90 9b 05 00  c7 44 24 0c 90 9b 05 00
 activate                 activate                 activate



0x05. TELECHARGEMENTS



OTX sur OSX Ninja
Hexfiend sur Ridiculousfish




   =>   Écrit par : Nicolas, le 22 novembre 2010


 
Mots clés :  
  reverse 
  
  macos 
    >   Articles connexes :

GDB - Cas d'école



Format String


Le "format string" est une vulnérabilité lié au paramètre qu'il est possible de donner à l'instruction printf et ses dérivés. Nous allons l'exploiter dans un cas d'école

Comment gagner du temps sur Internet



/tmp et /var/log en noexec sur macOS



3783249