Na dvoře byl rok 2019. Do naší laboratoře dorazil docela neobvyklý pro naši dobu disk QUANTUM FIREBALL Plus KA s kapacitou 9,1 GB. Podle slov majitele disku došlo k poruše v roce 2004 kvůli vadnému napájecímu zdroji, který si vzal s sebou pevný disk a další komponenty PC. Následně podnikal cestu po různých servisech v pokusu o opravu disku a obnovení dat, které nebyly úspěšné. Někde slibovali levné opravy, ale problém se nevyřešil, jinde to bylo příliš drahé a klient se rozhodl data neobnovovat, ale nakonec disk prošel cestou přes řadu servisních center. Opakovaně se ztrácel, ale díky tomu, že si majitel předem pořídil informace z různých nálepek na disku, se mu podařilo zajistit, aby se právě jeho pevný disk vrátil z některých servisních center. Cesty neproběhly bez následků, na originální desce řadiče zůstaly mnohé stopy pájení a také vizuálně cítil nedostatek SMD prvků (předbíhám, že to je zdaleka nejmenší problém tohoto disku).

Obr. 1 HDD Quantum Fireball Plus KA 9,1 GB
Nejprve bylo nutné pracovat na vyhledávání v dárcovském archivu takového starého bratra-dvojčete tohoto disku s funkční deskou řadiče. Když byla tato mise splněna, bylo možné provést podrobné diagnostické úkony. Zkontrolovali jsme vinutí motoru na zkrat a ujistili se, že žádný není, a nainstalovali desku z disku-dárce na disk-pacient. Připojili jsme napájení a slyšeli normální zvuk roztočení hřídele, absolvování kalibračního testu se zavedením mikroprogramu a po několika sekundách disk v registrech hlásí připravenost reagovat na příkazy z rozhraní.
Obr. 2 Ukazatele DRD DSC znamenají připravenost přijímat příkazy.
Rezervujeme všechny kopie modulů mikroprogramu. Provádíme kontrolu integrity modulů mikroprogramu. Při čtení modulů žádné problémy nenastávají, ale analýza zpráv ukazuje, že jsou zde určité podivnosti.

Obr. 3. Tabulka zón.
Věnujeme pozornost tabulce zónového rozložení a všimneme si, že počet válců je 13845.

Obr. 4 P-list (primární seznam – seznam závad zaznamenaných během výrobního cyklu).
Věnujeme pozornost příliš malému počtu závad a jejich lokalizaci. Prohlížíme modul logu skrývání výrobních závad (60h) a zjišťujeme, že je prázdný a neobsahuje žádný záznam. Na základě toho můžeme předpokládat, že v některém z předchozích servisních center mohly probíhat určité manipulace s pracovní zónou disku, a náhodně nebo záměrně byl zapsán cizí modul, nebo byl vymazán seznam závad v originálním. Pro ověření této domněnky vytváříme úkol v Data Extractor s aktivovanými možnostmi „vytvoření sektoru po sektoru“ a „vytvoření virtuálního překladače“.

Obr. 5 Parametry úkolu.
Po vytvoření úkolu prohlížíme záznamy v tabulce oddílů v nulovém sektoru (LBA 0).

Obr. 6 Hlavní spouštěcí záznam a tabulka oddílů.
Na posunu 0x1BE se nachází jediný záznam (16 bajtů). Typ souborového systému na oddílu – NTFS, posun k začátku 0x3F (63) sektoru, velikost oddílu 0x011309A3 (18 024 867) sektorů.
V editoru sektorů otevíráme LBA 63.

Obr. 7 Spouštěcí sektor NTFS.
Z informací v spouštěcím sektoru NTFS oddílu lze říci následující: velikost sektoru, přijatá v objemu, 512 bajtů (na posunu 0x0B je zapsáno slovo 0x0200 (512)), počet sektorů v klastru je 8 (na posunu 0x0D je zapsán bajt 0x08), velikost klastru je 512x8=4096 bajtů, první záznam MFT se nachází na posunu 6 291 519 sektorů od začátku disku (na posunu 0x30 je zapsané slovo 0x00 00 00 00 00 0C 00 00 (786 432) číslo prvního klastru MFT. Číslo sektoru se vypočítá podle vzorce: Číslo klastru * počet sektorů v klastru + posun k začátku oddílu 786 432* 8+63= 6 291 519).
Přejdeme k sektoru 6 291 519.

