Mode Recovery : exploration du contenu

Toutes les ressources pour les développeurs et moddeurs.
#1

Mode Recovery : exploration du contenu

Messagepar gabs » 03 Jan 2014, 23:08

Tous ceux d’entre nous qui “bidouillent” un peu leur téléphone connaissent un peu la structure d’Android, mais on connaît généralement moins comment est fait le mode recovery.
Ma curiosité m’a amené à regarder cela de plus près, et voici donc le résultat de mes recherches.

Image


Quelques rappels

Le mode Recovery est un mode de fonctionnement particulier de nos téléphones Android qui permet d’effectuer un certain nombre de tâches sans même que le firmware ou la ROM ne soit démarré. Il est accessible en maintenant les touches vol haut + home + power lorsque le téléphone est éteint.
Concrètement, c’est un mode qui permet de réaliser certaines opérations de maintenance ou encore de récupérer un système devenu instable.
Samsung fournit sa version standard du mode recovery, mais il en existe d’autres dont le plus célèbre : ClockWorkMod (CWM). Concernant ce dernier, pour plus d'informations, je vous invite à consulter le sujet de titofe : Utilisation du ClockWorkMod


Idée reçue

De nombreuses personnes pensent qu’il y a un lien fort entre la version du mode recovery et celle du firmware du téléphone. Même si chaque firmware embarque une version du mode recovery, il est tout à fait possible de flasher un recovery alternatif (comme CWM), et il n’est pas nécessaire d’avoir une version spéciale de CWM sensée supporter ou correspondre au firmware en question.
Le recovery est un système autonome qui fonctionne “à coté” d’Android. Il n’est donc pas fortement liée à la version d’Android installée. Il doit juste être capable d’accéder et d’exploiter correctement le stockage de la ROM ou du firmware.


Où est stocké le recovery ?

Le recovery ne fait donc pas partie des firmwares ou des ROMs et on ne peut pas voir directement son contenu depuis Android.
Lorsqu’on flashe un recovery alternatif, on voit clairement que celui-ci est constitué d’un fichier “recovery.img”. Cette image est ensuite flashée telle quelle dans une partition spéciale du téléphone. Sur la Galaxy SIII (i9300), il s’agit de la partition /dev/block/mmcblk0p6


Mais qu’y a-t-il dans recovery.img ?

Ceux qui ont lu l’excellent tutoriel de jhowlett468 Extraction des fichiers d’une ROM Stock savent que certains fichiers .img des firmwares sont en fait de simples images du système de fichiers du téléphone. Ils sont aisément convertibles en images ext4 et on peut ensuite facilement en exploiter le contenu.
Seulement voilà, inutile d’essayer, cette méthode n’est pas applicable aux fichiers recovery.img ou kernel.img car ces images ont une structure très différente.

Les fichiers recovery.img et kernel.img sont en fait des images “bootables” et sont constitués ainsi :
- un entête de 2ko : il ne contient à priori pas de code particulier
- un kernel : Il s’agit du code du kernel qui va être chargé en mémoire pendant la phase de boot.
- un ramdisk : Il s’agit ici d’un disque virtuel contenant tous les fichiers nécessaires au fonctionnement du recovery (ou du kernel). Ce disque virtuel est chargé en mémoire afin d’être exploité par le kernel. Dans le fichier recovery.img ce disque virtuel est une archive cpio compressée avec gzip

Image

Dans la structure des images bootables, il pourrait ensuite y avoir un autre “loader”, mais cela n’est en fait pas utilisé et il n’y a donc rien après le ramdisk.

Au final, le fichier recovery.img contient donc un mini système linux complètement autonome.
C’est pour cela, qu’il a un aspect très différent d’un système android complet.


Cas pratique (1/2) : exploration du PhilZ Touch recovery

Nous allons maintenant voir comment extraire le kernel et le ramdisk d’un fichier recovery.img
Dans mon cas, j’ai pris le Philz Touch pour mon Galaxy S3 (philz_touch_6.00.8-i9300)

Il existe des outils qui permettent de faire cela automatiquement :
- unpackbotimg (sous linux)
- split_bootimg.pl (script perl)
Le but étant toutefois de bien comprendre la structure du recovery, j’ai donc réalisé cette opération “à la main”, juste avec un éditeur hexadécimal (HHD Hex Heditor Neo)

Voici donc comment procéder :
- extraire le fichier recovery.img du fichier .tar ou .zip d’installation du recovery (avec 7zip)
- charger le fichier recovery.img dans l’éditeur hexadécimal
- supprimer les 2048 premiers octets du fichier : c’est le header, il ne nous intéresse pas
- rechercher la séquence 00 00 1F 8B : le kernel se termine par une série de 00 et 1F 8B est le magic number de tout fichier gzip
- enregistrer tout ce qui est avant 1F 8B dans un fichier nommé kernel
- enregistrer toute la fin du fichier (commençant par 1F 8B) dans ramdisk.cpio.gz

