Fermer le menu
 

Interview : Hopper, le logiciel qui renverse la sécurité du Mac

Stéphane Moussie | | 21:33 |  41

Les deux dernières grosses failles de sécurité touchant le Mac, Thunderstrike et rootpipe, ont été découvertes à l'aide de Hopper Disassembler, un logiciel de rétro-ingénierie permettant de fouiller dans les entrailles de n'importe quelle application. Utilisé par des hackers hors pair, ce désassembleur a également permis de décortiquer UXKit, un nouveau framework privé d'Apple, de mettre en lumière le mode multifenêtre d'iOS 8 et de développer des logiciels modifiant le Finder, entre autres.

Hopper, vendu 89 € en licence personnelle (une version de démonstration est disponible), prend en charge les exécutables Mac, iOS, Linux et Windows. Interview de son créateur, Vincent Bénony.

MacGeneration : Qu'est-ce que permet de faire Hopper Disassembler ?

Vincent Bénony : Hopper Disassembler est un logiciel dont le but est d’étudier le fonctionnement interne d’autres applications. Il les analyse de manière automatique et les structure, un peu à la manière d'un microprocesseur. On parle d’analyse statique de code.

Hopper permet de visualiser le code assembleur, mais aussi de le manipuler de manière interactive. Il permet aussi de débugger, voire même de « décompiler » l’application sous certaines conditions.

Quelle est la différence entre désassembler une application et la décompiler ?

Le désassemblage consiste à transformer une séquence d’octets en suite d’instructions assembleur. C’est la partie la plus simple.

Si l’on regarde une application dans un éditeur hexadécimal, on peut voir qu’il ne s’agit que d’une longue suite d’octets, inintelligibles pour un être humain, où s’entremêlent du code et des données.

L’application TextEdit dans un éditeur hexadécimal

Le désassemblage consiste à simuler le travail de décodage du microprocesseur, afin de savoir quelle instruction il doit exécuter. Et pour ça, le microprocesseur va lire un octet à la fois, jusqu’à ce qu’il reconnaisse une instruction complète, puis exécuter l’action correspondante.

Ainsi, la séquence d’octets « 48 8B 35 07 ED 01 00 » signifiera pour lui « mov rsi, qword [ds:0x100020438] », ou encore « lis en mémoire, à l’adresse 0x100020438, un mot de 64 bits, et stocke cette valeur dans le registre rsi ».

La même application dans Hopper - cliquer pour agrandir

Une fois que chaque instruction a été décodée, Hopper procède à une analyse plus poussée de l’application. Il va pour cela « suivre » le code, et essayer de déterminer tous les chemins d’exécution possibles.

Il recrée donc une partie de la structure logique de l’application, et permet de séparer les différentes instructions en méthodes, elles même découpées en blocs plus petits (appelés Basic Blocks). Il tente aussi de séparer le code des données (comme les chaînes de caractères qui sont affichées lors de l’exécution du programme, par exemple).

Grâce à cette analyse, Hopper est capable d’afficher une représentation plus graphique de l’exécution de l’application.

Le graphe d’une méthode (CFG) - cliquer pour afficher la suite

La décompilation est l’étape suivante : l’idée est d’essayer de retrouver ce à quoi pouvait ressembler le code « original », celui que le développeur a initialement écrit, et qui a été compilé.

En effet, aucun développeur n’écrit directement du code assembleur. Au lieu de cela, il utilise un langage de haut niveau, comme l’Objective-C par exemple, et utilise un compilateur, comme Clang, qui est livré avec Xcode, pour transformer ce langage incompréhensible pour le microprocesseur en assembleur.

Malheureusement, au passage, une grande quantité d’information concernant la structure logique de l’application est perdue, essentiellement pendant la phase d’optimisation, où le code est trituré par le compilateur pour faire en sorte de s’exécuter le plus rapidement possible, ce qui rend le travail de décompilation très compliqué.

Malgré tout, Hopper dispose en interne de nombreuses heuristiques, qui permettent, dans de très nombreux cas, de retrouver cette information. En gros, Hopper fait de manière automatique ce qu’un ingénieur en rétro-ingénierie aurait fait à la main. Pour résumer, Hopper contient des années d’expertise humaine en reverse engineering

À l’issue d’une décompilation de méthode, Hopper est capable de transformer cette séquence d’instructions :

Cliquer pour agrandir

En ceci :

C’est ce que j’appelle du « Pseudo Code », dans le sens où il n’est pas possible de le donner directement à un compilateur, mais il y a de bonnes chances pour que le code qu’avait écrit le développeur soit très proche de celui-ci.

