Einhver kom DOOM í gang inni í PDF-skjali. Það segir sitt

Kettlingur í Doomguy-brynju við hlið fartölvu sem keyrir DOOM inni í PDF-skjali

Í tölvuheiminum gengur gamall brandari: DOOM mun á endanum keyra á öllu. Ekki sem hrós um leikinn, heldur sem áskorun. Skotleikurinn frá 1993 hefur þegar verið látinn keyra á hraðbönkum, prenturum, þungunarprófum, reiknivélum, einum LEGO-kubbi og á snertiröndinni á MacBook.

Í janúar 2025 bætti framhaldsskólanemi einu atriði við listann. Hann kom DOOM í gang inni í PDF-skjali.

DOOM keyrandi inni í PDF-skjali, teiknað með ASCII-stöfum

Í stuttu máli

Framhaldsskólanemi þýddi DOOM yfir í asm.js með Emscripten-útgáfu frá 2020 og keyrði hann inni í PDF-skjali, þar sem eitt eyðublaðssvæði er notað fyrir hverja línu skjásins: 320×200, sex gráir tónar, um 80 millisekúndur á ramma. Engin öryggisveila kom við sögu. Sérhver eiginleiki sem notaður er stendur skjalfestur í PDF-staðlinum og vinnur nákvæmlega eins og til var ætlast. Það er einmitt það áhugaverða — og ástæðan til að verja tíu mínútum, einu sinni, í skjölin sín.

Þetta er frábært verk og mjög góður brandari. Þetta er líka skýrasta sönnunin fyrir því sem þessi vefur endurtekur í sífellu og fólk á fullan rétt á að eiga erfitt með að trúa: PDF er ekki mynd af blaðsíðu. Það er ílát sem getur keyrt kóða.

Hvernig þetta virkar í raun

Verkefnið heitir doompdf og er eftir forritara sem kallar sig ading2210. Aðferðin er áhugaverðari en sjálft glæfrabragðið og skiptist í fjóra hluta.

PDF styður JavaScript. Ekki sem viðbót eða íforrit — það er hluti af sniðinu, með eigin staðalsafni, og vafrar útfæra það í innbyggðum PDF-vélum sínum. Það er til þess að eyðublöð geti sannreynt það sem slegið er inn og gagnvirk skjöl brugðist við smellum. Enginn bætti því við með leiki í huga.

Frumkóði DOOM er opinber — þótt sagan sé nákvæmari en styttingin gefur til kynna. id Software birti kóðann 23. desember 1997, en undir leyfi sem heimilaði einungis notkun í kennslu, og það var kóði Linux-útgáfunnar, ekki DOS-frumgerðarinnar, vegna sérstaks leyfis hljóðsafnsins DMX. Skiptin yfir í GPL komu tæpum tveimur árum síðar, 3. október 1999. Það er seinni dagsetningin sem skiptir máli: hún breytti DOOM úr einhverju sem lesa mátti í eitthvað sem endurbyggja mátti með löglegum hætti. Þess vegna heldur leikurinn áfram að skjóta upp kollinum á ólíklegustu stöðum.

Brúin milli þessara tveggja var vísvitandi úreltur þýðandi. ading2210 notaði Emscripten 1.39.20 — útgáfu frá 2020 — vegna þess að hún býr til asm.js en ekki WebAssembly. Nútíma Emscripten skilar WebAssembly, og PDF hefur enga keyrsluvél fyrir WebAssembly. asm.js er takmörkuð mállýska af venjulegu JavaScript og keyrir því alls staðar þar sem JavaScript keyrir. Að grípa til gömlu verkfæranna var ekki fortíðarþrá heldur eina leiðin inn.

Þá er eftir birtingin, hlutinn sem fær fólk til að hlæja upphátt. PDF hefur engan striga, engan rammaminni, ekkert til að mála punkta á. En það hefur eyðublaðssvæði. Þess vegna er 320×200 myndin teiknuð með ASCII-stöfum — eitt textasvæði fyrir hverja línu skjásins, í sex gráum tónum — og endurnýjuð jafn hratt og textanum verður skrifað upp á nýtt, sem gerir um 80 millisekúndur á ramma. Stýringin fer sömu leið: um svæði og hnappa sem PDF-vélin kann hvort eð er að meðhöndla. Þú spilar DOOM, bókstaflega, inni í útfyllanlegu eyðublaði.

Það keyrir hægt. Það er einlitt. Það er fullkomlega spilanlegt, gefið út undir GPL v2 eins og kóðinn sem það byggir á, og hægt er að prófa það sjálfur í vafra byggðum á Chromium. Útgáfan leyfir meira að segja að setja inn eigin WAD-skrá.

Svo ræsti hann Linux inni í einu

Nokkrum vikum síðar gaf sami forritari út linuxpdf: fullan Linux-kjarna sem ræsist inni í PDF-skjali, með því að þýða RISC-V hermirinn TinyEMU með sama asm.js-bragðinu. Kjarninn er 30 til 60 sekúndur að ræsast — höfundur segir það meira en hundrað sinnum hægara en raunverulegan vélbúnað — og honum er stýrt með sýndarlyklaborði úr PDF-hnöppum.

