You are on page 1of 11

8/15/2018 Jailbreak iOS : outils pour Linux | matteyeux

matteyeux

About tags   

Jailbreak iOS : outils pour


Linux
O CT O B ER 1 9 , 2 0 1 7 - MAT H I EU H A U T EB A S

La recherche en sécurité sur iOS devient de plus en plus populaire. Ce post a


pour but de vous montrer qu’on a pas besoin d’un Mac pour se lancer dans la
recherche en sécurité sur iOS.

macOS
Depuis toujours les chercheurs en sécurité iOS utilisent des Macs et macOS
comme système d’exploitation. Pourquoi ? Il y a plusieurs raisons :

XNU: c’est le noyau de macOS, mais aussi d’iOS qui a la particularité d’être
open source. De plus en cas de découverte d’une faille de sécurité, il est plus
facile de tester un exploit sur macOS puis le porter sur iOS.
Xcode : le fameux environnement de développement pour iOS et macOS
uniquement disponible sur macOS. Celui-ci fournit un SDK complet
permettant de debugger des apps etc… Le kit de développement inclut aussi
certaines bibliothèques présentes uniquement sur macOS (eg :
CoreFoundation et Mach).
Mach-O : le format de fichier exécutable sur les systèmes d’exploitation
Apple qui sert aussi de base à XNU.
La facilité de communication entre les deux systèmes d’exploitation
(jusqu’à libimobiledevice ;) ).
http://matteyeux.me/hacking/2017/10/19/linux-jailbreak-ressources.html 1/11
8/15/2018 Jailbreak iOS : outils pour Linux | matteyeux

Voilà pourquoi il faut à tout prix un Mac… Next !

Outils pour Linux


Pour info, la dernière phrase était ironique.

Tout d’abord la distribution Linux. J’utilise Ubuntu 16.04, stable, fluide, c’est
tout ce qu’il faut. De plus le gestionnaire de paquets APT fournit tout ce qu’il
faut sans avoir besoin d’ajouter des sources exterieures. Passons aux outils.

Libimobiledevice
Libimobiledevice est une plateforme de bibliothèques logicielles permettant
de communiquer avec une appareil iOS. Ces librairies permettent donc de
restaurer son iPhone, mais aussi d’obtenir un syslog, d’entrer en mode
recovery, obtenir des information plus poussées de son iBidule et tout cela
sans iTunes, qui n’est pas disponible sur GNU/Linux.

De plus, sachez que ces librairies ont été utilisées dans plusieurs outils de
jailbreak notamment par la team Pangu qui a tenu à remercier ce projet
Open Source, mais aussi avec Yalu pour iOS 8.4.1.

Libimobiledevice ne nécessite pas d’appareil jailbreak

Pour l’installer sur Ubuntu ou Debian c’est tout simple, il su it de suivre les
étapes dans un ancien blog post. Vous pouvez aussi utiliser easymobiledevice
pour simplifier l’utilisation de Libimobiledevice.

Theos
Un peu plus haut je parlais de Xcode qui permet de compiler des apps et des
executables pour iOS uniquement sur macOS. Bien sur il y a une alternative
pour Linux : Theos. Theos est kit de developpement basé sur des Makefiles et
écrit en Perl permettant de compiler du so ware pour iOS.

http://matteyeux.me/hacking/2017/10/19/linux-jailbreak-ressources.html 2/11
8/15/2018 Jailbreak iOS : outils pour Linux | matteyeux

$ cat main.c
#include <stdio.h>
#include <stdlib.h>
int main(){printf("Hello World\n");return 0;}
$ make
> Making all for tool test…
==> Compiling main.c (armv7)…
==> Linking tool test (armv7)…
==> Compiling main.c (arm64)…
==> Linking tool test (arm64)…
==> Merging tool test…
==> Signing test…
$ file .theos/obj/debug/test
.theos/obj/debug/test: Mach-O universal binary with 2

Comme on le voit avec l’output de la commande file l’executable test a été


compilé pour l’architecture ARMv7 et arm64, donc pour iPhone, iPod touch
et iPad.

Pour installer Theos il su it de lancer la commande suivante et tout s’installe


automatiquement :

curl -JOLks https://git.io/install-theos && bash


install-theos

Hopper Disassembler
Hopper est une alternative à IDA Pro qui coute assez cher et qui n’est pas
disponible pour Linux.