Obr. 8.
Ale data obsažená v tomto sektoru rozhodně nevypadají jako záznam MFT. To sice ukazuje na možnou nesprávnou translaci kvůli nekompletnímu seznamu závad, ale toto tvrzení nedokazuje. Pro další ověření provedeme čtení disku po 10 000 sektorech v obou směrech vzhledem k sektoru 6 291 519. A poté provedeme hledání regulárních výrazů ve čteném.

Obr. 9 První záznam MFT.
V sektoru 6 291 551 nacházíme první záznam MFT. Jeho umístění se od výpočtu liší o 32 sektorů a dále následuje nepřetržitá skupina 16 záznamů (od 0 do 15). Zaznamenáme do tabulky posun pozici sektoru 6 291 519 s posunem o 32 sektorů dopředu.

Obr. 10
Umístění záznamu č. 16 by mělo být podle posunu 12 551 431, ale nacházíme tam nuly místo záznamu MFT. Provedeme podobné hledání v okolí.

Obr. 11 Záznam MFT 0x00000011 (17)
Byl nalezen velký fragment MFT, který začíná záznamem pod číslem 17 (o délce 53 646 záznamů) s posunem o 17 sektorů. Pro pozici 12 155 431 zaznamenáme posun +17 sektorů do tabulky posunů.
Určením umístění fragmentů MFT v prostoru můžeme usoudit, že to nevypadá jako náhodný problém a záznam fragmentů MFT je podle nesprávných posunů. Verzi s nesprávným překladačem lze považovat za potvrzenou.
Pro další lokalizaci bodů posunů stanovíme maximální možné posunutí. K tomu určíme, jak moc je posunutý konečný marker NTFS oddílu (kopie spouštěcího sektoru). Na obrázku 7 podle posunu 0x28 je čtyřslovné slovo — to je hodnota velikosti oddílu 0x00 00 00 00 01 13 09 A2 (18 024 866) sektorů. Přičteme posun samotného oddílu od začátku disku k jeho délce, získáme posun koncového markeru NTFS 18 024 866 + 63 = 18 024 929. Očekávaně tam nebyla požadovaná kopie spouštěcího sektoru. Při hledání v okolí byla nalezena s narůstajícím posunem +12 sektorů vůči poslednímu fragmentu MFT.

Obr. 12 Kopie spouštěcího sektoru NTFS
Druhou kopii spouštěcího sektoru podle posunu 18 041 006 ignorujeme, jelikož nemá žádný vztah k našemu oddílu. Na základě předchozích opatření bylo zjištěno, že uvnitř oddílu jsou vkládané fragmenty z „vynořených“ v překladech 61 sektorů, které rozšířily data.
Provádíme úplné čtení úložiště, jehož výsledkem zůstává 34 nečitalných sektorů. Bohužel není možné spolehlivě zaručit, že všechny jsou vadné, odstraněné z P-listu, ale při dalším analýze je žádoucí brát v úvahu jejich umístění, protože v některých případech bude možné spolehlivě určovat body posunu s přesností až na sektor, a ne na soubor.

Obr. 13 Statistika čtení disku.
Naším dalším úkolem bude stanovit orientační místa posunů (s přesností k souboru, ve kterém vznikly). K tomu provedeme skenování všech záznamů MFT a postavíme řetězce umístění souborů (fragmentů souborů).

Obr. 14 Řetězce umístění souborů, nebo jejich fragmentů.
Dále, pohybujíc se od souboru k souboru, hledáme, od jakého okamžiku místo očekávaného záhlaví souboru se objeví jiné údaje, a potřebné záhlaví bude nalezeno s určitým pozitivním posunem. A s upřesněním bodů posunů vyplňujeme tabulku. Výsledkem jejího vyplnění bude přes 99% souborů bez poškození.

Obr. 15 Seznam uživatelských souborů (od klienta bylo získáno souhlas k publikaci této obrazovky)
Pro stanovení bodových posunů v jednotlivých souborech lze provést další práce a při znalosti struktury souboru vyhledat vkládání dat, která k němu nepatří. Ale v této úloze to nebylo ekonomicky výhodné.
P.S. Rád bych se také obrátil na kolegy, v jejichž rukou se tento disk ocitl dříve. Prosím, buďte opatrní při práci s mikroprogramem zařízení a rezervujte služební údaje dříve, než něco změníte, a také nedopouštějte se úmyslného zhoršení problému, pokud se vám nepodařilo dohodnout s klientem na provádění prací.
Zdroj: habr.com