Image

Enfin, il faut extraire le contenu du ramdisk :
Code : Tout sélectionner
gzip -d ramdisk.cpio.gz
mkdir ramdisk
cd ramdisk
cpio -i < ../ramdisk.cpio

Ces opérations sont réalisable directement sous linux ou avec cygwin sous Windows.
Si vous voulez juste visualiser le contenu, sous Windows, vous pouvez aussi utiliser 7zip pour explorer le ramdisk.

Image

Vous pouvez donc maintenant voir exactement ce qu’il y a dans votre recovery ;-)
Je vous invite à aller regarder dans le répertoire /sbin. Dans le cas du PhilZ, on peut y voir les liens symboliques pour les commandes liées à busybox et les outils utilisé par le recovery, mais aussi des choses intéressantes comme le script install-su.sh

La même procédure est applicable aux fichiers kernels.img, mais il n'y a généralement que peu de choses en dehors du kernel lui-même.


Cas pratique (2/2) : re-création d’une image recovery flashable

Attention !
Cette procédure permet de réaliser une image flashable sur votre téléphone. Elle est fournit en l’état, à titre d’information. Comme tout flash, cela présente un risque, et ni moi ni le forum ne pourront être tenu pour responsable des conséquences sur votre téléphone.

Afin de démontrer la validité de ce qui est décrit dans cet article, j’ai modifié l’image de fond du recovery PhilZ “stitch.png”. J’ai toutefois fait attention à la taille totale du ramdisk afin de ne pas dépasser la taille de partition recovery de mon Galaxy S3, à savoir 8Mo.

Voici donc la procédure à suivre pour recréer une image recovery flashable (réalisé sous linux) :
- se positionner dans le répertoire ou le ramdisk a été extrait, puis récréer le ramdisk avec cpio et gzip :
Code : Tout sélectionner
find . | cpio -o -H newc | gzip > ../ramdisk.cpio.gz

- recréer l’image bootable à partir du fichier kernel et du nouveau ramdisk grâce à l’utilitaire mkbootimg (de l’Android Plateform Tools)
Code : Tout sélectionner
./mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel kernel --ramdisk ramdisk.cpio.gz -o recovery.img

- on peut ensuite intégrer cette image dans un update.zip ou en faire un fichier tar flashable par odin :
Code : Tout sélectionner
tar -H ustar -c recovery.img > philz_touch_6.00.8-i9300_mod.tar
md5sum -t philz_touch_6.00.8-i9300_mod.tar >> philz_touch_6.00.8-i9300_mod.tar
mv philz_touch_6.00.8-i9300_mod.tar philz_touch_6.00.8-i9300_mod.tar.md5

Pour la version .zip, il suffit de prendre le zip d’origine et de remplacer le fichier recovery.img par la nouvelle version.
Enfin, il ne reste plus qu'à essayer le recovery sur notre téléphone. Pour mon cas, le résultat est visible sur la première image de ce post. ;)


Annexes :

Flash d’un recovery :
Les recovery sont flashable via Odin ou via le menu recovery.
Le flash par odin fonctionne normalement toujours. L’inconvénient est que cela nécessite Odin ou mobile Odin, mais surtout cela augmente le compteur du nombre de flash.
Le flash via un fichier .zip depuis le menu recovery nécessite d’avoir un fichier .zip avec une signature valide ou d’avoir déjà un recovery modifié qui ne vérifiera pas la signature. Par contre cela n’augmente pas le compteur du nombre de flashs.

Références :
xda-developpers.com - HOWTO: Unpack, Edit, and Repack Boot Images

Les fichiers de cet article :
Outils linux pour manipuler les images bootables : outils_recovery_img.zip
Le recovery modifié de cet article (pour SGS3 i9300) : version zip version odin


Edit : Ce topic a participé au concours 2013-2014, il fut l'un des gagnants
Nouveau sur le forum ? -----> Pour bien débuter sur le forum

Modèle : Galaxy S5 (SM-G900F)
Firmware : G900FXXS1CPK1 (6.0.1)
Modifications : Root - Nova Launcher Prime
Forfait : Sosh mobile + Livebox
Avatar de l’utilisateur
gabs
Ancien du Staff
Ancien du Staff
 
Message(s) : 5646
Inscription : 21 Oct 2010, 22:00
Localisation : Limoges

#2

Re: Mode Recovery : exploration du contenu

Messagepar franck_29 » 03 Jan 2014, 23:25

Ouah, voilà un article comme je les aime, qui rentre en profondeur dans le sujet et qui ne se borne pas à suggérer quelques considérations théoriques.
Les explications théoriques sont certes là et bien là, mais étayées, excuser du peu par des exemples pratiques, concrets et vérifiables.