http://matteyeux.me/hacking/2017/10/19/linux-jailbreak-ressources.html 3/11
8/15/2018 Jailbreak iOS : outils pour Linux | matteyeux

Ce logiciel permet de faire du reverse engineering, désassembler, décompiler


et debuguer des applications pour di érentes architectures. Dans notre cas
c’est très utile pour les composants des firmwares iOS (iBoot, LLB,
kernelcache, etc…) mais aussi pour les di érentes applications et
executables mach-O : comme par exemple l’untether de p0sixspwn comme
le montre le screen ci-dessus.

Pour installer Hopper il su it de télécharger la version d’essai pour Linux,


puis de l’installer. Si comme moi vous avez une distro Ubuntu ou Debian,
téléchargez le .deb et lancez la commande suivante :

sudo dpkg -i hopperv3-3.13.0.deb .

La version 4.0 ne devrait par tarder a être publiée pour Linux.

Radare 2
Radare 2 est la deuxième version du framework de Reverse Engineering
Radare il est aussi disponible sur iOS, mais sa particularité c’est qu’il se gère
seulement via la ligne de commande, donc si vous n’êtes pas adeptes de la
ligne de commande essayez Hopper.

Pour les plus courageux, voici un exemple avec l’executable du jailbreak


semi-untethered de Pangu pour iOS 9.2 - 9.3.3 pour les appareils 64 bits
http://matteyeux.me/hacking/2017/10/19/linux-jailbreak-ressources.html 4/11
8/15/2018 Jailbreak iOS : outils pour Linux | matteyeux

