20 votes

Comment récupérer un fichier supprimé de la partition /data ?

J'ai réinitialisé mon téléphone Android M enraciné, mais je me rends compte maintenant qu'il y avait un fichier dans la mémoire de l'appareil. /données dont j'ai besoin.

Est-il possible de créer une image (.img ou quelque chose de similaire) de la partition /data afin de pouvoir exécuter un logiciel de récupération pour ext4 sur cette image ? J'ai une petite connaissance de l'ADB.

1 votes

0 votes

27voto

Irfan Latif Points 16863

Tout d'abord, pour clarifier root y data :

  • Répertoire racine / des appareils Android est un pseudo système de fichiers (temporaire) en lecture seule ( rootfs ) qui vit dans la RAM et disparaît lorsque l'appareil est éteint. Lorsque l'appareil est mis sous tension, il est à nouveau extrait de la mémoire vive. initramfs qui vit dans boot partition avec le noyau.

Sur les appareils plus récents avec système-as-Root , system est montée à la racine / .

  • /data est un point de montage, où la plus grande partition, généralement nommée userdata est monté. Cette partition contient toutes les applications de l'utilisateur, leurs données (paramètres, bases de données, caches, fichiers temporaires, etc.), les données des applications du système et toutes les autres configurations que nous effectuons par l'intermédiaire de Settings . /data/media/0 est le répertoire que nous voyons comme /sdcard o /storage/emulated/0 par le biais de émulation .

... il y avait un fichier dans le répertoire /data dont j'ai besoin. Est-il possible de créer une image (.img ou quelque chose de similaire) du répertoire racine ...

Si un fichier est supprimé de /data vous devez créer un fichier de data et non celle du répertoire Root.

Vous pouvez le faire de plusieurs façons décrites ci-dessous. Toutes nécessitent Accès à la racine .


Mais tout d'abord, voyez cette réponse pour s'assurer que vos données sont récupérables.

En bref, la récupération n'est plus ou moins possible que si ( 1 ) :

  • Vos données supprimées n'ont pas été TRIM med ou discard ed.
  • Et vous n'avez pas fait de réinitialisation d'usine sur les données cryptées. /data partition.

Ce que vous devez faire immédiatement :

  • Éteignez le téléphone pour vous assurer que les données supprimées ne sont pas écrasées.
  • N'installez pas d'applications de récupération de données sur l'appareil, elles peuvent faire plus de mal que de bien.
  • Monter le système de fichiers (si nécessaire) en mode de récupération (ou sur le PC) uniquement avec ro,nodiscard options.

TROUVER UN DISPOSITIF DE BLOCAGE :

Afin d'accéder au userdata vous devez trouver son périphérique de bloc. Si vous avez un accès Root, vous pouvez le faire à partir des partitions montées :

~# mount | grep 'on /data'
/dev/block/mmcblk0p... on /data type f2fs (rw,nosuid,nodev,...)

Sur les appareils Qualcomm, il se trouve à l'adresse suivante /dev/block/bootdevice/by-name/userdata (lien symbolique). Pour MediaTek ( MTK ) et d'autres SoCs, le chemin est légèrement différent. Vous pouvez trouver tous les dispositifs de bloc ou by-name répertoire en utilisant find commandement :

~# find /dev -type b
~# find /dev -type d -name 'by-name'

Ou par des coups et des procès :

~# ls -d /dev/*/by-name
~# ls -d /dev/*/*/by-name
~# ls -d /dev/*/*/*/by-name

  • Si votre /data la partition a Cryptage complet du disque (FDE) vous devez le décrypter avant de l'exposer à l'UMS, car le décryptage du FDE d'Android sur un PC est presque impossible dans la plupart des cas en raison du cryptage renforcé par le matériel. Voir quelques explications pertinentes dans ma réponse à Cryptage de la carte SD compatible multi-plateforme pour Android . dm-crypt décrypte le dispositif de bloc pour /dev/block/dm-[N] . Utilisez ceci à la place de userdata .
  • Pour éviter toute perte de données, il est recommandé de créer un dump lorsque la partition n'est pas montée, c'est-à-dire en mode récupération.

CRÉATION D'UN DUMP DE PARTITION :

DISK DUMP ( dd )
Une fois que le périphérique de bloc est connu, vous pouvez utiliser la fonction dd commande de :

  • shell ADB (OS ou récupération personnalisée)
  • Un émulateur de terminal comme Termux

Depuis le userdata est la plus grande partition (toutes les autres partitions utilisent à peine 5 Go du stockage total), vous ne pouvez pas la vider sur votre mémoire interne. Une carte SD externe de plus grande capacité est nécessaire.

Pour créer la décharge :

~# dd if=/dev/block/bootdevice/by-name/userdata of=/path/to/ext_sdcard/data.img