Enfin, on y apprend beaucoup, et désormais, le recovery n'aura plus pour moi, cette connotation un peu esothérique, et je l'utiliserai un peu moins bête.

Merci Pascal pour ce partage de grande valeur.
Pour bien débuter sur le forum : la charte, FAQ, Comment faire ?
Les points essentiels en quelques clics : Notre Blog
Modèle Galaxy S (GT-I9000) | Galaxy S II (GT-I9100) | Galaxy Note II (GT-N7100) | Galaxy Note 3 (SM-N9005)
Firmware CyanogenMod 10.2 | Stock XWLSD | Stock N7100XXUFNE1 | stock XXUDMK2
Modifications ROOT
Réseau B&You
Mon péché mignon développement de l'appli NokyART
Avatar de l’utilisateur
franck_29
Ancien du Staff
Ancien du Staff
 
Message(s) : 9030
Inscription : 20 Juil 2010, 15:31
Localisation : France, Paris, Cléder

#3

Re: Mode Recovery : exploration du contenu

Messagepar Isi_77 » 03 Jan 2014, 23:55

Si Luke a pleuré quand Dark Vador lui a dit qu'il était son père, c'est parce qu'il espérait être le fils de @gabs !!!
Respect, Monsieur.

Image
Samsung Galaxy S5 SM-G900FImageImageImageImage
Rooté et desimlockéImageRom : LineageOS 14.1 Nougat, et toujours la dernière Weekly
Forfait RED Edition Limitée 20 GoImageKnox : 0x1
µSD SanDisk 64 Go cl.10ImageAucun dépannage en MP - MerciImageet au fond du tiroir un S1, un S2 et un Note2, tous fonctionnels :geek:
Ne pas oublier de passer par la section Présentation et de remplir une signatureImageLiens utiles : Pilotes Samsung 1.5.27 - Odin 1.85
Avatar de l’utilisateur
Isi_77
Administrateur
Administrateur
 
Message(s) : 7780
Inscription : 19 Août 2011, 09:19
Localisation : Hérault

#4

Re: Mode Recovery : exploration du contenu

Messagepar DuD » 04 Jan 2014, 00:25

Respect et Merci ;-)

Envoyé depuis mon Atari 520 ST ;-)
Galaxy Note EDGE ;-)
SM-N915FY
ANDROID 5.1.1 LOLLIPOP
N915FXXU1COI1
Version Kernel 3.10.40-5674927
KNOX : 0X0
-------------------------
-------------------------
-------------------------
Avatar de l’utilisateur
DuD
Ancien du Staff
Ancien du Staff
 
Message(s) : 1647
Inscription : 04 Oct 2013, 11:40

#5

Re: Mode Recovery : exploration du contenu

Messagepar jhowlett468 » 04 Jan 2014, 00:29

Eeeeeeeeeeuh...Excellent article...Et merci de m'avoir cité Gabs :o ...même si je n'ai fait qu'effleurer mon sujet...Contrairement à toi ;)

By my I9305
Dernière édition par jhowlett468 le 04 Jan 2014, 00:49, édité 1 fois.
Image
Image
|| Galaxy S5 SM-G900FImage|| Gear Fit ( SM-R350 )
ROM xXx No Limits 6.1 base CQAVImageROM BOA2
Modem CQAW / CSC XEFImage
Kernel stock / recovery TWRP 3.0.2.2
Knox 0x1, garantie finie
Charte du forum
Liens importantsNouveau ?Drivers Samsung 1.5.51 -> Install
Vérifiez votre modèleEn ULTIME recours ? ---> ICI
Rédac' chef du Blog
Téléphone qui bootloope ?
Image
Avatar de l’utilisateur
jhowlett468
Modérateur
Modérateur
 
Message(s) : 9259
Inscription : 16 Août 2011, 20:28
Localisation : Xavier's Intitute for Gifted Youngers, 1407 Graymalkin Lane, Westchester County, NY /// La DZ

#6

Re: Mode Recovery : exploration du contenu

Messagepar gabs » 04 Jan 2014, 00:49

jhowlett468 a écrit:Et merci de m'avoir cité Gabs :whaouh: ...même si je n'ai fait qu'effleurer mon sujet...Contrairement à toi

Peut-être, mais c'est bien ça qui m'a fait m'intéresser à ce sujet, et qui m'a aussi aidé pour mon topic concernant l'appareil photo du Nexus ;)
Nouveau sur le forum ? -----> Pour bien débuter sur le forum

Modèle : Galaxy S5 (SM-G900F)
Firmware : G900FXXS1CPK1 (6.0.1)
Modifications : Root - Nova Launcher Prime
Forfait : Sosh mobile + Livebox
Avatar de l’utilisateur
gabs
Ancien du Staff
Ancien du Staff
 