[...]
| ; JMP XREF from 0x10006724c (sub.vm_rea
| .-> 0x100066f68 e83f40b9 ldr w8, [s
| ! 0x100066f6c e90308aa mov x9, x8
| ! 0x100066f70 4ac3b952 movz w10,
| ! 0x100066f74 4ad18e72 movk w10,
| ! 0x100066f78 08010a6b subs w8, w
| ! 0x100066f7c e93700b9 str w9, [s
| ! 0x100066f80 e83300b9 str w8, [s
| ,==< 0x100066f84 2c010054 b.gt 0x100
| ,===< 0x100066f88 01000014 b 0x100066
| ||! ; JMP XREF from 0x100066f88 (sub.vm_rea
| `---> 0x100066f8c e8abb752 movz w8, 0
| |! 0x100066f90 084e8e72 movk w8, 0
| |! 0x100066f94 e93740b9 ldr w9, [s
| |! 0x100066f98 2801086b subs w8, w
| |! 0x100066f9c e82f00b9 str w8, [s
| ,===< 0x100066fa0 c00c0054 b.eq 0x100
| ,====< 0x100066fa4 40000014 b 0x100067
| |||! ; JMP XREF from 0x100066f84 (sub.vm_rea
| ||`--> 0x100066fa8 a887a052 movz w8, 0
| || ! 0x100066fac 08e98c72 movk w8, 0
| || ! 0x100066fb0 e93740b9 ldr w9, [s
| || ! 0x100066fb4 2801086b subs w8, w
| || ! 0x100066fb8 e82b00b9 str w8, [s
| ||,==< 0x100066fbc 2c010054 b.gt 0x100
| ,=====< 0x100066fc0 01000014 b 0x100066
| ||||! ; JMP XREF from 0x100066fc0 (sub.vm_rea
| `-----> 0x100066fc4 48c3b952 movz w8, 0
| |||! 0x100066fc8 68d18e72 movk w8, 0
| |||! 0x100066fcc e93740b9 ldr w9, [s
| |||! 0x100066fd0 2801086b subs w8, w
| |||! 0x100066fd4 e82700b9 str w8, [s
| ,=====< 0x100066fd8 20100054 b.eq 0x100
| ,======< 0x100066fdc 32000014 b 0x100067
| |||||! ; JMP XREF from 0x100066fbc (sub.vm_rea
| ||||`--> 0x100066fe0 0832a552 movz w8, 0
| |||| ! 0x100066fe4 c83e8b72 movk w8, 0
| |||| ! 0x100066fe8 e93740b9 ldr w9, [s
| |||| ! 0x100066fec 2801086b subs w8, w
| |||| ! 0x100066ff0 e82300b9 str w8, [s
| ||||,==< 0x100066ff4 2c010054 b.gt 0x100

http://matteyeux.me/hacking/2017/10/19/linux-jailbreak-ressources.html 5/11
8/15/2018 Jailbreak iOS : outils pour Linux | matteyeux

| ,=======< 0x100066ff8 01000014 b 0x100066


[...]

Vous pouvez aussi avoir un mode un peu plus visuel comme avec IDA

J’ai pris un exemple di érent que le précédent, mais c’est le même principe.

Pour installer radare2 je vous déconseille de passer par les repositories


d’Ubuntu ou Debian, mais plutot de compiler manuellement depuis les
sources. Car les version sur les repositories par défaut sont obsolètes.

Pour cela : lancez la commande suivante : git clone


https://github.com/radare/radare2 && cd radare2 &&

http://matteyeux.me/hacking/2017/10/19/linux-jailbreak-ressources.html 6/11
8/15/2018 Jailbreak iOS : outils pour Linux | matteyeux

sys/install.sh

La compilation prend un peu de temps, car c’est un gros logiciel mais après
vous serez bien content de l’avoir !

iBoot64helper
Si vous utilisez IDA, vous devez surement savoir qu’on peut utiliser des scripts
en Python avec l’API IDA.

Je vais vous parler d’un script en particulier très utile pour l’analyse des
bootloaders 64 bits d’Apple : iBoot64helper. Ce script va localiser l’adresse ou
est chargé le bootloader (loading address) pour rebaser l’image.

Lorsque vous ouvrez votre bootloader dechi ré et decompressé dans IDA


vous obtenez ces lignes en assembleur illisibles.

Il su it de lancer le script : file -> Script File ou ALT + F7 puis


séléctionnez iboot64helper.py.

http://matteyeux.me/hacking/2017/10/19/linux-jailbreak-ressources.html 7/11
8/15/2018 Jailbreak iOS : outils pour Linux | matteyeux

Lorsque le script se lance il va rebaser vers l’adresse qu’il a définie, puis


définira les fonctions en fonction de cette adresse

[+] rebasing to address 0x1800b0000


Rebasing program to 0x00000001800B0000...
[+] searching and defining functions
[+] iboot64helper finished

J Levin’s tools
Le dernier set d’outils est pour ma part le plus utile de la bande. Tous écris
par Jonathan Levin aka Morpheus. Il est l’auteur de plusieurs livres
techniques consacrés aux systèmes d’exploitation d’Apple mais aussi
Android. Il a publié di érents articles sur tvOS, les mises à jours OTA, mais
aussi sur les jailbreaks de ces dernières années, je vous invite à lire tous ses
articles.

Joker
Joker a été développé pour le Reverse Engineering des kernels XNU. Vous
pouvez dumper KPP mais aussi decompresser les kernelcaches 64 bits sans
avoir a connaitre le Magic o set.

http://matteyeux.me/hacking/2017/10/19/linux-jailbreak-ressources.html 8/11
8/15/2018 Jailbreak iOS : outils pour Linux | matteyeux

$ joker kernelcache.n71
Feeding me a compressed kernelcache, eh? That is fine,
Compressed Size: 14023377, Uncompressed: 32489472. Unk
btw, KPP is at 14023816 (0xd5fc88)..And I saved it for
Got kernel at 440
This is a 64-bit kernel from iOS 10.x, or later (3705.
ARM64 Exception Vector is at file offset @0x7b000 (Add

Joker reconnait bien que c’est un kernel d’iOS 10 pour aarch64. Il sauvegarde
aussi KPP dans un repertoire temporaire si l’on veut le recuperer. En plus ça
on peut dumper les kexts, les sysctl, syscalls, etc…

Pour plus d’info je vous redirige vers l’article complet :


http://www.newosxbook.com/tools/joker.html

Jtool
Jtool est multifonction, un vrai couteau suisse pour les exécutables Mach-O.
Cet outil permet d’analyser de fond en comble les executables *OS
.Premièrement il est possible d’obtenir l’en-tête d’un mach-O.

$ jtool -h test/.theos/obj/debug/arm64/test
Magic: 64-bit Mach-O
Type: executable
CPU: ARM64
Cmds: 17
size: 1280 bytes
Flags: 0x200085

De plus on peut desassembler tout ou une partie de celui-ci (je parle du


fichier mach-O), ainsi que signer à la façon de ldid des binaires pour iOS.

Bref cet outil est plus que complet, je vous conseil vivement de vous en
informer un peu mieux ici

Disarm
Oups encore un autre desassembleur. Cette fois-ci il est plutôt simple. Je
l’utilise peu, mais je le trouve assez utile pour les petits programmes.

http://matteyeux.me/hacking/2017/10/19/linux-jailbreak-ressources.html 9/11
8/15/2018 Jailbreak iOS : outils pour Linux | matteyeux

Vous pouvez l’utiliser pour les Bootloaders (iBoot, LLB). Mais aussi les
kernelcaches comme ci-dessous :

$ disarm kernelcache.n71 | more


0x00000000 0xbcd68330 LDUR S16, [X25, #-152]
0x00000004 0x49041683 DCD 0x49041683
0x00000008 0x1650344d B 0xfffffffff940d13c
-------------------------------
0x0000000c 0x6e726b04 DCD 0x6e726b04
0x00000010 0x4b1f166c DCD 0x4b1f166c
0x00000014 0x656e7265 DCD 0x656e7265
0x00000018 0x6361436c DCD 0x6361436c
0x0000001c 0x75426568 __2DO 0x75426568
0x00000020 0x65646c69 DCD 0x65646c69
0x00000024 0x31312d72 CMN W11, #3147
0x00000028 0x302e3935 ADR X21, #378661
0x0000002c 0x312e302e CMN W1, #2956
0x00000030 0x8304312e DCD 0x8304312e
0x00000034 0x6351bcd6 DCD 0x6351bcd6
0x00000038 0x6c706d6f DCD 0x6c706d6f
0x0000003c 0xe173737a DCD 0xe173737a
0x00000040 0x01d92af0 DCD 0x1d92af0
0x00000044 0x0000c0ef DCD 0xc0ef
0x00000048 0x00d1fad5 DCD 0xd1fad5
0x0000004c 0x00010000 DCD 0x10000
0x00000050 0x00000000 DCD 0x0
[...]
0x00000058 0x00000000 DCD 0x0
0x000001b4 0xff000000 DCD 0xff000000
0x000001b8 0xfeedfacf DCD 0xfeedfacf <------
0x000001bc 0x0100000c DCD 0x100000c
0x000001c0 0xf0f600d5 ADRP X21, 2015259
0x000001c4 0x14f0f602 B 0x3c3d9cc
-------------------------------
0x000001c8 0x0e38f0f6 DCD 0xe38f0f6
0x000001cc 0x20f1f39a DCD 0x20f1f39a
0x000001d0 0x1900f1f6 DCD 0x1900f1f6
0x000001d4 0xf0f5f1ff ADRP X31, 2014783
0x000001d8 0x545f9f5f __2DO 0x545f9f5f
0x000001dc 0x09545845 DCD 0x9545845
0x000001e0 0x40031c02 DCD 0x40031c02
0x000001e4 0xf00740ff ADRP X31, 59423
0x000001e8 0x00ffffff DCD 0xffffff
http://matteyeux.me/hacking/2017/10/19/linux-jailbreak-ressources.html 10/11
8/15/2018 Jailbreak iOS : outils pour Linux | matteyeux

0x000001ec 0x1c0541c0 >>>LDR S0, aa24


0x000001f0 0x2ff0f608 DCD 0x2ff0f608
0x000001f4 0x30013004 ADR X4, #9729 ; X4 =
0x000001f8 0x041c0301 DCD 0x41c0301
0x000001fc 0x635f5f7f DCD 0x635f5f7f
0x00000200 0x74736e6f __2DO 0x74736e6f
0x00000204 0x16b6061c B 0xfffffffffad81a74

Encore une fois je vous invite à aller faire un tour sur la page de disarm pour
plus d’infos.

Bien visiter chaque page, pour télécharger chaque tarball et copier chaque
fichier dans le $PATH, c’est chiant. Alors je vous propose un petit script qui va
le faire pour vous. Il est disponible sur Github et vous n’avez qu’à le rendre
executable avec un chmod +x puis vous le lancez.

A noter qu’il est compatible uniquement pour Linux-x86_64. Ce script va


installer des outils pour les mises à jour OTA, j’expliquerais ça plus tard dans
un autre post.

Les outils que je vous ai présenté sont de loin les meilleurs en ce qui
concerne la recherche iOS tout en ayant une machine Linux.

En esperant que ce post ai été utile.

Si vous avez besoin d’infos contactez-moi sur twitter: @matteyeux 

Github : https://github.com/matteyeux
#iOS #XNU #jailbreak #Linux

Powered by Jekyll with Type Theme

http://matteyeux.me/hacking/2017/10/19/linux-jailbreak-ressources.html 11/11

You might also like