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 <arch type>] <object file> -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