Message(s) : 5646
Inscription : 21 Oct 2010, 22:00
Localisation : Limoges

#7

Re: Mode Recovery : exploration du contenu

Messagepar jhowlett468 » 04 Jan 2014, 00:51

gabs a écrit:Peut-être, mais c'est bien ça qui m'a fait m'intéresser à ce sujet, et qui m'a aussi aidé pour mon topic concernant l'appareil photo du Nexus ;)


Content que çà ait servi à au moins une personne à part moi ;)
Si tu me permets je reprendrai certaines des notions que tu évoques dans mon topic (en te citant bien sûr)

Edit : j'ai trouvé un outil permettant d'extraire facilement le ramdisk sous Windows > ICI <
Par contre le modifier ne semble possible que sous Linux...
Image
Image
|| Galaxy S5 SM-G900FImage|| Gear Fit ( SM-R350 )
ROM xXx No Limits 6.1 base CQAVImageROM BOA2
Modem CQAW / CSC XEFImage
Kernel stock / recovery TWRP 3.0.2.2
Knox 0x1, garantie finie
Charte du forum
Liens importantsNouveau ?Drivers Samsung 1.5.51 -> Install
Vérifiez votre modèleEn ULTIME recours ? ---> ICI
Rédac' chef du Blog
Téléphone qui bootloope ?
Image
Avatar de l’utilisateur
jhowlett468
Modérateur
Modérateur
 
Message(s) : 9259
Inscription : 16 Août 2011, 20:28
Localisation : Xavier's Intitute for Gifted Youngers, 1407 Graymalkin Lane, Westchester County, NY /// La DZ

#8

Re: Mode Recovery : exploration du contenu

Messagepar Bambou64 » 04 Jan 2014, 01:13

Laissez tomber Windaube voyons :D

Envoyé de mon Nexus 4 en utilisant Tapatalk
Nouveaux membres ? => Pensez à visiter la section "Pour bien débuter sur le Forum" !
OnePlus One 64 Go
Rom : LineageOS 14.1 - Nightlies (Android 7.1)
Modem : .3.0 241 (Lollipop)
Nexus 4
Rom : Android 5.0.1 Stock
Modem : 1.02
Galaxy S3 16 Go (i9300)
ROM : CM10.2 (Android 4.3)
Modem : XXEMG4
Galaxy S
ROM : Mackay 2.99
Modem : JW4
Opérateur/Forfait : Bouygues Telecom (B&You 20 Go)
PC : Linux Mint 18.1 Cinnamon, avec adb et fasboot (+ Win7 / Win10. Win XP dans VirtualBox)
Avatar de l’utilisateur
Bambou64
Andro-Assistant
Andro-Assistant
 
Message(s) : 17158
Inscription : 25 Août 2010, 12:28
Localisation : Toulouse (31)

#9

Re: Mode Recovery : exploration du contenu

Messagepar jhowlett468 » 04 Jan 2014, 01:20

Bambou64 a écrit:Laissez tomber Windaube voyons :D

Envoyé de mon Nexus 4 en utilisant Tapatalk


Pas branché par l'aventure Linux et la Pomme...Trop chère... :D
Image
Image
|| Galaxy S5 SM-G900FImage|| Gear Fit ( SM-R350 )
ROM xXx No Limits 6.1 base CQAVImageROM BOA2
Modem CQAW / CSC XEFImage
Kernel stock / recovery TWRP 3.0.2.2
Knox 0x1, garantie finie
Charte du forum
Liens importantsNouveau ?Drivers Samsung 1.5.51 -> Install
Vérifiez votre modèleEn ULTIME recours ? ---> ICI
Rédac' chef du Blog
Téléphone qui bootloope ?
Image
Avatar de l’utilisateur
jhowlett468
Modérateur
Modérateur
 
Message(s) : 9259
Inscription : 16 Août 2011, 20:28
Localisation : Xavier's Intitute for Gifted Youngers, 1407 Graymalkin Lane, Westchester County, NY /// La DZ

#10

Re: Mode Recovery : exploration du contenu

Messagepar edem84 » 04 Jan 2014, 01:42

Que dire Gabs, sinon : bravo et merci l'expert :)
Galaxy Note 4 - SM-N910C : MM 6.0.1 N910CXXU2DPI7 / Root : CF-Autoroot
Opérateur : Maroc Telecom
Avatar de l’utilisateur
edem84
Ancien du Staff
Ancien du Staff
 
Message(s) : 4211
Inscription : 08 Sep 2010, 00:47
Localisation : Maroc

Suivant

Retour vers Développement : Tutoriels, Astuces, Méthodes et Outils

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)