További Infó cikkek
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ó.