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 (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 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.
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!