Solution de noahlgrd01 pour iForensics - iNvisible

forensics iOS

7 juillet 2025

Pour commencer, il faut extraire backup.tar.xz et sysdiagnose_and_crashes.tar.xz sur sa propre machine (tar -xvf nom_fichier.tar.xz). Il faut également avoir sqlite3 d’installé (sudo apt install sqlite3)

En recherchant parmi les fichiers extraits, on peut repérer Manifest.db (index permettant de lier les fichiers extraits localement et leur correspondance dans le système iOS).

On va donc exécuter sqlite3 Manifest.db puis .sch pour voir les tables présentes.

Préambule

Pour ceux ayant fait l’épreuve iForensic - iTreasure, on va reprendre la même BD contenant l’historique lié aux messages SELECT * FROM Files WHERE relativePath LIKE '%sms%';

Se connecter sur cette BD : sqlite3 3d/3d0d7e5fb2ce288813306e4d4636395e047a3d28

Rechercher les messages non-envoyés

Tout naturellement, on va scruter la table message ainsi que la colonne is_delivered, nous permettant de voir si des messages n’ont pas été envoyés. Sauf qu’en faisant SELECT * FROM message WHERE is_delivered = 0;, aucun résultat ne tombe. 😠 is_finished = 0 ? Rien. is_prepared = 0 ? Rien non plus.

Revoyons notre façon de penser… Quand on envoie un message, on l’envoie à un destinataire, et ce, de “2 façons différentes” ; soit on saisit le numéro, soit… le contact ! On va donc vérifier les contacts présents sur le téléphone :SELECT * FROM handle;2 contacts différents sortent. Effectuer cette requête (un peu plus complexe) permettant de lier un contact aux messages qu’il a envoyé. SELECT h.id, COUNT(m.ROWID) FROM handle h LEFT JOIN message m ON m.handle_id = h.ROWID GROUP BY h.ROWID;

Et voilà, on a bien un contact à qui on a envoyé 0 message.

Flag

🚩 Rappel du flag : FCSC{email_destinataire}