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

avatar x6tance 19/04/2015 - 21:48 via iGeneration pour iOS

Très bon article

avatar Fahrenheit 19/04/2015 - 21:51 via iGeneration pour iOS

Excellent article !

Mais je me suis toujours demandé pourquoi continuer à fabriquer des virus sur Windows dont les utilisateurs se blindent de plus en plus au lieu de faire un virus sur OSX qui marchera sur 100% des machines ? On parle de millions d'utilisateurs quand même !

avatar oomu 19/04/2015 - 23:48

"Mais je me suis toujours demandé pourquoi continuer à fabriquer des virus sur Windows dont les utilisateurs se blindent de plus en plus"

parce que c'est faux: les utilisateurs ne se blindent pas.

Nombreux sont ceux qui ont un "antivirus" ou un "antispyware" mais qui n'est pas fonctionnel (pas payé, plus d'abonnements, pas de base de virus à jour, etc) ou est lui même un adware (harcèle l'utilisateur de pub)

Les constructeurs enseignent de très mauvaises habitudes aux nouveaux acheteurs de PC.

de fait, faire exécuter un virus par un utilisateur windows n'est pas très cher: c'est RENTABLE.

" au lieu de faire un virus sur OSX qui marchera sur 100% des machines ? On parle de millions d'utilisateurs quand même !"

parce que cela est faux aussi.

Le PC / windows XP (et maintenant 7/8) est beaucoup plus homogène qu'on le pense. Pas besoin d'écrire du CUDA ou de viser une carte son haut de gamme qui n'existe pratiquement plus de toute façon : on a une base matérielle très unifiée et le windows maintient une compatibilité délirante : le virus peut être écrit pour un nombre gigantesques de machines.

Os X est + cher pour faire exécuter du code : l'interface est + claire, les fonctionnalités d'exécutions de code + rare que sous windows.

Mais Apple sera toujours + drastique: les trojans et adware sont développés pour Mac et les sites web de + en + menteurs et truqués pour encourager les gens sur mac à installer N'IMPORTE QUOI.

ET c'est un gros soucis, ça va encourager apple à imposer l'App Store sur OS X. C'est un enjeu de société (politique) qui est en train de se préparer.



avatar bugman 19/04/2015 - 22:27 via iGeneration pour iOS (edité)

Effectivement terriblement efficace pour faire tomber et comprendre quelques protections logiciel. Si ça peut aider Vincent à dormir, cela ne m'empêche pas de payer mes licences logiciels. Excellent produit.

avatar oomu 19/04/2015 - 23:48

à l'inverse il permet aux auteurs de logiciels de trouver leurs failles et les corriger, donc.

avatar bugman 20/04/2015 - 00:41 (edité)

Aussi. Ce n'est pas incompatible. ;)

avatar @MathieuChabod 19/04/2015 - 22:04 via iGeneration pour iOS

Énorme respect pour ce développeur. Bel article.

avatar garnierobin 19/04/2015 - 22:31 via iGeneration pour iOS

Magnifique !

avatar Xap 19/04/2015 - 22:41 via iGeneration pour iOS

Merci pour cet article très intéressant!

avatar jju17 19/04/2015 - 22:52 via iGeneration pour iOS

Merci énormément pour cet article très instructif pour moi!

avatar Zoupinou 19/04/2015 - 23:22 via iGeneration pour iPad

Cryptic en référence aux Residents je suppose. Une bonne idée !

avatar bsr43 19/04/2015 - 23:33 via iGeneration pour iOS

@Zoupinou: tout à fait :)

avatar RoomLight 19/04/2015 - 23:56 via iGeneration pour iOS

Ça peut permettre de retrouver des secrets de fabrication d'un logiciel ? Genre un algorithme secret de Photoshop ?

avatar RyDroid 21/04/2015 - 00:49

Oui.
Mais ce n'est clairement pas le premier logiciel du genre. Par exemple, GDB, qui existe depuis longtemps, permet d'analyser en profondeur un programme même sans annotations de débogage. Il y aussi d'autres logiciels graphiques comme radare. http://linuxfr.org/news/sortie-de-radare2-0-9-6
De plus, on peut obfusquer du code pour le rendre moins lisible avec des opérations inutiles, des opérations inutilement plus compliqués et bien d'autres mécanismes plus sophistiqués. Il me semble que Microsoft utilise assez fortement l'obfuscation sur Skype.

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

@RyDroid :
Le logiciel GDB n'est pas utilisé pour la même chose, ce n'est pas la même "classe de logiciel" : on utilise GDB pour debugger, ou faire de l'analyse dynamique, pas pour de l'analyse statique, ou alors, c'est qu'on aime se faire du mal :). Quant à l'obfuscation, en effet, beaucoup de développeurs font ça pour compliquer l'analyse statique, moi le premier :) Mais ça n'empêche tout de même pas l'analyse…

avatar Switcher 20/04/2015 - 00:44

J'apprends que la rétro-ingénierie est légale... Moi qui ait toujours cru que ce n'était pas le cas.

Merci pour l'article, on se couche souvent plus cultivé avec MacGé... :)

avatar bsr43 20/04/2015 - 09:07

La rétro-ingénierie est légale, en France, à la condition qu'elle soit faite pour des raisons de recherche en sécurité, ou à des fins d'interopérabilité entre logiciels.

Par exemple, il est tout à fait légal de désassembler Word pour comprendre le format des fichiers DOC, pour ensuite créer un logiciel capable de lire ces fichiers. Il est même légal d'étudier la protection contre la copie d'un logiciel, ou le fonctionnement d'un système de DRM (il y a quand même des subtilités légales dans ce cas précis).

Par contre, dans tous les cas, il interdit de communiquer publiquement le résultat de son travail…

avatar Switcher 21/04/2015 - 00:45 (edité)

Un grand merci pour cet éclaircissement. :)

avatar misstique 20/04/2015 - 00:56

Il ne manque plus que son EURL soit rachetée par Apple et son gérant embauché par Cupertino ! ^^

avatar Ginger bread 20/04/2015 - 01:07 via iGeneration pour iOS

@misstique :
Ca leur ferait pas de mal pr boucher les failles

avatar imnothereee 20/04/2015 - 05:57 via iGeneration pour iOS

Sûrement très intéressant mais pour un néophyte : c'est un peu du charabia

avatar Xalio 20/04/2015 - 07:22 via iGeneration pour iOS

Super! Merci.
Je connaissais Hopper pour m'y être intéressé dans le cadre du boulot. Ce logiciel avait bel et bien l'air d'une référence dans son domaine sur OS X.

avatar san_ 20/04/2015 - 07:48 via iGeneration pour iOS

Passionnant, merci pour cette interview

avatar ZANTAR2054 20/04/2015 - 08:34 via iGeneration pour iOS

merci, article passionnant

avatar Abudah 20/04/2015 - 09:00 via iGeneration pour iOS

Bravo, cet article est au top ! :-)

Pages