Premessa
Non c'è niente di pericoloso nelle procedure descritte SE SAPETE COSA STATE FACENDO.
Le schermate di esempio si basano su un MI4c 32GB, ma penso che il discorso sia abbastanza generico da essere valido per tutti i terminali.
questa guida prende lo spunto da due thread:
- El Grande Partition Table Reference,
che si propone di catalogare le varie tabelle di partizione dei dispositivi android
http://forum.xda-developers.com/showthread.php?t=1959445
- Backup/Restore Partitions through ADB
http://en.miui.com/thread-31550-1-1.html
PARTE PRIMA
Analisi di una Rom Fastboot
All'interno della cartella principale che prende il nome dal modello del telefono e dalla versione di rom(nel mio caso libra_images_6.1.21_20160107.0000.12_5.1_cn), troviamo la directory images, dei files batch e un file di testo misc.txt che contiene le informazioni della rom:
misc.txt:
il file batch, ad es. flashall.bat:
fastboot %* getvar product 2>&1 | findstr /r /c:"^product: *MSM8992$" || echo Missmatching image and device
fastboot %* getvar product 2>&1 | findstr /r /c:"^product: *MSM8992$" || exit /B 1
fastboot %* flash pmic %~dp0images\pmic.mbn
fastboot %* flash pmicbak %~dp0images\pmic.mbn
fastboot %* flash hyp %~dp0images\hyp.mbn
fastboot %* flash hypbak %~dp0images\hyp.mbn
fastboot %* flash tz %~dp0images\tz.mbn
fastboot %* flash tzbak %~dp0images\tz.mbn
fastboot %* flash sbl1 %~dp0images\sbl1.mbn
fastboot %* flash sbl1bak %~dp0images\sbl1.mbn
fastboot %* flash sdi %~dp0images\sdi.mbn
fastboot %* flash rpm %~dp0images\rpm.mbn
fastboot %* flash rpmbak %~dp0images\rpm.mbn
fastboot %* flash aboot %~dp0images\emmc_appsboot.mbn
fastboot %* flash abootbak %~dp0images\emmc_appsboot.mbn
fastboot %* erase boot
fastboot %* erase sec
fastboot %* flash misc %~dp0images\misc.img
fastboot %* flash modem %~dp0images\NON-HLOS.bin
fastboot %* flash cache %~dp0images\cache.img
fastboot %* flash userdata %~dp0images\userdata.img
fastboot %* flash system %~dp0images\system.img
fastboot %* flash recovery %~dp0images\recovery.img
fastboot %* flash boot %~dp0images\boot.img
fastboot %* flash bluetooth %~dp0images\BTFM.bin
fastboot %* flash logo %~dp0images\logo.img
fastboot %* flash bk2 %~dp0images\bk2.img
fastboot %* flash cust %~dp0images\cust.img
fastboot %* reboot
Le prime due righe sono di controllo; se il telefono connesso non restituisce come variabile di prodotto "MSM8992", nel caso di un Mi4c, il processo si ferma.
le righe seguenti, escluse le due di wipe (erase), sono ognuna di flash di una partizione col file corrispondente della cartella images.
Esclusi aboot e modem, i nomi sono identici.
L'ultimo comando, come è evidente, esegue un reboot
Il file batch flash_all_except_data_storage.bat non ha la riga di flash userdata, mentre flash_all_lock.bat è presente solo nei nuovi telefoni ed esegue un oem lock.
La directory images
Oltre ai files di flash, contiene rawprogram0.xml che è la struttura dati:
Potete visualizzarlo tranquillamente come testo, per ogni riga, fra le altre cose, c'è il nome del file (filename), il nome della partizione (label), la dimensione in settori, in KB, il byte di partenza (esadecimale) e il settore di partenza.
La penultima riga è dedicata alla GPT, la tabella delle partizioni (da settore 0 al 33)
l'ultima riga alla GPT di backup, che è collocata in fondo, dall'ultimo settore indietro.
PARTE SECONDA
Struttura delle partizioni
Prerequisiti
Colleghiamo il telefono al pc
Apriamo una finestra di terminale con i diritti di amministratore e ci spostiamo nella cartella dove abbiamo installato adb e fastboot
Verifichiamo la connessione
Se la connessione è riuscita, adb restituisce il codice del device connesso
lanciamo una shell ADB
acquisiamo i diritti di root
listiamo le partizioni del telefono
qui vediamo l'elenco delle partizioni, ordinate per posizione, e le dimensioni di ciascuna. Osservate le dimensioni, mmcblk0 è l'insieme di tutte.
per avere anche il nome delle partizioni dobbiamo cercare in /dev/block/platform/ una sottocartella di nome "by-name"
che a me (a voi sarà diverso) torna questo percorso:
quindi ecco il listato delle partizioni per nome:
e adesso abbiamo la correlazione fra il nome e il numero di partizione.
Informazioni più dettagliate potevamo averle usando parted, se proprio volete, basta cercare e un link da cui scaricare, per es. su xdadevelopers lo trovate, ma attenzione, è uno strumento pericoloso, se non sapete come usarlo, rischiate di creare un soprammobile!
Questa è la tabella riassuntiva ottenuta con parted, integrata con le altre notizie raccolte:
PARTE TERZA
Backup delle partizioni
nota
Non ho provato a fare un ripristino (per fortuna non mi si è presentata l'occasione). In rete non ho trovato conferme, nè smentite. Un Nandroid backup l'ho fatto, certo, ma penso che salvare anche le partizioni del mio telefono una ad una non sia dannoso. Quando e se mi troverò con un telefono brickato, avrò a disposizione anche questa chance.
per prima cosa spostiamoci nella memoria esterna (nel mio caso sdcard0)
creiamo una directory di lavoro
e entriamoci
Ora eseguiamo la copia delle partizioni, naturalmente escludendo userdata, sia per le dimensioni, sia perchè ci sono sistemi più efficienti per il backup dei dati utente.
Se abbiamo abbastanza spazio facciamo tutto in una volta, altrimenti a rate!
Una partizione alla volta eseguiamo la copia col comando "dd", rispettando la correlazione fra il numero di blocco e il nome e l'estensione del file usato da Miflash.
Per es. il backup della partizione 1 sarà:
Ma quello della 14:
E quello della 36
Già che ci siamo salviamo anche la GPT, la tabella delle partizioni.
quella principale va dal settore 0 al 33 del blocco 0, quindi è lunga 34 settori da 512 bytes ciascuno.
Terminato il backup, usciamo dalla shell con un doppio exit
e copiamo i nostri files sul pc (li ritroviamo nella cartella da dove siamo partiti)
Per finire stoppiamo il server adb
La cartella Tmp e il suo contenuto la possiamo cancellare col files explorer.
Nota: Se non abbiamo abbastanza spazio sul telefono, possiamo eseguire il backup su una key usb in OTG. In questo caso, però, tutti i comandi di backup li doppiamo eseguire sul telefono stesso, utilizzando una app tipo "emulatore terminale".
In questo caso il percorso della directory Tmp sarà
PARTE QUARTA
Diamo un'occhiata a quanto abbiamo creato
strumenti necessari (ambedue freeware):
per prima cosa, col Disk Editor, diamo un'occhiata alla gpt_main0.bin che abbiamo salvato:
Lanciamo Disk Editor (Mi raccomando, non cambiate le impostazioni, lasciatelo in sola lettura!)
e nella finestra di dialogo selezioniamo l'opzione "Open File",
carichiamo il nostro file gpt_main0.bin e si apre la finestra principale dell'Editor.
A questo punto, per avere dei dati coerenti, dobbiamo settare un template per una Guid Partition Table e offset = 1
ed ecco che i dati diventano coerenti
Osservate, ci sono tutte le nostre partizioni!
Facendo un confronto con la GPT della rom fastboot, possiamo osservare che sono sostanzialmente uguali, a parte i links della userdata. (le Unique partition GUID sono proprio uniche..)
Lanciamo ora ext4unpacker e apriamo il nostro system.img (o un altro ext4)
E voila!
possiamo leggere files (come testo o hex) o addirittura estrarli.
Su alcuni telefoni, se l'ext4 non è di tipo sparse, è possibile usare anche Diskinternals Linux Reader, un altro strumento freware molto valido.
Non c'è niente di pericoloso nelle procedure descritte SE SAPETE COSA STATE FACENDO.
Le schermate di esempio si basano su un MI4c 32GB, ma penso che il discorso sia abbastanza generico da essere valido per tutti i terminali.
questa guida prende lo spunto da due thread:
- El Grande Partition Table Reference,
che si propone di catalogare le varie tabelle di partizione dei dispositivi android
http://forum.xda-developers.com/showthread.php?t=1959445
- Backup/Restore Partitions through ADB
http://en.miui.com/thread-31550-1-1.html
PARTE PRIMA
Analisi di una Rom Fastboot
All'interno della cartella principale che prende il nome dal modello del telefono e dalla versione di rom(nel mio caso libra_images_6.1.21_20160107.0000.12_5.1_cn), troviamo la directory images, dei files batch e un file di testo misc.txt che contiene le informazioni della rom:
misc.txt:
device=libra
build_number=6.1.21
userdata_version=20160107.0000.12
build_number=6.1.21
userdata_version=20160107.0000.12
il file batch, ad es. flashall.bat:
fastboot %* getvar product 2>&1 | findstr /r /c:"^product: *MSM8992$" || echo Missmatching image and device
fastboot %* getvar product 2>&1 | findstr /r /c:"^product: *MSM8992$" || exit /B 1
fastboot %* flash pmic %~dp0images\pmic.mbn
fastboot %* flash pmicbak %~dp0images\pmic.mbn
fastboot %* flash hyp %~dp0images\hyp.mbn
fastboot %* flash hypbak %~dp0images\hyp.mbn
fastboot %* flash tz %~dp0images\tz.mbn
fastboot %* flash tzbak %~dp0images\tz.mbn
fastboot %* flash sbl1 %~dp0images\sbl1.mbn
fastboot %* flash sbl1bak %~dp0images\sbl1.mbn
fastboot %* flash sdi %~dp0images\sdi.mbn
fastboot %* flash rpm %~dp0images\rpm.mbn
fastboot %* flash rpmbak %~dp0images\rpm.mbn
fastboot %* flash aboot %~dp0images\emmc_appsboot.mbn
fastboot %* flash abootbak %~dp0images\emmc_appsboot.mbn
fastboot %* erase boot
fastboot %* erase sec
fastboot %* flash misc %~dp0images\misc.img
fastboot %* flash modem %~dp0images\NON-HLOS.bin
fastboot %* flash cache %~dp0images\cache.img
fastboot %* flash userdata %~dp0images\userdata.img
fastboot %* flash system %~dp0images\system.img
fastboot %* flash recovery %~dp0images\recovery.img
fastboot %* flash boot %~dp0images\boot.img
fastboot %* flash bluetooth %~dp0images\BTFM.bin
fastboot %* flash logo %~dp0images\logo.img
fastboot %* flash bk2 %~dp0images\bk2.img
fastboot %* flash cust %~dp0images\cust.img
fastboot %* reboot
Le prime due righe sono di controllo; se il telefono connesso non restituisce come variabile di prodotto "MSM8992", nel caso di un Mi4c, il processo si ferma.
le righe seguenti, escluse le due di wipe (erase), sono ognuna di flash di una partizione col file corrispondente della cartella images.
Esclusi aboot e modem, i nomi sono identici.
L'ultimo comando, come è evidente, esegue un reboot
Il file batch flash_all_except_data_storage.bat non ha la riga di flash userdata, mentre flash_all_lock.bat è presente solo nei nuovi telefoni ed esegue un oem lock.
La directory images
Oltre ai files di flash, contiene rawprogram0.xml che è la struttura dati:
Potete visualizzarlo tranquillamente come testo, per ogni riga, fra le altre cose, c'è il nome del file (filename), il nome della partizione (label), la dimensione in settori, in KB, il byte di partenza (esadecimale) e il settore di partenza.
La penultima riga è dedicata alla GPT, la tabella delle partizioni (da settore 0 al 33)
l'ultima riga alla GPT di backup, che è collocata in fondo, dall'ultimo settore indietro.
PARTE SECONDA
Struttura delle partizioni
Prerequisiti
- Diritti di root sul dispositivo
- Debug USB attivato.
- Minimal ADB and Fastboot kit(basta cercare nel forum per il link)
- busybox
Colleghiamo il telefono al pc
Apriamo una finestra di terminale con i diritti di amministratore e ci spostiamo nella cartella dove abbiamo installato adb e fastboot
Verifichiamo la connessione
adb devices
Se la connessione è riuscita, adb restituisce il codice del device connesso
lanciamo una shell ADB
adb shell
acquisiamo i diritti di root
su
listiamo le partizioni del telefono
cat /proc/partitions
qui vediamo l'elenco delle partizioni, ordinate per posizione, e le dimensioni di ciascuna. Osservate le dimensioni, mmcblk0 è l'insieme di tutte.
per avere anche il nome delle partizioni dobbiamo cercare in /dev/block/platform/ una sottocartella di nome "by-name"
find /dev/block/platform/ -type d -name "by-name"
che a me (a voi sarà diverso) torna questo percorso:
/dev/block/platform/f9824900.sdhci/by-name
quindi ecco il listato delle partizioni per nome:
ls -al /dev/block/platform/f9824900.sdhci/by-name
e adesso abbiamo la correlazione fra il nome e il numero di partizione.
Informazioni più dettagliate potevamo averle usando parted, se proprio volete, basta cercare e un link da cui scaricare, per es. su xdadevelopers lo trovate, ma attenzione, è uno strumento pericoloso, se non sapete come usarlo, rischiate di creare un soprammobile!
Questa è la tabella riassuntiva ottenuta con parted, integrata con le altre notizie raccolte:
PARTE TERZA
Backup delle partizioni
nota
Non ho provato a fare un ripristino (per fortuna non mi si è presentata l'occasione). In rete non ho trovato conferme, nè smentite. Un Nandroid backup l'ho fatto, certo, ma penso che salvare anche le partizioni del mio telefono una ad una non sia dannoso. Quando e se mi troverò con un telefono brickato, avrò a disposizione anche questa chance.
per prima cosa spostiamoci nella memoria esterna (nel mio caso sdcard0)
cd /storage/sdcard0
creiamo una directory di lavoro
mkdir Tmp
e entriamoci
cd Tmp
Ora eseguiamo la copia delle partizioni, naturalmente escludendo userdata, sia per le dimensioni, sia perchè ci sono sistemi più efficienti per il backup dei dati utente.
Se abbiamo abbastanza spazio facciamo tutto in una volta, altrimenti a rate!
Una partizione alla volta eseguiamo la copia col comando "dd", rispettando la correlazione fra il numero di blocco e il nome e l'estensione del file usato da Miflash.
Per es. il backup della partizione 1 sarà:
dd if=/dev/block/mmcblk0p1 of=sbl1.mbn
Ma quello della 14:
dd if=/dev/block/mmcblk0p14 of=BTFM.bin
E quello della 36
dd if=/dev/block/mmcblk0p36 of=NON-HLOS.bin
Già che ci siamo salviamo anche la GPT, la tabella delle partizioni.
quella principale va dal settore 0 al 33 del blocco 0, quindi è lunga 34 settori da 512 bytes ciascuno.
dd if=/dev/block/mmcblk0 of=gpt_main0.bin bs=512 count=34
Terminato il backup, usciamo dalla shell con un doppio exit
exit
exit
exit
e copiamo i nostri files sul pc (li ritroviamo nella cartella da dove siamo partiti)
adb pull /storage/sdcard0/Tmp/
Per finire stoppiamo il server adb
adb kill-server
La cartella Tmp e il suo contenuto la possiamo cancellare col files explorer.
Nota: Se non abbiamo abbastanza spazio sul telefono, possiamo eseguire il backup su una key usb in OTG. In questo caso, però, tutti i comandi di backup li doppiamo eseguire sul telefono stesso, utilizzando una app tipo "emulatore terminale".
In questo caso il percorso della directory Tmp sarà
/storage/usbotg/Tmp
PARTE QUARTA
Diamo un'occhiata a quanto abbiamo creato
strumenti necessari (ambedue freeware):
per prima cosa, col Disk Editor, diamo un'occhiata alla gpt_main0.bin che abbiamo salvato:
Lanciamo Disk Editor (Mi raccomando, non cambiate le impostazioni, lasciatelo in sola lettura!)
e nella finestra di dialogo selezioniamo l'opzione "Open File",
carichiamo il nostro file gpt_main0.bin e si apre la finestra principale dell'Editor.
A questo punto, per avere dei dati coerenti, dobbiamo settare un template per una Guid Partition Table e offset = 1
ed ecco che i dati diventano coerenti
Osservate, ci sono tutte le nostre partizioni!
Facendo un confronto con la GPT della rom fastboot, possiamo osservare che sono sostanzialmente uguali, a parte i links della userdata. (le Unique partition GUID sono proprio uniche..)
Lanciamo ora ext4unpacker e apriamo il nostro system.img (o un altro ext4)
E voila!
possiamo leggere files (come testo o hex) o addirittura estrarli.
Su alcuni telefoni, se l'ext4 non è di tipo sparse, è possibile usare anche Diskinternals Linux Reader, un altro strumento freware molto valido.