DOOM í skjali er brandari. Hermdur örgjörvi sem ræsir stýrikerfi inni í skjali er röksemd. Einhvers staðar þarna á milli hættir málið að snúast um DOOM.

Hlutinn sem er ekki fyndinn

Hér er hugsunin sem vert er að staldra við. Ekkert í doompdf er misnotkun á veilu. Engin veila fannst, ekkert var brotið, ekkert öryggisgat kom við sögu. Sérhvert atriði sem notað er er skjalfestur og ásetlaður eiginleiki PDF-staðalsins sem vinnur nákvæmlega eins og hann var hannaður.

Köttur við tölvu — DOOM hefur verið fluttur á nánast öll hugsanleg tæki

Það þýðir að geta sem leyfir PDF-skjali að keyra skotleik frá 1993 er líka til staðar í reikningnum sem þú opnar á morgun. Hún liggur ekki í leyni og er ekki falin — hún er einfaldlega þarna, ónotuð, af því að flest skjöl hafa enga ástæðu til að nota hana.

Þetta er heiðarlega útgáfan af sögunni og hún bítur í báðar áttir. Sama röksemdafærsla og segir „skjal getur keyrt kóða, farðu því varlega“ verður líka að viðurkenna hversu þröngur heimur þess kóða er.

Hvað forskrift í PDF getur og getur ekki

Hér verður umfjöllun um doompdf yfirleitt óljós, svo það borgar sig að vera nákvæmur. Svarið veltur alfarið á því í hverju þú opnaðir skrána — og algengu tilvikin tvö eru mjög ólík.

GetaSkoðari vafrans (Chrome, Edge, Firefox)Adobe Acrobat Reader
Keyra forskrift við opnunJá, nema slökkt sé á því
Lesa og skrifa eyðublaðssvæði
Lesa vafrakökur eða geymslu vafransNeiÁ ekki við
Ná til HTML-síðunnar í kring (DOM)NeiÁ ekki við
Senda netbeiðnirMjög takmarkaðVíðtækara — þar bjuggu rakningarpunktar og NTLM-lekar
Snerta staðbundnar skrárNeiTakmarkað, en mun stærra viðmót
Ræsa utanaðkomandi forrit eða viðhengiNeiAð fenginni staðfestingu — söguleg leið skaðlegra skjala

Lestu töfluna rétta leið. Í vafra keyrir PDF með forskriftum í lítilli og leiðinlegri kassa: engar vafrakökur, engin geymsla, enginn aðgangur að síðunni í kring. Það er einmitt þess vegna sem doompdf er forvitnilegt en ekki atvik, og þess vegna er „DOOM keyrir í PDF“ engin ástæða til að óttast PDF-skjöl.

Áhugaverði dálkurinn er skjáborðslesarinn. Hann hefur allt JavaScript-viðmótið sem staðallinn lýsir, því honum er ætlað að vinna með raunveruleg viðskiptaskjöl. Það er umhverfið þar sem hægt er að láta skjal gera vart við sig um leið og það opnast, haga sér ólíkt eftir lesara, eða bjóðast til að opna eitthvað sem það bar með sér.

Þrennt stendur því óháð forriti, og það er þrennan sem vert er að tileinka sér.

  • PDF getur borið fyrirmæli sem keyra um leið og skjalið opnast, áður en þú hefur lesið nokkuð.
  • PDF getur hagað sér ólíkt eftir því hvaða hugbúnaður opnar það: skráin sem þú sérð er ekki endilega sú sem samstarfsmaður þinn sér.
  • PDF ber meira en það sýnir: viðhengi, falin lög, breytingasögu og lýsigögn sem þú ætlaðir þér aldrei að senda.

Ekkert af þessu gerir PDF-skjöl hættuleg í daglegum skilningi. Þú munt opna tugi þeirra í þessum mánuði og allt fer vel. En það þýðir að hugmyndin sem flest okkar bera með sér — „þetta er bara skjal“ — er röng á þann hátt sem stundum skiptir máli.

Stillingin sem nánast enginn þekkir

Hefðbundna ráðið er „slökktu á JavaScript í PDF-lesaranum þínum“, og það er gott ráð. Eitt og sér er það þó ófullnægjandi — því flestir opna PDF-skjöl ekki lengur í PDF-lesara. Þeir opna þau í vafraflipa, og vafrinn hefur sinn eigin, aðskilda rofa.

Firefox kemur með PDF-forskriftir kveiktar. Stillingin heitir pdfjs.enableScripting í about:config; hún var false til og með Firefox 87 og hefur verið true frá Firefox 88. Almenni rofinn javascript.enabled snertir hana ekki: PDF-skoðarinn er sérstakur heimur með sérstaka stillingu.

