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

Pokud poslechneme návod na prvních dvou řádcích, spustí se makro, které do volného prostoru mezi čarami vypíše zadané slovo ve zvětšeném "fontu" a následně tento obdélník 'x' a mezer zamíchá a vypíše konstatování dobré/špatné heslo. Co se tu k čertu děje a jak se mohlo něco spustit?

První úkol je tedy zjistit princip načítání a spouštění kódu (a co je vlastně ten kód). K tomu pomůže vestavěná nápověda použitá postupně na znaky, kterými se vše spouští: GY@". Tím zjistíme, že se využívá společného jmenného prostoru registrů na označování (a mazání) textu a maker. Tedy co označíme (např. pomocí 'Y'), můžeme vzápětí spsustit jako makro ('@"').

Druhá část je tedy pochopit 'program'. Pokud nechceme trasovat program celý (vypadá nechutně dlouhý), začneme od konce: rozluštíme jen těch několik znaků na začátku řádky, kde se zjišťuje správnost hesla. Tam zjistíme, že se vypíše obsah registru 'v', přemístí se jeden znak (a tím celý řetězec posune) a nasledně porovná s konstantou.

Nyní máme opět dvě možnosti, jak dál: programátorsky nebo šifrátorsky. Programátor se podívá, kde se plní registr 'v' a čím. Luštitel provede inverzní operaci k tomu posunu řetězce (orotuje zpět) nad tou konstantou a pak najde, kde se části té konstanty vyskytují jinde v kódu. Oba přístupy vedou na kódovací tabulku na řádku pod 'NNNNNAAAAAJJJJJDDDDDIIIIIHHHHHEEEEESSSSSLLLLLOOOOO'. Programátor vidí, že před uložením do registru 'v' je ještě příkaz '5l', čili že se z tabulky bere znak o 5 vpravo než by normálně vyšlo. Proto ví, co má dělat. Luštitel musí intuicí a hleděním na tabulku přijít na to, že v hesle, co mu vyšlo ('BSOSBAHMS'), má každý znak nahradit znakem o jeden vlevo z řádku 'NNNNNAAAAAJJJJJDDDDDIIIIIHHHHHEEEEESSSSSLLLLLOOOOO'.

Správné heslo 'ZELEZNICE' soutěžícího odmění nejen nápisem 'Gratulujeme!', ale i ASCII-artovou animací parního vláčku vypouštějícím kouř. Obláčky se postupně zvětšují, jak se vzdalují od komínku.

Komentář

Úlohu lze řešit i mnoha jinýmy podobnými způsoby s různou mírou poměru pochopení kódu a luštění hrubou silou. Např. lze jen smazat substituce vypisující zprávu o hesle a pak funkci pochopit zkusmo zadáváním různých vstupů.

K úloze existovala nápověda, která byla založena na stejném principu, ale neobsahovala žádnou animaci ani vypisování hesla velkými písmeny ze znaků 'x' - na chvíli ukázala zakódovaný vstup (tj. ekvivalent registru 'v' v hlavní úloze) a po jedné vteřině ho nahradila verdiktem o hesle. Kód byl tak o poznání kratší, pochopitelnější a snáze luštitelný hrubou silou.

Autorem úlohy je Milan, který si vzpomněl, že před mnoha lety viděl ukázku, jak lze programovat v editoru 'vi' (tedy ne 'vim' a tedy bez použití vestavěného skriptovacího jazyka). Akorát si z ní nepamatoval nic jiného, než že počítala Mandelbrotovu množinu v ASCII-artu.Po vlastním (znovu)objevení způsobu 'programování' ve vi(m) teprve nalezl jméno člověka s původním nápadem i ty soubory z roku 2001: stránky Linuse Akessona.

Autorem originálního vyděšeného výrazu se slovy 'co je tohle za šílenost, to nemůže nikdo vyluštit!' je Jirka Benc. Autorem výroku, který na téma této úlohy pobavil všechny orgy, je MP, který v těle odpovědi s heslem napsal: ' Tfujtajbl, "binarni" kod v perlu je proti tomuhle hadr ...'.

Re: Po drátě 4: Řešení úlohy č. 11 Pavel Machek (20. 11. 2009 - 10:37) Sbalit(1)
Tak nevim, me se po nejake dobe hrani proste objevilo slovo "ZELEZNICE" v ascii-artu (ktery se v zapeti zacalo rozjizdet, ale na pomaly masine -- zaurus v metru-- se to stihlo), tak jsem ho proste poslal. Bohuzel jsem se tim pripravil o animaci vlacku...

...jo, pravdepodobne jsem na jednom z tech radku pridal/ubral pet znaku, protoze ty obrazky pismen neodpovidali ty tabulce nahore.