Reverse Engineering - Már gyerekkorunkban is...

2020-08-17


Szinte mindenkivel előfordult gyerekkorában, hogy szétszedett valamit, amit nem kellett volna. A nagy érdeklődéssel szétszerelt játékautó, konyhai óra, golyóstoll, rotring ceruza aztán sok fejtörést okozott annak, aki megpróbálta újból összerakni. Ez a kíváncsiskodás tulajdonképpen már majdnem reverse engineeringnek számít. Persze a reverse engineeringnek megvannak a maga szabályai, eszközei is módszertana. De vajon mire használható ez a módszer a gyakorlatban és a fejlesztés során?

Mi a reverse engineering?

A reverse engineering nem csak a programozásban, de minden mérnöki területen létező fogalom. Azt jelenti, hogy valamilyen tárgyat, objektumot, szellemi terméket (tehát akár a szoftvereket is) az eredeti tervek ismerete nélkül elemzünk - többnyire azzal a céllal, hogy az adott dolog másolható legyen. Ez a gyakorlatban általában azt jelenti, hogy elemeire bontjuk a tárgyat, szétszedjük, és így igyekszünk megérteni annak működését. 

A reverse engineering módszerét a katonai hírszerzés és az egymással versengő cégek is használják

A reverse engineering (azaz, a fordított mérnöki tevékenység) régóta bevett gyakorlat, a különböző országok hadseregei is alkalmazzák. Az egyik leghírhedtebb ilyen eset a II. világháború idején történt. A szovjeteknek hasonló, tömegpusztító fegyverek szállítására képes repülőgépre volt szükségük, mint az amerikai B-29-es “repülő erőd”. A szovjet mérnököknek azonban sok időt hagytak a tervezésre, így nem lett volna lehetőségük egy ekkora gépet gondosan összeállítani és megfelelően tesztelni. Végül a B-29-es gép terveinek ellopása mellett döntöttek. Néhány tervrajz, gépről készült fotó, roncsdarabok, visszaemlékezések alapján végül viszonylag hatékonyan tudtak következtetni arra, hogyan kell a repülőt felépíteni.

Reverse engineering a programozásban

A fejlesztésben ez a munkamódszer először a ‘90-es évek végén kapott óriási hangsúlyt. Az úgynevezett Y2K válság idején hirtelen megnőtt az igény a visszafejtés iránt. A Y2K válságnak azt az időszakot nevezzük, amikor a 2000-es év eljövetele miatt számítástechnikai katasztrófát jósoltak.

A programozásban a dátumot NN/HH/ÉÉ vagy hasonló, az évet, hónapot, napot két számjeggyel jelző módon szokták leírni. 2000-ben az évet jelölő mind a két szám 0 lett volna. Sokáig úgy vélték, ez súlyos problémát okozhat. Ekkoriban sokan próbáltak régi programokat visszafejteni, hogy megbizonyosodjanak róla, hogy a szoftver a “duplanullás” évben is működik. Ekkor derült ki az is: az informatikusok többsége nem tapasztalt a reverse engineering területén - így ez nagyobb hangsúlyt kapott a képzésekben.

A reverse engineering módszerét tehát nagy vonalakban két dologra használják:

  • valaminek a dokumentáció nélküli rekonstruálására

  • hibák felfedezésére, javítására.


Mikor van szükség reverse engineeringre a számítástechnikában?

A reverse engineering módszere több esetben is hasznos lehet:

  • Régi vagy ismeretlen programok rekonstruálására is alkalmas. Nagyobb, régebbi vállalkozásoknál könnyen előfordulhat például, hogy a szoftver forráskódjának egy része vagy egésze nem elérhető. Ilyenkor a működő részek elemzésével visszanyerhetők az adatok.

  • Használható meglévő szoftverek hibáinak keresésére is. Ez egyfajta “fordított” vizsgálat, sok esetben az ellenőrzés és tesztelés része is lehet.

  • Rosszindulatú szoftverek hatástalanításában is segíthet a reverse engineering. Így megismerhető a működési mechanizmusa és kiépíthető az ellene való védelem.


