Po drátě 6: Řešení úlohy č. 7
Zadáním této úlohy byl zazipovaný soubor s podezřele pěknou kulatou velikostí. Nejprve bylo potřeba zjistit, že jde o obraz souborového systému ext3. Kdo na to přišel tak, že si na soubor pustil program file, dozvěděl se ještě víc (kdo by do file řekl, že je až tak chytrý):
uloha: Linux rev 1.0 ext3 filesystem data, UUID=6a5e2fe7-a476-471c-a160-9c234bde3e3d (needs journal recovery)
Pokud souborový systém přimountujeme, najdeme tam adresář lost+found a soubor se jménem heslo. V souboru heslo se bohužel dočteme pouze "Tady kdysi byvalo heslo, ale uz tu neni. :(" Kde heslo tedy hledat a jak jej získat?
Kdo použil file, ten už tuší. Kdo ne, ten může na filesystem například pustit fsck a všimnout si výpisu "uloha: recovering journal" a bude tušit taky - heslo je sice přesně tam, kde být má, ale při přehrání žurnálu zmizí. Je tedy třeba přijít na to, jak se zbavit žurnálu.
Nejjednodušším (a autorem původně zamýšleným) řešení by bylo zavolat mount s volbou norecovery (a tedy zároveň nutně i ro), to ovšem autorovi ani nikomu z testerů kvůli nepříjemnému bugu nefungovalo. (Mimochodem, každý ročník Po drátě přinese po hře nečekané množství bugreportů.) Volat mount -t ext2 taky nefunguje, pokud např. pomocí tune2fs nepovypínáme nadbytečné vlastnosti souborového systému. Naštěstí ale existuje spousta nástrojů, pomocí kterých heslo získáme snadno. Nejzajímavějším z nich je asi debugfs, který nám soubor s heslem vydá, když si o to řekneme pomocí příkazu dump. Existují samozřejmě i další nástroje, např. ext3grep (ten se jinak hodí především k zachraňování smazaných souborů), které nám kýžený velký obrázek, na jehož spodním okraji stojí "Heslo je mandelinka," odhalí bez větší námahy.
Zajímavosti
Mimochodem, kdo se od fsck nedal přesvědčit, že je filesystem čistý a pustil jej s -f, ten se dočetl o nepřipojeném inode 99. A pokud jej připojil do lost+found, našel soubor MP3 s heslem k vedlejší úloze. (Samozřejmě, i tady bylo mnoho dalších možností, jak nahrávku vypátrat.)
Ještě se můžete ptát, proč je obrázek tak veliký, k čemu je ten divný nápis nahoře, a kde se vzala v souborovém systému ta hromada smazaných souborů fileXX. Odpověď je snadná: V první verzi úlohy byl obrázek souvislý a heslo napsané na horním okraji, první tester se ale neobtěžoval s filesystémovou magií a úlohu vyřešil pomocí strings (JFIF bohužel bije do očí) a dd. Tato verze tedy vznikla tak, že byla založena spousta malých prázdných souborů a obrázek nahrán až po smazání poloviny z nich. Řešení pomocí dd tedy vede pouze k zobrazení podivného textu, který se některým testerům kupodivu téměř podařilo vyluštit, ač to nebylo vůbec k ničemu užitečné. Jde o tibetskou obdobu našeho oblíbeného "Tady heslo není."
K vytvoření úlohy, konkrétně k zachycení správného okamžiku před zapsáním obsahu žurnálu, byly použity mírně upravené NBD tools. Nepřejte si vědět, co se stane, když nbd-server skončí dřív, než odmountujete filesystem, autorům ale i tak děkujeme. Autorkou úlohy je Anička, nápad na úlohu je od Medvěda.
mount -o loop,ro,noload -t ext4 uloha /mnt/pokus
Za "Tady heslo neni" ve hlavicce JPEGu by nekdo zaslouzil facku, kdyz tam nakonec bylo..
Pozoruhodne je, ze jsem videl i hlavicku MP3, ale program photorec mi ho nenasel :-(
> pouze k zobrazení podivného textu, který se některým testerům kupodivu téměř
> podařilo vyluštit, ač to nebylo vůbec k ničemu užitečné. Jde o tibetskou obdobu
> našeho oblíbeného "Tady heslo není."
> </p>
dopracoval som sa k http://tinyurl.com/74q8quf s napisom hore, ale preklad sa mi
uz nepodaril :)
Prikaz --restore-inode 13@2 poporade az do 13:18 (13 je inod toho vysmesneho textaku, 2-18 cisla transakci) - vyjel vsechny verze souboru z zurnalu a nektere z nich obsahovaly kompletni obrazek. Docela cumim co vsechnoze v ext3 zapisuje, asi to nebylo porizeno v tom nejparanoidnejsim "journal rezimu" - to musi byt docela mohutna rezie, vsechko se zurnaluje i metadata. Ale jak je videt muze se to hodit....