Pabeigts darbs pie Lexar Professional 1667x 128GB SDXC UHS-II (U3, V60) atmiņas kartes datu atjaunošanas. Standarta SD un SPI piekļuve nebija iespējama, tādēļ vienīgais risinājums bija darbs tieši ar NAND interfeisu. Atjaunošanas procesā veikta pinout izpēte un NAND parametru identificēšana, atrisināta XOR datu transformācija un interleave struktūra, kas ļāva rekonstruēt sākotnējo datu organizāciju un piekļūt lietotāja datiem.

RažotājsSamsung
KontrolierisSilicon Motion
Čipa IDEC1C983F84
Čipu skaits4
Lapas struktūra16 x (1024 Data + 112 ECC) + 256 SA

 

Lexar Professional 1667x 128GB SDXC UHS-II
Lexar Professional 1667x 128GB SDXC UHS-II

Šāds izskatās dotās kartes NAND pieslēguma kontaktpunktu zīmējums.

Lexar Professional 1667x PCB traces
Lexar Professional 1667x PCB traces

Šādai kartei uz iesniegšanas brīdi nebija gatavu risinājumu nevienā no vadošajām laboratorijām. Nākamais solis bija iegādāties tādu pašu darbspējīgu atmiņas karti (donoru). Donora karte šeit kalpoja kā sava veida "atslēga" nezināmajai arhitektūrai. Tā ļāva eksperimentēt ar zināmiem datiem un novērot, kā kontrolieris tos pārveido pirms ierakstīšanas NAND atmiņā. Pirmais uzdevums ir atrast NAND interfeisa signālus, lai varētu nolasīt fizisko atmiņu. 

Pinout research
Pinout research

Izvēlētiem kontaktiem pievieno signālu loģisko analizatoru. Kartei padod barošanu un "ķer" identifikatora komandu un atbildi.

LA 90h
LA 90h

Attēlā redzamas signālu formas komandai read ID un atbilde - Samsung identifikators 0xEC. Šī izpētes daļa izrādījās diezgan piņķerīga. Pat pēc pareizas savienojumu izveides, izrādījās, ka var nolasīt tikai pusi - 2 čipus. Rusolut laboratorijā atradās šīs kartes rentgenogrāfija un informācija, kur meklēt trūkstošos divus CE signālus, lai nolasītu visus 4 čipus. Papildus divi signāli atrodas kartes ceturtajā slānī. Lai tiktu klāt, jāfrēzē atvere nesabojājot karti. No sākuma viss tika izmēģināts uz donora kartes.

Additional CE signals
Additional CE signals

Rezultātā tika panākta fiziska piekļuve NAND atmiņai un iegūtas četras datu izmetes 4x40GB.

NAND atmiņa nav paredzēta pilnīgi bezkļūdu datu glabāšanai - ar laiku atsevišķi biti var tikt nolasīti nepareizi. Tāpēc kontrolieris izmanto ECC (Error-Correcting Code), lai šīs kļūdas atklātu un izlabotu. Šajā gadījumā izmantotais BCH algoritms ļāva no neapstrādātā NAND nolasījuma atgūt korektus datus un turpināt nākamo analīzes posmu.

NAND lapas struktūra tiek noteikta vizuāli, analizējot bitu karti - 16 x (1024 Data + 112 ECC) + 256 SA.

XOR

XOR atslēga nav zināma. Lai to atrastu, donora kartē tika ierakstīti testa dati - 1GB ar 0x77 un 1GB ar 0x00 vērtībām, kur uz katriem 512 baitiem ir skaitītājs. Tas ļauj izpētīt datu miksēšanu (interleave) un iegūt XOR atslēgu. Izrādījās, ka XOR atslēga nav iegūstama no nulles bloka tieši. Šeit detalizēts skaidrojums par XOR modeli.

Piemēram:

NAND dati = lietotāja dati XOR A XOR LFSR(seed)

Te XOR atslēga nav statiska konstante. Globālā maska A tiek pakārtota dinamiskai LFSR (Linear Feedback Shift Register) ģenerētajai secībai, kuras gadījuma lielumu sadalījumu atsevišķās lapās nosaka konkrēta seed vērtība.

Dotajā kartē atrastā universālā XOR atslēga atkodē gandrīz visu bloku (768 lapas), bet septiņas bloka lapas izmanto atšķirīgu seed katram datu sektoram. Zinot sākotnējo datu vērtības tika izskaitļota pilna XOR maska donora kartei, bet izrādījās, ka klienta kartei šīm izņēmuma lapām LFSR sākumvērtības ir citas un donora XOR atslēga neder.

Tā kā seed bija tikai 14 bitu garš, visu iespējamo vērtību telpa bija 214 = 16 384 varianti. Tas padarīja seed atgūšanu praktiski realizējamu ar pilnu meklēšanu (Brute-Force). Kā verifikācijas kritērijs tika izmantots JPEG MCU (Minimum Coding Unit) dekodēšana. Ja attēla MCU dekodējas bez kļūdām un saglabā sagaidīto progresiju, var secināt, ka seed ir atrasts. Šim solim tika izstrādāts specializēts programmnodrošinājums J16 DataLab.

Tā tika iegūta pilna XOR maska klienta kartei.

Header & LBN

Header & LBN
Header & LBN

Header marķieris ir 1 baits un atrodas nobīdē 18184. Tipisks SM kontrolierim. Lietojamie bloki atrodas diapazonā 0x20 ... 0x3F. Taču šeit noskaidrojās, ka header vērtība spēlē izšķirošu lomu interleave loģikā. LBN (Logical Block Number) ir 32-bitu little-endian vesels skaitlis nobīdē 18176, bet tam uzreiz seko otra vērtība, kas ir precīzi +1 visās lapās. Dubultā LBN loma pagaidām ir neskaidra.

Interleave kartējums

Fiziskajā NAND atmiņā dati neatrodas tādā secībā, kādā lietotājs tos redz. Tie ir sadalīti starp vairākiem čipiem un plane (atmiņas apgabals). Interleave kartējums apraksta šo fragmentu savstarpējo maiņsecību - būtībā nosaka, kurš fragments jāņem nākamais un no kura čipa.

Atklātā datu elementu maiņsecība (interleave) ir sekojoša. Pārošana katrā čipā 1+768. Čipus kombinē secībā [3,2,0,1]. Tomēr cikli nav viendabīgi. Atkarībā no header vērtības katrā skrējienā ņem 2 vai 3 lapu pārus.

LapasHeaderPāru skaits
0 - 70x202
8 - 7510x30 / 0x313
752 - 7590x202
760 - 7670x10nav lietotāja dati

Zemāk ir ilustrācija, kas palīdz labāk uztvert maiņsecības loģiku.

Interleave
Interleave

Rezultāts

No kartes tika atjaunoti apmēram 6300 liela izmēra (10-15MB) JPEG attēli.

Recovered photos
Recovered photos