» »

Kako je Microsoft zakrpal program brez izvorne kode

Kako je Microsoft zakrpal program brez izvorne kode

Slo-Tech - 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.

16 komentarjev

konspirator ::

To je precej neobičajen postopek, predvsem ker ga je težko dobro izvesti.

Težko samo če si na ravni 85 letnika, ki je včeraj s tresočo roko prvič prižgal bigbang pc.
Inline patching je stara zadeva - tudi če je v igri kakšen armadillo/asprotect/execryptor itd.
Kako misliš da crackerji "popravljajo" trialware programe ?

Desna slika je iz IDA orodja https://www.hex-rays.com/products/ida/ .
--

Zgodovina sprememb…

RC37 ::

V starih časih si odprl hex editor (ali pa odprl exe v notepadu) in spremenil kodo. Zdaj pa to delajo z IDAjem. Torej najbolj zapletene opcije so se ognli.

kixs ::

Kje so casi, ko smo se kaksen program cracknili ;) Obicajno si moral samo poiskati funkcijo preverjanja in jo negirati ali jo enostavno celo preskociti. Napisati kratek patch v kaksnem Pascalu (ja, dolgo je ze tega).

Seveda pa se taksno patchiranje ne more primerjati s popravki izvorne kode, ki je na potenco lazja in hitrejsa.

MrStein ::

Pravi hekerji so popravljali binarno kodo medtem ko se je izvajala... ;)
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

jype ::

Odgovor na vprašanje iz naslova teme je: Dobro.

LeQuack ::

MrStein je izjavil:

Pravi hekerji so popravljali binarno kodo medtem ko se je izvajala... ;)


Pravi hekerji so spajkali povezave na procesorju medtem ko je tekel.
Quack !

MrStein ::

Tisto je že hardverski problem...
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Dilbert ::

Visual assembler mogoče?:D

Qcube ::

Zakaj bi iskali izvorno kodo in porabili po možnosti več ur iskanja po arhivih če en izkušen programer lahko popravi napako v petih minutah direkt v binariju z istim rezultatom?

rokp ::

GpPatch FTW!

tony1 ::

No, takole so navdušenci mnogo let tega na več koncih popravljali Ultimo IX, ker se EAju ni dalo :-)

Utk ::

Morda sploh ni problem v izgubljeni kodi, ampak v celem okolju, ki se jim ga ni dalo postavljat na 15 let nazaj.

RC37 ::

Visual assembler mogoče?:D

Žal ne obstaja "Visual Assembly" (vsaj dokler M$ ne izumi tega kot zamenjavo za Visual Basic).

Ribič ::

S moje strani: Softice, W32DASM, Hiew, procdump, dUP2, pa še kup ostalih, ki se jih ne spomnem več.
Vse ribe so mi pobegnile!

Invictus ::

RC37 je izjavil:

Visual assembler mogoče?:D

Žal ne obstaja "Visual Assembly" (vsaj dokler M$ ne izumi tega kot zamenjavo za Visual Basic).

V bistvu obstaja.

MASM, ki ga integriraš v Visual Studio.
"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

oxyuranus ::

He he, najbolj zanimiv del te novice je novica sama. Zgleda, da je high level mentaliteta ze tako "zasrala" development, da postane science fiction nekaj kar je precej trivialno delo, ce seveda ves kaj delas. A ce dam avtorju na voljo nekaj programov, ki sem jih sam popatchal (ker mi pac nacin delovanja ni ustrezal), bo potem o meni tudi napisal clanek? ;(( A da ne? Kaj pa ce prilozim se kaksen androidov binary, a to je pa potem vredu? ;((
Those who do not understand UNIX are condemned to reinvent it, poorly.
(hint: linux)

Zgodovina sprememb…

  • spremenilo: oxyuranus ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Font: matematični simboli

Oddelek: Pomoč in nasveti
314043 (3741) Mavrik
»

M$ Word - matematične enačbe

Oddelek: Programska oprema
92098 (1994) whatever
»

Word - napis nad in pod puščico

Oddelek: Programska oprema
111419 (1336) Han
»

Pisanje formul v Officu?

Oddelek: Programska oprema
83500 (3403) migič
»

Latex

Oddelek: Programska oprema
82213 (1998) dr.J

Več podobnih tem