Po Vánocích se na jednom hardwarovém fóru objevil dotaz, jak vlastně Albi tužka funguje. Jeden z prvních odkazů vedl sem, na článek Táty Geeka „Jak funguje Albi tužka“. Text rozebírá, co tužka obsahuje uvnitř, jakým způsobem jsou konstruované kódy a odkaz na německý projekt TipToiReveng, který rozebírá podobný, ale dostatečně jiný systém pera a knih. V české kotlině se nic nevyskytovalo, a nebylo zřejmé, jak hluboké úpravy německého projektu by byly potřeba, kdyby člověk chtěl vyrobit vlastní BNL soubor nebo úplně celou knihu.
Proč?
Přece proto! Jak je u šťourů obvyklé, tohle je dostatečný důvod k vrtání se v něčem zajímavém. Ačkoli v navazujících debatách bylo zřejmé, že německá a česká tužka používá jiné soubory, a tudíž nelze jejich nástroje přímo využít, naivně jsem usoudil, že bude třeba pár drobných úprav a bude to. Stephen King by teď napsal něco takového jako „a to bylo naposledy, kdy ho někdo spatřil živého“. Naštěstí, i když to nešlo zcela hladce, až tak daleko to nezašlo.
Hacking a cracking
Rozbít cizí formát, bývá různě složité a někdy prakticky nemožné. Stačí, aby někde byla použita asymetrická šifra a už se bez crackování vlastního firmware tužky nelze dostat dále. Proto před tím, než jsem se do něčeho pustil, jsem provedl důkladný průzkum terénu.
Existují ještě jiné BNL soubory?
Stáhl jsem si několik souborů BNL od Albi, ze kterých bylo na první pohled zřejmé, že neodpovídají německému TipToi. Proto jsem použil silné google-fu, abych pohledal jiné BNL soubory v cizině. A už tady jsem narazil. Systémů pro tyto pera je vícero, prakticky všechny jsou vyrobeny v Číně a Albi u nás dává dohromady český obsah – není to původní výrobek. V cizině je souborových formátů pro tato pera více. Například zmiňovaný německý GME, nalezl jsem AOG, pro německé pero Ting je ještě jiný formát apod.
Existuje nějaká jiná verze formátu BNL, například zde, zde, zde nebo zde. Ta se nám ale nehodí.
Albi vydává knihy na 7 trzích: CZ, SK, PL, RO, HU, SI a HR. Co se týče kompatibilních ne-Albi BNL souborů, našel jsem soubory ke stažení jen tady.
Firmware Albi tužky
Dál jsem si řekl, že se podívám na firmware. Z českých stránek zmizelo, na slovenských je, ale temné a špinavé hlubiny uloz.to vydaly dvě různé verze pro obě verze hardware, jak pro čipy Sonix SNP70032, tak pro SN95300FG. Další pak vytáhl Táta Geek z Archive.org.
Z popisu čipů plyne, že používají nějaké vlastní 16bitové DSP jádro zvané S9KE, pro které jsem nenalezl žádné nástroje – kromě tohoto experimentálního. Bohužel, zatím jsem nebyl úspěšný ve zjištění, co přesně firmware dělá – ačkoli je zřejmé, jak se natahuje do paměti a odkud startuje, vlastní chip obsahuje i 64KW ROM s kódem na obsluhu periferií. Sice existuje dokumentace, které funkce ROM obsahuje, i jaké jsou parametry, nejsou k dispozici hlavičkové soubory, které by dokázaly „spojit“ jednotlivé adresy ROM se jmény těch funkcí. Z analýzy je zřejmé, že jsou i mnohé nedokumentované runtime funkce pro vlastní běh programu. Takže jsem sice byl schopen rozluštit nějaké názvy uložených písní, rozřezat většinu firmware na mp3 soubory, ale nikam dál jsem nepokročil. Další podrobnosti jsou v dokumentaci firmware. Tento popis přikládám jako samostatný dokument pro zvídavé.
Když to nešlo přes firmware v tužce, pustil jsem se do analýzy samotných souborů. Ze začátku jsem zkoumal jen stažené soubory, později jsem přidal i zkoušení upravených BNL souborů ve vypůjčené tužce.
Zjištění z analýzy BNL souborů
Tato zjištění zde budu publikovat postupně. Na základě analýzy jsem vytvořil popis formátu a napsal jednoduchý skript, který umí rozkrájet BNL soubor na prvočinitele. Ten jsem potřeboval vyzkoušet. Stáhl jsem tedy všechny BNL soubory a prohnal je tímto skriptem. V současné době se už mému popisu nevzpírají žádné soubory BNL, i když řada hodnot má neznámý význam a nedá se vyloučit, že systém toho zvládá více, než Albi používá.
Generátor BNL souborů
Na základě výstupu „disassembleru“ jsem napsal jednoduchý generátor. Ten ze vstupních souborů seskládá zpět BNL soubor, který lze nahrát do tužky.
Generátor OID kódů a jejich tisk
Při pokusu o tisk OID kódů pomocí nástrojů od TipToiReveng jsem zjistil dvě mrzutosti. Kontrolní součet v deváté tečce neodpovídá německému systému TipToi, ale systému Ting (horní bit je invertovaný). A pak jsem při „měření“ výtisků a scanů zjistil, že Albi kódy jsou větší. Německý kód má 1 mm včetně mezer, český 1,35 mm.
Generátor jsem upravil, ale s tiskem jsou potíže. Rozhodně to moje inkoustovka nedává vůbec, i když papírově má rozlišení podstatně vyšší, než požadovaných 1200dpi. Body jsou chlupaté a každý jinak velký.
Ani laserovka v místním copycentru ty tečky nevytiskla vůbec. Obsluha bohužel neovládala pokročilá nastavení, takže ani více pokusů nedokázalo body vytisknout. Tím myslím, že se jednalo o zásah ovladače, který úplně tečky vypustil z tisku. Nevylučuji tím možnost, že je někde v ovladači nastavení, přes které by tisk prošel. Bylo ale ověřeno na černobílé laserovce Samsung M2070, že generátor kódů funguje a tužka výtisky přečte.
Závěr a nedořešené otázky
Závěr je tedy mírně optimistický. Soubory lze rozkrájet, lze je zpátky složit, zvukové soubory jde nahradit a měla by jít tisknout vlastní kniha.
Nějaké nedořešené body ještě zbývají:
- Německý systém, ač starší, vypadá, že obsahuje nějakou inteligenci. Je systém použitý v české tužce hloupý nebo Albi jen nevyužívá všechny jeho schopnosti, z důvodů obchodních či licenčních? Nebo mají firmware, který nic chytřejšího neumí (ale mohl by)?
- Soubory s firmware mám k dispozici – obsahují stejné copyrighty firmy Chomptech, jako německé tužky. Většina firmware jsou jen MP3 soubory, většina z nich jsou neznámé čínské zvuky (neznámé pro mě, ale kdybyste měli čínské kamarády…), zbytek české systémové zvuky. Jak jsem psal výše, analýza kódu selhává na nedostupnosti informací o kódu v ROM – ten potřebuji, abych ověřil, že funkčnost, kterou používá Albi ve svých knihách, je jediná možná.
- Ve firmware jsou české zvuky pro kalkulačku – jak se tato funkčnost z pera vyloudí?
- Také jsou tam odkazy na souborové přípony TN2 a BMD. Ví někdo, co to je?
- MP3 soubory jsou zašifrované, sice jsem to obešel, ale opravdu by mě zajímalo, jak je konstruován dekodér těch MP3 souborů, který jsem nahradil 512 bajtovou dešifrovací tabulkou. Když jsem se pokusil zaměnit šifrovací klíče při generování souborů, zjistil jsem, že to nelze. Po sérií pokusů bylo zjištěno, že musí platit jediná podmínka – bajt ze 4. bajtu hlavičky a bajt ze 0x140. bajtu hlavičky musí dát součet 0xF5. Nemám nejmenší ponětí proč. Tím pádem lze vygenerovat zcela nezašifrovaný soubor. Při dalších pokusech se ukázalo, že to není úplně pravda – v nezašifrovaném souboru funguje vše, kromě kvízů – na jejich rozpohybování je třeba aspoň jeden bit zašifrovat.
Související články
- Jak funguje Albi tužka
- Jak fungují BNL soubory pro Albi tužku (právě čtete)
- Základy zpětného inženýrství
- Hacking a cracking BNL souborů pro Albi tužku – 1. část
- Hacking a cracking BNL souborů pro Albi tužku – 2. část
- Jak vytvořit vlastní knížku pro Albi tužku