Chrome og Edge bjóða alls engan sérstakan rofa fyrir forskriftir í PDF. Forskrift í PDF fellur undir JavaScript-heimild vefsvæðisins sem skráin kom frá; hana má slökkva fyrir hvert svæði í stjórntækjunum við veffangastikuna, eða alls staðar í chrome://settings/content/javascript — talsvert grófara verkfæri.

Adobe Acrobat Reader hefur rofann sem allir eiga við: Kjörstillingar → JavaScript → Virkja JavaScript í Acrobat. Það er hakið sem borgar sig að taka af, því Acrobat er lesarinn með stóra viðmótið og nánast enginn notar vísvitandi forskriftað PDF í venjulegri vinnu.

Í reynd: að slökkva á þessu í Acrobat og láta vafrann í friði er skynsamlegt og hóflegt val. Að halda að maður hafi slökkt alls staðar þegar maður gerði það aðeins í Acrobat er það ekki.

Hvað á að gera við þessar upplýsingar

Hagnýta svarið er lítið og tíu mínútnanna virði.

Slökktu á JavaScript í skjáborðslesaranum. Í Acrobat Reader: Kjörstillingar → JavaScript. Það fjarlægir heilan flokk áhættu og kostar ekkert nema — það verður að viðurkennast — möguleikann á að spila DOOM í eyðublaðssvæði.

Haltu lesaranum uppfærðum. Forskriftir eru ein leið inn. Gallar í kóðanum sem afkóðar letur og myndir eru önnur, og það eru þeir sem uppfærslur laga — sögulega séð er sú leið meira að segja algengari.

Meðhöndlaðu óvænt skjöl sem óvænt. Reikningur frá fyrirtæki sem þú hefur aldrei verslað við á skilið augnabliks umhugsun, á hvaða sniði sem hann berst. Þetta er meira virði en nokkur stilling.

Taktu eftir hvað þrennt á sameiginlegt: ekkert af þessu krefst þess að þú hættir að nota PDF eða tortryggir skjöl almennt. Þetta jafngildir því að læsa útidyrunum — ódýrt, leiðinlegt og skynsamlegt einmitt af því að áhættan er lítil en ekki engin.

Hvers vegna verkefnið á athyglina skilið

Það væri auðvelt að setja doompdf í flokkinn „netforvitni“ og halda áfram. Ég held því fram að það sé gagnlegra en svo, af ástæðu sem kemur öryggisleikhúsi ekkert við.

Skilningur flestra á skráarsniðum byggist alfarið á því til hvers sniðin eru notuð. Skjöl eru til að lesa. Töflureiknar eru fyrir tölur. Myndir eru til að horfa á. Þetta líkan gengur upp nánast alltaf, og einmitt þess vegna er svo erfitt að haggast við það — og þess vegna er skýringunni „PDF getur borið virkt efni“ yfirleitt mætt með kurteislegri efasemd.

Spilanlegur leikur inni í skjali gerir á tíu sekúndum það sem grein á í basli með í þúsund orðum. Hann kemur einhverju áþreifanlegu í stað óhlutbundinnar fullyrðingar.

Og dýpri punkturinn nær langt út fyrir PDF. Snið safna eiginleikum áratugum saman. Hver viðbót var skynsamleg í augum einhvers sem leysti raunverulegt vandamál — sannprófun eyðublaða er sannarlega gagnleg, og skjal sem getur athugað eigin útreikninga sömuleiðis. Niðurstaðan er sú að hversdagslegu hlutirnir sem við skiptumst á daglega geta talsvert meira en nöfn þeirra gefa til kynna. Og geta sem einu sinni er komin í staðal stendur öllum til boða sem lesa þann staðal.

Hvað stendur eftir fyrir hversdaginn

Ekkert af þessu er röksemd gegn PDF. Það er enn besta sniðið til að senda skjal sem lítur eins út alls staðar, í hvaða vél sem er, líka eftir mörg ár. Það er raunverulega erfitt vandamál og PDF leysti það. Eiginleikarnir sem gera doompdf mögulegt eru þeir sömu og gera útfyllanlegt skattframtal mögulegt.

Þetta er röksemd fyrir því að vita hvað maður er með í höndunum. Sami sveigjanleiki og leyfir skjali að bera leik leyfir því líka að bera forskriftir, viðhengi, falin lög og lýsigögn sem þú ætlaðir aldrei að senda. Það er þess virði að skilja þau, og ekkert þeirra er tilefni til skelfingar.

Þetta er líka hluti af ástæðunni fyrir því að PDF Manipulator keyrir alfarið í þinni eigin tölvu. Þegar skrár eru sameinaðar, klofnar eða umbreyttar er betra að hafa sem fæsta aðila — ekki af því að netþjónustur séu illkvittnar, heldur af því að skjal sem aldrei fór úr vélinni þinni er einfaldlega auðveldara að henda reiður á en skjal sem hefur legið á netþjóni einhvers annars.

Vinndu með PDF-skjölin þín algjörlega án nettengingar — PDF Manipulator er ókeypis →

Heimildir

Leave a Comment

Netfang þitt verður ekki birt. Nauðsynlegir reitir eru merktir *

Scroll to Top