ADB
Si vous ne voulez pas utiliser une carte SD externe, vous pouvez aussi vider la partition directement sur le PC. Vous avez d'abord besoin d'un adb installation, fonctionnant comme Root. Ensuite, il peut être utilisé de plusieurs façons :

~$ adb exec-out dd if=/dev/block/bootdevice/by-name/userdata > data.img

* Assurez-vous que votre adb binaire (sous Windows ou Linux) prend en charge exec-out .

Mais vous pouvez vous retrouver avec des données corrompues lorsque vous écrivez une partition entière de grande taille sur le disque dur. STDOUT de terminal car il y a des problèmes avec les types de saut de ligne ( CR y LF ). Voir aussi STDOUT o STDERR des programmes concernés pourraient éventuellement être ajoutées au dossier si elles ne sont pas adressées à /dev/null . Même un seul octet erroné peut rendre les systèmes de fichiers non montables. Voir cette question pour référence.

Pour éviter les caractères indésirables, utilisez stty raw y/o dos2unix :

~$ adb shell 'stty raw && dd if=/dev/block/bootdevice/by-name/userdata' > data.img

Mais le moyen le plus direct est :

~$ adb pull /dev/block/bootdevice/by-name/userdata data.img

Voir cette réponse pour plus de détails.

FLUX SUR TCP
Pour éviter les complications liées au terminal décrites ci-dessus ou si pour une raison quelconque adbd ne peut pas être exécuté en tant que Root Il est également possible de créer un serveur TCP minimal pour le transfert de données. Faites suivre le port du téléphone vers le PC et exécutez une commande netcat Serveur TCP en mode écoute :

~$ adb reverse tcp:1024 tcp:1024
~$ nc -v -l -p 1024 </dev/null | pv -ab >data.img

Au téléphone :

~# cat /dev/block/bootdevice/by-name/userdata | busybox nc 127.0.0.1 1024

CONNEXION USB (RNDIS)
Pour éviter d'utiliser ADB, on peut utiliser le tethering USB pour assurer la connectivité réseau :

~# cd /sys/class/android_usb/android0
~# echo -n 0 >enable
~# echo -n rndis,adb >functions
~# echo -n 1 >enable

* Vous pouvez également modifier d'autres fichiers comme {iSerial,iProduct,iManufacturer} y f_rndis/{ethaddr,manufacturer,wceis,rndis_transports,max_pkt_per_xfer} dans le répertoire ci-dessus si nécessaire. * Sur les nouveaux appareils, vous devrez peut-être utiliser /config au lieu de /sys . Quelques conseils pertinents aquí .

Ajouter une adresse IP :

~# busybox ip rule add lookup main
~# busybox ip address add 192.168.1.1/30 dev rndis0
~# busybox ip link set rndis0 up

Sur le PC, ajoutez l'IP manuellement (il n'y a pas de serveur DHCP) :

~$ sudo ip address add 192.168.1.2/30 dev usb0
~$ nc -v -l -p 1024 </dev/null | pv -ab >data.img

Au téléphone :

~# busybox nc 192.168.1.2 1024 </dev/block/bootdevice/by-name/userdata

De la même manière, il est également possible d'utiliser la fonction rclone rcat pour transférer le dump via WebDAV ou FTP ou SFTP. Voir Comment diffuser une sauvegarde cryptée de l'ensemble du dispositif vers un hôte distant ?

STOCKAGE DE MASSE USB (UMS)
Cette méthode est utile si vous ne voulez pas créer un dump de la partition, mais plutôt accéder à la partition directement sur le PC. Voir ma réponse à Pourquoi ne puis-je pas voir le stockage Android comme une partition sur le PC ? pour connaître les méthodes permettant d'activer l'UMS de manière approfondie /sys o /config interfaces.

Une fois fait, userdata apparaîtra comme une partition sur le PC Linux, tout comme nous connectons une clé USB. Si /dev/sda est le disque dur, généralement /dev/sdb sera le userdata partition. Vous pouvez trouver cela en utilisant blkid commandement :

~# blkid | grep userdata
/dev/sdb: PARTLABEL="userdata" PARTUUID="..."

Vous pouvez exécuter des programmes de récupération directement sur le périphérique bloc ou monter le système de fichiers (si nécessaire) ou encore créer un dump.

COMMENT RÉCUPÉRER LES DONNÉES ?

Il existe essentiellement deux façons de récupérer des données supprimées, comme indiqué dans le document suivant cette réponse : méthode de découpage et par le biais du système de fichiers.

Les outils de récupération n'ont généralement pas besoin de monter les systèmes de fichiers, mais si c'est nécessaire, il faut le faire sur un PC Linux, car Windows ne prend pas en charge le montage des fichiers. ext4 o f2fs nativement, donc les outils ne sont pas facilement disponibles AFAIK.

Si quelqu'un a réussi à accéder au niveau bloc/journal au système de fichiers Linux/Androïde pour récupérer des données sous Windows par le biais de Ext3Fsd ou tout autre pilote, faites-le moi savoir afin que je puisse mettre à jour la réponse.