Notez bien que ce que vous voyez sur cette dernière capture résulte d’un processus entièrement automatisé : je n’ai fait que glisser l’application TextEdit sur la fenêtre de Hopper, et j’ai ensuite cliqué sur le bouton « Pseudo Code ».

À l'inverse, qu'est-ce que ne permet pas de faire Hopper et pour quelles raisons ?

Hopper n’est malheureusement pas magique ; il ne peut pas, à coup sûr, décompiler n’importe quelle méthode de manière lisible. Il arrive que des parties d’applications aient été écrites à la main, directement en assembleur, ou que le compilateur ait optimisé de manière agressive certaines parties. Dans ce cas-là, la version décompilée par Hopper est à peine plus lisible que la version désassemblée.

Catégories: 

Les derniers dossiers

Ailleurs sur le Web


41 Commentaires Signaler un abus dans les commentaires

avatar Simeon 20/04/2015 - 10:12

Bel article. Davantage d'interviews de développeurs s'il vous plait !

avatar melaure 20/04/2015 - 11:19 via iGeneration pour iOS

Très intéressant et sympa l'assembleur sur Oric et Amiga ...

avatar Godzil 20/04/2015 - 12:01

Ce logiciel est dans ma buylist depuis un moment :)



avatar bibi81 20/04/2015 - 13:43

Et pour ça, le microprocesseur va lire un octet à la fois, jusqu’à ce qu’il reconnaisse une instruction complète, puis exécuter l’action correspondante.

Dans la vraie vie cela ne se passe heureusement pas comme ça !

avatar Moonwalker 20/04/2015 - 14:34

Article très intéressant.

avatar comass 20/04/2015 - 16:09 via iGeneration pour iOS

c'est du journalisme comme je l'aime

avatar free00 20/04/2015 - 17:50 (edité)

J'utilise Hopper depuis quelques mois parce que je ne peux pas me payer IDA et il est vraiment excellent ! Bravo au développement & excellent article !

avatar Julien Ducos 20/04/2015 - 19:41 via iGeneration pour iOS

Merci MacG, très bonne interview !

avatar iDanny 20/04/2015 - 23:26 via iGeneration pour iOS

Balaise... Mais je suis étonné qu'il arrive à retrouver des noms de variables.
J'ai toujours cru que l'assembleur ne contenait que des adresses et qu'on perdait donc tous les noms de variables créés par le développeur... car après tout, à un niveau aussi bas ces noms ne servent plus à rien.

avatar bsr43 21/04/2015 - 07:25 via iGeneration pour iOS

@iDanny :
Effectivement, il n'est pas possible de retrouver le nom des variables locales, qui sont perdus pendant la compilation, mais ce que vous voyez sur la capture sont des propriétés Objective-C, et celles-ci sont déclarées dans les metadonnées de l'exécutable.

avatar Almux 21/04/2015 - 07:41

Serait-il possible de remplacer (simplement) les icônes plates des nouvelles versions d'OSX par les anciennes de l'aire Forstall, à l'aide de Hopper?

avatar bsr43 21/04/2015 - 07:49 via iGeneration pour iOS

@Almux :
Dans la plupart des cas, les icônes ne sont pas dans le code, mais dans les resources de l'application. Il n'est donc pas utile de passer par Hopper, on peut le faire directement depuis le Finder !

avatar iDanny 21/04/2015 - 09:48 via iGeneration pour iOS

Chez 'crosoft ils font de l'obfuscation sans faire exprès ^^

avatar KalouiZBack 21/04/2015 - 13:46

Merci pour ce sujet. Bravo Vincent pour ce talent.

Je retiens aussi que pour se développer, créer des emplois, les tracas sont des tracas administratifs.
Le premier emploi qu'il va créer dans son EURL, ce sera sans doute un emploi administratif pour gérer la masse de paperasse nécessaire au fonctionnement de sa boite.
Comment garder ce talent et ne pas le laisser partir à Cupertino?
C'est pas demain qu'on va connaitre la réussite et le travail facile: laissez nous entreprendre!

avatar brunitou2 21/04/2015 - 21:47 via iGeneration pour iOS

Ça change des articles "comment s'use le bracelet de l'iWatch sur les présentoirs"

avatar SteveC72 23/04/2015 - 16:38

SOlution aux problèmes
Revoir le modèle économique et passer à l'Open Source pour APple ... Même la grosse boite de Redmond , le roi Microsoft songe à l'open source maintenant .

Pages