| name | mobile-forensics |
| description | Guide complet de forensic mobile — Android (ADB, recovery, root, JTAG) et iOS (iTunes backup, checkm8, libimobiledevice), extraction physique/logique, analyse d'applications, artefacts cloud, et tools Cellebrite/Magnet |
| tags | ["forensics","mobile","android","ios","adb","checkm8","cellebrite","extraction","sqlite"] |
| version | 1 |
Forensic Mobile — Guide Complet
Guide exhaustif d'investigation numérique sur terminaux mobiles Android et iOS : acquisition, analyse, extraction de données, et outils.
1. Principes Fondamentaux
Défis Spécifiques du Mobile Forensics
1. CHIFFREMENT FORT
Android 10+ : FBE (File-Based Encryption) par défaut
iOS : HARD (Hardware Assisted Recovery) keys, Secure Enclave
→ Sans code PIN/pattern : aucune extraction possible
2. SÉCURITÉ MATÉRIELLE
Secure Enclave (iOS) / TEE (Android)
Effacement après tentatives échouées
Verified Boot (ne démarre pas si modifié)
3. VOLATILITÉ
Connexion cellulaire → effacement à distance possible
Verrouillage automatique
Écran éteint = données cryptées
4. DIVERSITÉ
Des centaines de modèles
Versions OS fragmentées
Mises à jour irrégulières
Ordre des Actions sur Mobile
1. ISOLER LE RÉSEAU (Faraday cage / Mode Avion)
→ Empêche l'effacement à distance (Find My iPhone, Android Device Manager)
→ Bloque les mises à jour OTA
2. CONTRE LE VERROUILLAGE AUTOMATIQUE
→ Désactiver le verrouillage dans les paramètres (si déverrouillé)
→ Maintenir l'écran allumé
3. CAPTURER L'ÉTAT
→ Photographier l'écran (apps ouvertes, notifications)
→ Noter le niveau de batterie
→ Version OS dans About
4. EXTRACTION PRIORITAIRE
1. RAM (si root/jailbreak)
2. Extraction physique (via JTAG/ISP)
3. Extraction logique (backup)
4. Cloud extraction (iCloud, Google Drive)
2. Android Forensics
Acquisition Logique (ADB)
adb devices
adb shell getprop ro.build.version.sdk
adb shell getprop ro.build.version.release
adb shell getprop ro.product.model
adb shell getprop ro.serialno
adb shell getprop | grep -i "build\|product\|serial\|security"
adb backup -apk -shared -all -system -f backup.ab
dd if=backup.ab bs=1 skip=24 | openssl zlib -d > backup.tar
tar xvf backup.tar
Extraction ADB Approfondie
adb shell pm list packages > packages.txt
adb shell pm list packages -3 > user_apps.txt
adb shell pm path com.whatsapp
adb pull /data/app/com.whatsapp-xxxx/base.apk
adb shell
su
cp /data/data/com.whatsapp/databases/msgstore.db /sdcard/
exit
adb pull /sdcard/msgstore.db
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png
adb shell content query --uri content://sms/inbox > sms.txt
adb shell content query --uri content://sms/sent > sms_sent.txt
adb shell content query --uri content://contacts/phones/ > contacts.txt
adb shell content query --uri content://call_log/calls > call_log.txt
adb shell content query --uri content://calendar/events > calendar.txt
Acquisition Physique (root)
adb root
adb shell su
adb shell cat /proc/partitions
adb shell ls -la /dev/block/platform/*/by-name/
adb shell su -c "dd if=/dev/block/mmcblk0pXX of=/sdcard/userdata.dd bs=4M"
adb pull /sdcard/userdata.dd
adb shell su -c "dd if=/dev/block/mmcblk0pXX of=/sdcard/efs.img bs=4M"
adb pull /sdcard/efs.img
adb shell su -c "dd if=/dev/block/mmcblk0 of=/sdcard/full_dump.dd bs=4M"
adb shell su -c "cat /proc/kcore" > ram_dump.elf
Acquisition via Recovery
adb shell
mount | grep data
adb shell dd if=/dev/block/mmcblk0 of=/external_sd/full_dump.dd bs=4M
adb pull /sdcard/TWRP/
Extraction Via Analyse Physique (ISP/JTAG)
3. iOS Forensics
Extraction Logique (iTunes Backup)
idevicebackup2 backup /evidence/ios_backup/
brew install libimobiledevice
brew install ideviceinstaller
ideviceinfo > device_info.txt
ideviceactivationstate > activation_state.txt
/evidence/ios_backup/
├── Manifest.plist
├── Status.plist
├── Info.plist
└── <hash>/
├── 00/
│ ├── 00f0...
│ └── ...
└── ...
Décoder le backup iOS
pip install iphone-backup-decrypt
iphone-backup-decrypt -p "password" -d /evidence/ios_backup /evidence/decrypted/
Extraction Physique (checkm8)
sudo checkra1n -c
ssh root@localhost -p 2222
tar czf /tmp/data.tar.gz /private/var/
scp -P 2222 root@localhost:/tmp/data.tar.gz .
dd if=/dev/disk0s1 of=/tmp/disk.dd bs=4M
scp -P 2222 root@localhost:/tmp/disk.dd .
Acquisition iOS via libimobiledevice
sudo apt install libimobiledevice-utils usbmuxd
idevice_id -l
ideviceinfo -s
ideviceinfo
idevicescreenshot
idevicesyslog > syslog.txt
idevicediagnostics diagnostics
idevicebackup2 backup --full /evidence/ios_backup/
ideviceinstaller -i app.ipa
ideviceinstaller -l
4. Analyse d'Applications
WhatsApp
adb shell su -c "cp /data/data/com.whatsapp/databases/msgstore.db /sdcard/"
adb shell su -c "cp /data/data/com.whatsapp/databases/wa.db /sdcard/"
adb pull /sdcard/msgstore.db
adb pull /sdcard/wa.db
sqlite3 msgstore.db "
.headers on
.mode column
-- Messages textes
SELECT chat_view.subject AS group_name,
message.timestamp,
message.from_me,
message.text_data,
message.media_url
FROM message
LEFT JOIN chat_view ON message.chat_row_id = chat_view._id
ORDER BY message.timestamp DESC;
-- Contacts
SELECT jid, wa_name, display_name
FROM wa_contacts;
-- Pièces jointes
SELECT file_path, mime_type, file_size
FROM message_media;
"
sqlite3 ChatStorage.sqlite "
SELECT ZWACHATSESSION.ZCONTACTNAME,
ZWAMESSAGE.ZMESSAGEDATE,
ZWAMESSAGE.ZTEXT
FROM ZWAMESSAGE
LEFT JOIN ZWACHATSESSION ON ZWAMESSAGE.ZSESSION = ZWACHATSESSION.Z_PK
ORDER BY ZWAMESSAGE.ZMESSAGEDATE DESC;
"
Telegram
adb shell su -c "cp -r /data/data/org.telegram.messenger /sdcard/telegram_data/"
adb pull /sdcard/telegram_data/
sqlite3 cache4.db "
SELECT DISTINCT uid, date, message
FROM messages
ORDER BY date DESC;
"
Signal
adb shell su -c "cp /data/data/org.thoughtcrime.securesms/databases/signal.db /sdcard/"
adb shell su -c "cp /data/data/org.thoughtcrime.securesms/shared_prefs/org.thoughtcrime.securesms_preferences.xml /sdcard/"
grep "passphrase" org.thoughtcrime.securesms_preferences.xml
sqlcipher signal.db
sqlite> PRAGMA key='passphrase_here';
sqlite> PRAGMA cipher_use_hmac=OFF;
sqlite> .tables
Navigateurs Mobiles
adb shell su -c "cp /data/data/com.android.chrome/app_chrome/Default/History /sdcard/"
adb pull /sdcard/History
sqlite3 History "
SELECT url, title, visit_count,
datetime(last_visit_time / 1000000 + 11644473600, 'unixepoch') as visit_time
FROM urls ORDER BY last_visit_time DESC;
"
sqlite3 History.db "
SELECT url, visit_time
FROM history_visits
JOIN history_items ON history_visits.history_item = history_items.id
ORDER BY visit_time DESC;
"
5. Artefacts Cloud et Comptes
iCloud Extraction
pip install icloudpd
icloudpd --download --directory /evidence/icloud/ --username suspect@email.com
Google Account (Android)
adb shell su -c "cp /data/system/accounts.db /sdcard/"
adb pull /sdcard/accounts.db
sqlite3 accounts.db ".tables"
adb shell su -c "cp /data/data/com.google.android.gms/databases/* /sdcard/gms_backup/"
adb pull /sdcard/gms_backup/
6. Outils Mobile Forensics
Commercial
Open Source / Gratuit
7. Analyse de Localisation
Google Timeline
python3 << 'EOF'
import json
with open('Location History.json') as f:
data = json.load(f)
for loc in data['locations'][:10]:
ts = loc['timestampMs']
lat = loc['latitudeE7'] / 1e7
lon = loc['longitudeE7'] / 1e7
acc = loc.get('accuracy', 'N/A')
print(f"{ts}: {lat},{lon} (accuracy: {acc}m)")
EOF
Exif Photos
find /evidence/DCIM/ -name "*.jpg" -exec exiftool -gps* {} \;
exiftool -p gpx.fmt -gps* /evidence/DCIM/ > trace.gpx
gpsbabel -i gpx -f trace.gpx -o kml -F locations.kml
8. Extraction et Analyse d'Appels / Messages
SMS/MMS Android
adb shell su -c "cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/"
adb pull /sdcard/mmssms.db
sqlite3 mmssms.db "
SELECT address, date/1000 as timestamp, body
FROM sms
WHERE type=1 -- inbox
ORDER BY date DESC
LIMIT 50;
"
Call Logs Android
adb shell su -c "cp /data/data/com.android.providers.contacts/databases/contacts2.db /sdcard/"
adb pull /sdcard/contacts2.db
sqlite3 contacts2.db "
SELECT number, duration,
datetime(date/1000, 'unixepoch', 'localtime') as call_time,
CASE type
WHEN 1 THEN 'INCOMING'
WHEN 2 THEN 'OUTGOING'
WHEN 3 THEN 'MISSED'
END as call_type
FROM calls
ORDER BY date DESC
LIMIT 100;
"
9. Script d'Acquisition Automatisé Android
#!/bin/bash
DEVICE_ID=$(adb devices | grep -v "List" | head -1 | awk '{print $1}')
OUTDIR="/evidence/android_${DEVICE_ID}_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$OUTDIR"
echo "=== ANDROID FORENSICS ACQUISITION ==="
echo "Device: $DEVICE_ID"
echo "Output: $OUTDIR"
echo "[1] Device info..."
adb shell getprop > "$OUTDIR/properties.txt"
adb shell cat /proc/version > "$OUTDIR/kernel_version.txt"
echo "[2] Package listing..."
adb shell pm list packages -3 -f > "$OUTDIR/user_packages.txt"
adb shell pm list permissions -g > "$OUTDIR/permissions.txt"
echo "[3] Communications..."
adb shell content query --uri content://sms/inbox > "$OUTDIR/sms_inbox.txt" 2>/dev/null
adb shell content query --uri content://sms/sent > "$OUTDIR/sms_sent.txt" 2>/dev/null
adb shell content query --uri content://call_log/calls > "$OUTDIR/call_log.txt" 2>/dev/null
echo "[4] Contacts..."
adb shell content query --uri content://contacts/phones > 2>/dev/null
adb shell screencap -p /sdcard/screen_$( +%s).png
adb pull /sdcard/screen_*.png
adb shell find /sdcard/ - f - > 2>/dev/null
adb shell /data/misc/wifi/wpa_supplicant.conf > 2>/dev/null
adb backup -apk -shared -all -system -f 2>/dev/null
/*.ab /*.txt >
10. Analyse d'Images WhatsApp / Téléchargements
find /evidence/ -path "*WhatsApp*Media*" -name "*.jpg" -exec cp {} /evidence/images/ \;
exiftool -a -gps* /evidence/images/ > image_metadata.txt
for img in /evidence/images/*.jpg; do
sha256sum "$img" >> /evidence/images_sha256.txt
done
11. Dépannage
PROBLÈME : "adb: error: device unauthorized"
SOLUTION : Déverrouiller l'écran et accepter la demande ADB
PROBLÈME : iOS "This device is passcode locked"
SOLUTION :
- checkm8 (iPhone 4S-X) si le bootloader le permet
- Sinon, extraction iCloud uniquement
PROBLÈME : Base de données chiffrée (Signal, WhatsApp crypted)
SOLUTION :
- WhatsApp : Fichiers crypt.db4 (Android) → version antérieure
- Signal : SQLCipher → clé dans SharedPreferences
- iOS : impossible sans clé utilisateur
PROBLÈME : Téléphone verrouillé après trop d'essais
SOLUTION :
- Android : connexion au Google account pour déverrouiller
- iOS : iTunes backup si backups automatiques activés
- Sinon : effacement → plus rien à extraire
12. Chaîne de Custody Mobile
ÉLÉMENTS À DOCUMENTER :
- Modèle exact, IMEI, MEID, Serial
- Version OS + build number
- État de l'écran (verrouillé/déverrouillé)
- État du bootloader (verrouillé/déverrouillé)
- Code PIN/motif (si connu)
- Comptes iCloud/Google associés
- Niveau batterie
- Opérateur téléphonique
- IMSI (SIM card)
PRÉCAUTIONS :
- NE PAS éteindre (perte RAM + verrouillage)
- NE PAS tenter de déverrouiller sans méthode éprouvée
- Utiliser une cage de Faraday (Faraday bag)
- Documenter chaque extraction
- Conserver l'original sous scellé
13. Ressources