Kako je Microsoft zakrpal program brez izvorne kode
Matej Huš
18. nov 2017 ob 20:19:09
Stari Equation Editor je eden najstarejših kosov programske opreme na večini računalnikov, ki poganjajo Microsoftov Office. Pregled datoteke EQNEDT32.EXE razkrije, da jo je Microsoft ustvaril leta 2000 in nazadnje popravil leta 2003. Program, ki ga je pred Microsoftovim prevzemom razvijal Design Science v letih 1990-2000, je kasneje zamenjalo povsem novo orodje za stavljenje enačb, a stari Equation Editor je ostal, da lahko odpiramo stare dokumente. In kot kaže, je Equation Editor tako zelo star, da je Microsoft založil (ali pa nima pravic, da bi popravljal) izvorno kodo.
V zadnjem paketu popravkov za Microsoftovo programsko opremo je tudi nova verzija Equation Editorja, ki pa jo je Microsoft popravil neposredno z urejanjem prevedene izvršljive (binary) datoteke, ugotavlja Mitja Kolšek iz 0patch Teama. To je precej neobičajen postopek, predvsem ker ga je težko dobro izvesti. Običajni način popravljanja programske opreme je ugotoviti, kje se skriva ranljivost, ustrezna sprememba izvorne kode in izdelava izvršljivih datotek, ki jih dobijo uporabniki. Pri tem postopku se izvršljive datoteke malenkostno spremenijo tudi v delih, kjer je izvorna koda ostala enaka, kar je posledica delovanja prevajalnikov.
V Equation Editorju pa Microsoft tega ni storil. Namesto tega je v izvršljivi datoteki poiskal ranljivo mesto (šlo je za prekoračitev medpomnilnika pri nalaganju pisav), spremenil ustrezne bite in v odmerjen prostor stlačil preverjanje dolžine imena pisave. Povsod drugod je koda ostala do bita enaka, kar se pri prevajanju ne bi zgodilo. Prevajalnik bi uporabil kakšen drug register, spremenljivke bi bile drugod v pomnilniku itd. Zanimivo je vprašanje, zakaj je Microsoft to storil.
Analiza pokaže, da so delo izvedli odlično, a edini možni odgovor je, da niso imeli dostopa do izvorne kode. Bodisi jo je Microsoft založil bodisi nima pravic, da jo popravlja. Mimogrede, Design Science, ki je prvotni avtor Equation Editorja, še obstaja in posluje.