Si le suivi du flot d’exécution permet de restituer le code d’un noyau Android, peu de désassembleurs s’appuient sur la présence des symboles pour affiner leur analyse. Cet article se propose de fournir les points clefs pour retrouver ces symboles de façon statique dans ce cadre précis, même si l’approche peut être adaptée à d’autres environnements.
Bien qu’il jouisse d’un rôle particulier, le noyau Linux reste un exécutable classique : c’est à la base un fichier ELF, construit à partir de code C (principalement) via des Makefiles. Le noyau propose également des fonctionnalités courantes pour un programme, comme son extension par des modules externes ou l’affichage d’une trace en cas de plantage.
Si ces fonctionnalités sont activées, alors les symboles sont bien présents dans le noyau. Ne reste plus qu’à les localiser.
1. Partition de démarrage et image associée
Pour récupérer un noyau Android, le plus simple demeure de s’appuyer sur les images de mise à jour. Ces dernières se retrouvent généralement directement sur Internet, à l’instar de celles mises à disposition par Google pour ses appareils [FACTORY].
Une ROM Android contient un fichier boot.img qui représente le contenu intégral de la partition de démarrage BOOT d’un téléphone.
Le format de cette partition a...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première
[FACTORY] https://developers.google.com/android/images
[HDR] https://source.android.com/devices/bootloader/boot-image-header
[TABLE] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=c7725687
[EXTRACT] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/extract-vmlinux
[RFC1952] http://www.ietf.org/rfc/rfc1952.txt
[LZMA] https://www.7-zip.org/a/lzma-specification.7z
[XZ] http://tukaani.org/xz/xz-file-format.txt
[LZO] http://www.oberhumer.com/opensource/lzo/
[LZOP] http://www.lzop.org/
[LZ4] https://github.com/lz4/lz4/blob/master/doc/lz4_Frame_format.md
[CHRYSALIDE] https://www.chrysalide.re/fr/
[VERSIONS] https://source.android.com/devices/architecture/kernel/modular-kernels#kernel-version