Sous Linux, vous pouvez utiliser des outils comme supprimé pour récupérer des données en utilisant le journal du système de fichiers :

~# extundelete --restore-all data.img

Ou pour récupérer des données directement avec UMS :

~# extundelete --restore-all /dev/sdb

Puisque vous avez effectué une réinitialisation d'usine qui efface le système de fichiers, envisagez la méthode de sculpture en utilisant des outils tels que TestDisk o scalpel :

~# testdisk data.img

De la même manière, vous pouvez utiliser n'importe quel autre outil de récupération de données. Voir l'ArchWiki sur Récupération de fichiers pour plus de détails.


RELATED :

1 votes

Vous avez juste oublié d'indiquer le type de fichier à mount. utilisez mount avec -t ext4 -o loop,ro,noexec,noload et au lieu de adb exec-out vous pouvez simplement utiliser adb pull /dev/block/bootdevice/by-name/userdata o adb pull /dev/block/dm-0 digital-forensics.sans.org/blog/2011/06/14/

0 votes

@alecxs mentionner fstype n'est pas nécessaire ; mount binary peut deviner un certain nombre de systèmes de fichiers couramment utilisés. Non -t est en fait -t auto . adb pull mérite d'être mentionnée. Merci de le souligner.

0 votes

Mount ne peut pas détecter le fstype pour les montages en boucle, en particulier pour les montages sales (voir lien)

0voto

martinszy Points 9

Sur la base de cette question, j'ai utilisé la méthode décrite ci-dessus :

~$ adb exec-out dd if=/dev/block/bootdevice/by-name/userdata > data.img

Mais il y a un problème : l'image sera cryptée si les données ne sont pas d'abord décryptées. Les noms de fichiers et de dossiers seront des charabias.

Le seul moyen d'obtenir des données décryptées est de passer par TWRP, car il demande le mot de passe de décryptage au démarrage.

Ensuite, j'ai pu copier les données via mtp.

Je sais que cela ne semble pas être le sujet de la récupération de fichiers, mais cette question reçoit beaucoup de trafic et la solution proposée a un inconvénient et je ne suis pas autorisé à faire des commentaires pour le moment.

Edit : La réponse originale indique un moyen d'accéder aux informations décryptées que je n'avais pas vu.

-2voto

Empire of E Points 1586

Où exactement dans DATA ? Est-il dans la carte SD émulée ?
Si c'est dans la carte SD émulée, vous pouvez retirer votre carte SD externe et monter le périphérique en mode USB Mass Storage... Vous pouvez aussi utiliser un logiciel de récupération gratuit comme Recuva. ccleaner.com/recuva

Cependant, si votre fichier n'est pas dans la carte SD émulée, vous devez sauvegarder la partition de données comme vous l'avez mentionné.

Pour ce faire, vous pouvez utiliser l'appareil lui-même pour exécuter une commande DD ou CAT afin d'écrire les données dans un fichier .img sur votre carte SD

Sur le dispositif
Utilisation de l'émulateur de terminal

  • localisez le répertoire de votre partition -par nom

    getprop ro.frp.pst

( Ceci va obtenir le répertoire /dev/block/platform/DEVICE/by-name pour frp - changez le nom en data )
Vous pouvez simplement utiliser /data sinon.

dd if=/data of=/sdcard/data.img   

If = fichier d'entrée - Of = fichier de sortie

Vous pouvez également utiliser ADB

Via Computer

  • Installez ADB (pas le SDK entier mais juste ADB)

Utilisation des invites de commande ou du power shell

adb shell dd if=/data of=/sdcard/data.img

Vous devrez peut-être trouver le bon répertoire.

Ensuite, vous pouvez monter le .img sur un PC et faire la récupération Je ne suis pas sûr de savoir comment monter le fichier .img si la partition est ext4, donc cette réponse ne va pas plus loin.

Vous pouvez aussi utiliser une application appelée Disk Digger Il a la capacité de scanner la partition de données en direct, L'accès à la racine est nécessaire

0 votes

if=/data ne fonctionnera pas, car il s'agit juste d'un point de montage, et non du périphérique en bloc. dd extrait les fichiers, pas les répertoires. Deuxièmement, la mémoire de masse USB peut également être utilisée pour monter ou extraire des fichiers complets. data à partir d'une récupération personnalisée directement sur le PC.

0 votes

Je suis désolé, je n'avais pas réalisé que vous utilisiez une récupération personnalisée... C'est très simple, il suffit de faire une sauvegarde ! .... Je sais que if=/data ne fonctionnera pas, c'est pourquoi j'ai dit qu'il fallait trouver la by-name répertoire.

0 votes

J'ai l'impression que les sauvegardes nandroid (généralement créées par tar ne contiennent que des fichiers/répertoires, et non les détails au niveau de l'inode des blocs nécessaires pour effacer quelque chose.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X