Po drátě 4: Řešení vedlejší úlohy č. 80

Kód pro tuto vedlejší úlohu bylo možno najít v hromadě spamu ze sedmé úlohy. Jeden ze spamů vybízel k zakoupení 99:cyalis.

Kdo koupil, neprohloupil. Dostal velký soubor za cenu malého. Tedy, dostal velký, 1,8 gigabytů dlouhý soubor zabalený v 136bytovém tar.bz2 archivu.

Tady něco smrdí. Jak se to tam vešlo? Inu, soubor hledej_zde, který archiv obsahoval, nebyl obyčejný soubor. Byl plný nul. A nebyl to obyčejný soubor plný nul. Byl to sparse soubor.

Kde tedy hledat heslo? Vlastníkem souboru je root, čas a datum taky vypadá normálně (aspoň vidíte, kdy úloha vznikla, a jak dlouho tedy každé Po drátě připravujeme). Co je tam ještě za informace, které vypadají divně? Správně, délka souboru.

Délka souboru převedená do hexa je 726F7061. To vypadá jako čtyři ASCII znaky napsané za sebou! A taky že ano. Délka souboru zapsaná binárně (v big endianu) dává heslo "ropa".

Komentář

Nejčastější odpovědí byly různé kousky textu, které soutěžící našli v rozbzipovaném taru, následované pokusy typu sparse_file, /dev/zero, empty nebo prazdny.

Původně jsme chtěli mít úlohu malinko sofistikovanější, narazili jsme ale na různé obskurní limity různých programů při práci se soubory většími než 4 GiB. Jiné zase nebyly schopny ani sparse soubor zkomprimovat na dostatečně malou velikost. Nakonec sítem prolezl pouze tar.bz2. Ukázalo se však, že zatímco u souborů menších než 4 GiB ukládá tar jejich velikost textově, pokud soubor přeleze 4 GiB přejde na binární kódování velikosti. V big endianu. Takže si asi dovedete představit, co bylo po rozbzipování okamžitě jako první vidět... Museli jsme tedy heslo omezit na maximálně čtyři znaky.

Autor nápadu je již neznámý, úlohu jsme našli na podrátí wiki jako přebytek z minulých let. O průzkum kompresních programů a vybrání toho pravého se postaral Jirka Benc.