A reverse engineering segítségével a legacy státuszba került, már nem támogatott programok forráskódja is visszafejthető

A reverse engineeringhez többféle szoftver és megoldás is létezik. Mivel a visszafejtés során a forráskód nem, vagy csak korlátozottan áll rendelkezésre, ezek a programok a gépi kódból, illetve a object code használatával igyekeznek megismerni a szoftver működését.

A módszer a kártevők felszámolására annyira hatékony, hogy az amerikai Nemzetbiztonsági Hivatal, az NSA a közelmúltban ingyen hozzáférhetővé tette a Ghidrát, a saját reverse engineering toolkitjét. A lépés célja kettős volt: hatékonyabb eszközt szerettek volna a fejlesztők kezébe adni a drága, piaci szoftver készletek helyett, másfelől viszont úgy gondolták, hasznos, ha a szakemberek rendszeresen használják a Ghidrát, még az előtt, hogy elhelyezkednek valamelyik állami biztonsági szervnél.

Lehet veszélyes is?

Azon túl, hogy a reverse engineering egy hasznos eszköz, ha a biztonságról vagy az adatok és mechanizmusok megértéséről van szó, ugyanígy veszélyes eszköz lehet. A visszakódolás az ipari kémkedés egyik elterjedt formája is.

Számos gyártó megtiltja a felhasználói szerződésben a reverse engineering-t Ennek ellenére viszonylag kevés olyan szoftver van, ahol aktív bináris védelemmel, vagy más, a fejlesztés utolsó fázisaként alkalmazható módszerrel védekeznek a szoftver visszafejtése ellen. 

A szoftver visszafejthetősége nem csak azért problémás, mert le lehet másolni a program működését. A kódból gyakran személyes adatok, jelszavak, speciális beállítások is kinyerhetők, akár kritikus céges titkok is. Ehhez azonban fontos hozzátenni, hogy ez sok esetben a cégek hibája, mivel semmilyen "titkos"-nak vélt információt nem lenne szabad, elhelyezni olyan alkalmazásokban, amit kiadnak vagy publikus használatra szánnak. (Hiszen az alkalmazásban lévő adatok mindig kinyerhetőek lesznek)

Erre több módszer is létezik: például a program logikájának ilyen formában érzékeny részét átmozgathatják a szerver oldalra, és elérhetővé tehetik az alkalmazás számára egy restful API segítségével. Épp ezért fontos már a tervezésnél átgondolni, hogy milyen információkat építenek be a szoftver architektúrába.

A reverse engineering az ipari kémkedés egyik eszköze is lehet. Fontos a kódokat a megfelelő védelemmel ellátni.

Miben tudunk segíteni?

Reverse engineering szolgáltatásunk keretében mi elsősorban olyan szoftverek vizsgálatát végezzük, amelyek esetében a fejlesztők már nem elérhetők. Itthon gyakran fordul elő, hogy a cégek régebbi, már nem támogatott, úgynevezett legacy verziókat használnak bizonyos termékekből - gazdasági vagy munkaszervezési okok miatt viszont nem tudnak vagy akarnak frissíteni.  Ilyenkor a reverse engineering segítségével nagyobb eséllyel találjuk meg a kritikus hibák okait és tudjuk javítani azokat. 

Vannak olyan esetek is - jellemzően egyedileg fejlesztett megoldások esetében - amikor a program mérete elég kicsi ahhoz, hogy gyakorlatilag teljesen vissza tudjuk fejteni. Ilyenkor olyan kódot tudunk készíteni, amelyik, ha nem is egyezik tökéletesen az eredeti forráskóddal, viszonylag jól helyettesíti azt. 

A reverse engineering az egyes szoftverek kockázatos részeit, a hátsó ajtókat, biztonsági réseket is hatékonyan deríti fel. A módszerrel a meglévő programokat is ellenőrizni lehet, így kideríthető, fennáll-e például az adatvesztés vagy szivárogtatás kockázata.

Elérhetetlen fejlesztő, ismeretlen program, gyanús szoftver? Megkeressük a megoldást!