Árpád
-2 °C
4 °C

Részből az egészet

2002.04.19. 09:28
Kész rendszerek kódjának elemzésével, megtalálhatók a bennük található rejtett hibák, rossz szándékú programrészek. Visszafejtésükkel olyan információkhoz lehet jutni, melyekkel velük kompatíbilis rendszereket lehet létrehozni, vagy éppen meg lehet tanulni egyféle technikai megközelítését egy adott problémának.
A biztonságtechnikai híradásokban egyre gyakrabban jelennek meg olyan hírek, melyek arról tudósítanak bennünket, hogy XY biztonsági szakértő ilyen és ilyen program elemzése során megállapította, hogy az - szemben a fejlesztő cég állításával - ezt és ezt teszi.

A visszafejtés kérdése egyrészt technikai, másrészt jogi természetű. Háromrészes cikkünkben az ezzel kapcsolatos kérdéseket szeretnénk vizsgálatunk tárgyává tenni.

A kódvisszafejtés nehézségei

A jelenlegi számítógépek bináris kódsorozatok feldolgozására alkalmasak. Ezek a kódsorozatok azt a folyamatot írják le, melyet az adott eszköz egyes elemeinek kell elvégezni. A problémák megfogalmazása azonban sokkal magasabb absztrakciós szinteket követel meg az informatikai eszközöktől. Ezek megvalósítására találták ki a programnyelveket, illetve ennél is magasabb szinteken a különféle tervezési eszközöket, ábrázolási módokat. Ezek olyan köztes leírási módok, melyek egyrészről olvashatóak ember által, másrészt lefordíthatóak a gép számára is.

Az egyes programnyelvekben készült kódrészek a fordítás során rengeteg apró elemi utasításra bomlanak fel. Az így elkészült kódból nem lehet egyértelműen visszakövetkeztetni az eredeti utasítássorra. Olyan ez, mintha egy ételreceptet elemi mozdulatokra fordítanánk le. A csipetnyi só hozzáadását például a következőkre fordítanánk le: fordítsuk el az alkarunkat 30 fokkal, engedjük lejjebb 111 mm-el a kezünket, zárjuk össze a mutató és a hüvelyk újunkat, emeljük fel a kezünket, 111 cm-el, fordítsuk el az alkarunkat 40 fokkal, nyissuk szét a hüvelyk és a mutató újunkat.

Egy ilyen gépi szintű programból csak a teljes kód, és az egyéb jellemzők, adatok figyelembevételével (hol a só, meddig van az edényben a só, stb.) lehet az eredeti szándékot visszakövetni.

A helyzet valójában még ennél is bonyolultabb, hiszen a fordítóprogramok optimalizálást is végeznek, azaz bizonyos kódrészeket összevonnak, szétbontanak, vagy átstrukturálnak a gyorsabb végrehajtás, a kisebb helyfoglalás vagy egyéb célok érdekében. Az előbbi analógiával élve a mondjuk a főzelék és a leves megsózását például egy műveletté vonja össze a fordító. Mivel a számítógép a programkódot és az adatokat egyaránt a memóriában tárolja, a visszafejtést megnehezítendő sok esetben létre lehet hozni olyan kódot is, melyben kódrészek adatnak, adatok kódnak látszanak, és csak a végrehajtás során derül ki igazi rendeltetésük. Ezt a technikát előszeretettel alkalmazzák a vírusírók.

Az interneten barangolva sok helyről letölthetnénk olyan programokat, amelyek képesek lefordított programokból valamilyen nyelvű forráskódot előállítani (decompiller). Ezek természetesen nem az eredeti forrásszöveget hozzák újra létre, hiszen látható, hogy a visszafejtés az esetek többségében eleve nem adhatja vissza az eredeti kódot.

A cikk következő részében a kódvisszafejtés és a technikai fejlődés kapcsolatáról lesz szó.

Köszönjük, hogy minket olvasol minden nap!

Ha szeretnél még sokáig sok ilyen, vagy még jobb cikket olvasni az Indexen, ha szeretnéd, ha még lenne független, nagy elérésű sajtó Magyarországon, amit vidéken és a határon túl is olvasnak, akkor támogasd az Indexet!

Tudj meg többet az Index támogatói kampányáról!

Milyen rendszerességgel szeretnél támogatni minket?

Mekkora összeget tudsz erre szánni?

Mekkora összeget tudsz erre szánni?