Reverse Engineering a mobilfejlesztésben: mi ez, eszközök és elemzési módszerek

Szerző: IT Sectr Megjelenés: 2026-04-04 Olvasási idő: 10 perc

Reverse Engineering (visszafejtés) — a mobilalkalmazás logikájának és szerkezetének helyreállítása a forráskódhoz való hozzáférés nélkül. Az Android és iOS kontextusában ez a DEX/APK és Mach-O/IPA bináris fájlok dekompilálását jelenti az algoritmusok, titkosítási kulcsok, API-végpontok és üzleti logika kinyeréséhez. A Veracode Security Research (2025) szerint a top-200-ban lévő mobilalkalmazások több mint 60%-a tartalmaz legalább egy olyan indikátort, amely megkönnyíti a reverse engineeringet. Reverse Engineering nemcsak támadásokra, hanem biztonsági auditra, szabadalmi elemzésre és penetrációs tesztelésre is alkalmazzák.

Főbb pontok

  • Reverse Engineering — az alkalmazás bináris kódjának elemzési folyamata a logika, adatok és algoritmusok helyreállítására a forrásokhoz való hozzáférés nélkül
  • Statikus elemzés magában foglalja a DEX/APK dekompilálását jadx-szel, az iOS bájtkódot Ghidrával és az erőforrások olvasását apktool-lal
  • Dinamikus elemzés Frida, Objection és Xposed segítségével történik a hívások futásidőben történő elfogására az alkalmazás leállítása nélkül
  • Védelem a visszafejtés ellen obfuszkáción (ProGuard, DexGuard), stringek titkosításán, RASP-ügynökökön és az APK integritásának ellenőrzésén alapul
  • Jogi státusz a reverse engineering változó: a DMCA megengedi a kompatibilitás és biztonság érdekében, de tiltja a licencek és a DRM megkerülését

Mi az a Reverse Engineering?

Reverse Engineering (reversing) — a szoftverelemzés tudományága, amely az alkalmazás jellemzőinek, logikájának és szerkezetének helyreállítására irányul a bináris megjelenítésből. Mobilalkalmazások esetén az elemzés tárgyai APK-fájlok (Android) és IPA-fájlok (iOS), amelyek fordított kódot, erőforrásokat, manifesteket és tanúsítványokat tartalmaznak. A reversing eredménye — algoritmusok, protokollok, titkosítási kulcsok, API-sémák és üzleti logika kinyerése.

A visszafejtés céljai legitim és illegitim csoportokra oszlanak. Legitim: kártevők elemzése védelmi eszközök létrehozásához, saját alkalmazások auditálása sérülékenységekre, kompatibilitás biztosítása zárt protokollokkal, szabadalmi elemzés és oktatás. Illegitim: szellemi tulajdon ellopása, licenckorlátozások megkerülése, kalózmásolatok készítése és az alkalmazás módosítása a felhasználói adatok ellopására. A Google Play Protect (2025) szerint a banki alkalmazások káros módosításainak 78%-a az eredeti, reverse engineeringen átesett APK alapján készül.

A reversing módszertana két fő irányt foglal magában: statikus elemzés (az alkalmazás elindítása nélkül) és dinamikus elemzés (végrehajtás közben). Minden megközelítés más információszintet ad. Statikus — teljes képet a kódról, de a végrehajtási adatok nélkül. Dinamikus — valós viselkedést, adatáramlást, hálózati hívásokat, de csak egy adott végrehajtási forgatókönyv keretein belül. A professzionális reversing mindig mindkét megközelítést kombinálja.

Statikus elemzési eszközök

A statikus elemzés a visszafejtés első szakasza. Az eredeti APK-t vagy IPA-t kicsomagolják, és minden komponenst külön elemeznek. Fő célok: DEX bájtkód, erőforrások, manifest, natív könyvtárak (.so, .dylib) és metaadatok.

jadx — DEX-dekompilátor Java-ba

jadx — a fő eszköz Android-alkalmazások statikus elemzéséhez. A DEX bájtkódot minimális veszteséggel olvasható Java kóddá alakítja. A jadx támogatja: a multidex dekompilálását, a lambdák és a beépített Kotlin-osztályok felismerését, exportálást Gradle-projektbe. Obfuszkált kód (ProGuard) esetén a jadx a, b, c nevekkel mutatja a kódot, de az osztályszerkezet és a hívások sorrendje megmarad. Független tesztek szerint a jadx a kód 85–92%-át helyesen dekompilálja még obfuszkációval is.

apktool — erőforrások kicsomagolása

Az apktool APK-t smali kódba (DEX assembler) dekódolja, és az erőforrásokat olvasható formában állítja helyre: az AndroidManifest.xml AXML-ből olvasható XML-be, a layoutok — XML-jelölésbe, a strings.xml — egyszerű szöveggé alakul. Az apktool lehetővé teszi az erőforrások módosítását és az APK újrafordítását. Az apktool-lal történő kicsomagolás és az erőforrások cseréje után az alkalmazás módosított tartalommal telepíthető.

Ghidra — natív könyvtárak elemzése

Ghidra (NSA) — reverse engineering keretrendszer, nélkülözhetetlen az Android .so és iOS .dylib könyvtárainak elemzéséhez. A Ghidra ARM64 kódot dezassemblál, C pszeudokódot állít helyre, és hívási gráfot épít. Mobil reversinghez a Ghidrát a kriptográfia és DRM-mechanizmusok natív implementációinak elemzésére használják. Ghidra támogatja a Python és Java szkriptírást az elemzés automatizálásához.

bash
# APK kicsomagolása és dekompilálása
$ jadx -d output_dir app.apk

# Erőforrások kicsomagolása apktool-lal
$ apktool d app.apk -o app_unpacked

# Natív könyvtár elemzése Ghidrával
$ ghidra app.apk/lib/arm64-v8a/libnative.so

# String konstansok keresése DEX-ben
$ strings classes.dex | grep -i api_key

Dinamikus elemzési eszközök

A dinamikus elemzés futó alkalmazáson történik. Az elemző csatlakozik a folyamathoz, és valós időben elfogja a függvényhívásokat, argumentumokat és visszatérési értékeket.

Frida — univerzális instrumentációs eszköz

Frida — a vezető eszköz mobilalkalmazások dinamikus elemzéséhez. A Frida JavaScript-motort injektál az alkalmazás folyamatába (Android ART vagy iOS app), és lehetővé teszi mind a Java/Objective-C, mind a C/C++ függvények hívásainak elfogását. A Frida segítségével a visszafejtő mérnökök: naplózhatják az AES.decrypt() metódus összes hívását paramétereivel együtt, tetszőleges visszatérési értékre cserélhetik, eltávolíthatják az SSL-pinninget az Universal Android SSL Unpin segítségével, nyomon követhetik a natív hívásokat a Stalker-en keresztül. A Frida az APK/IPA módosítása nélkül működik, ami nélkülözhetetlenné teszi a penetrációs tesztelésben.

Objection — réteg a Frida felett

Az Objection kész parancsokat biztosít tipikus reversing feladatokhoz JavaScript-szkriptek írása nélkül: disable-pinning (SSL pinning kikapcsolása), dump-keychain (iOS), explore (osztályhierarchia bejárása), memory search (stringek keresése a memóriában). Az Objection lehetővé teszi a teljes dinamikus elemzés elvégzését egyetlen kódsor nélkül. iOS-alkalmazások esetén az Objection automatikusan megtalálja és naplózza a NSURLSession, CFNetwork és NSKeyedArchiver hívásait.

Xposed Framework

Xposed — Android keretrendszer, amely az app_process fájl lecserélésével működik a Zygote-ban. A Frida-val ellentétben az Xposed telepítés után nem igényel root hozzáférést. Az Xposed modulok bármely alkalmazásban képesek elfogni metódushívásokat. Reversinghez az Xposed hosszú távú elemzésre alkalmas: a modul telepítésre kerül és folyamatosan működik, naplózva az alkalmazás viselkedését különböző forgatókönyvekben. Az Xposed az Android 8.1-ig támogatott; Android 9+ esetén a SandHook-on alapuló EdXposed használatos.

js
// Frida: a decrypt() metódus elfogása az alkalmazásban
let aesClass = Java.use("javax.crypto.Cipher");

aesClass.doFinal.overload(
    "[B", "int", "int"
).implementation = function(
    input, offset, len
) {
    console("[AES] decrypt called, len=" + len);
    return this.doFinal(input, offset, len);
};

Az Android-alkalmazás visszafejtési folyamata

A reversing szabványos munkafolyamata egymást követő lépésekből áll, amelyek mindegyike meghatározott információszintet biztosít.

1. lépés: Hírszerzési adatok gyűjtése

Az elemző az APK-t metaadat szinten vizsgálja: targetSdk, uses-permission (milyen engedélyeket kér), intent-filter és exported components. Az engedélyek alapján meghatározható, hogy mely API-kat használják (android.permission.CAMERA → kamera, android.permission.RECORD_AUDIO → audio). Az exported activity alapján meghatározhatók a belépési pontok engedélyezés nélkül. Ez a szakasz aapt vagy ApkAnalyzer segítségével történik, és 1–2 percig tart.

2. lépés: DEX dekompilálása

Az APK kicsomagolásra kerül, a classes.dex (vagy multidex) a jadx bemenetére kerül. Kimenet — Java/Kotlin kód csomagokban. Az elemző kulcsfontosságú osztályokat keres: CryptoUtils, ApiClient, AuthManager, DatabaseHelper, és ellenőrzi, hogy milyen algoritmusokat használnak. Ha a kódban AES/CBC/PKCS5Padding stringek találhatók — az alkalmazás titkosítást használ, és meg kell találni a kulcsot. Ebben a szakaszban meghatározásra kerülnek: keményre kódolt kulcsok, API-URL-ek, OAuth-tokenek és titkok. Obfuszkáció nélkül az alkalmazás teljes kódja úgy olvasható, mint egy szokásos Java projekt.

3. lépés: Forgalom elemzése

Az SSL-pinning kikapcsolásához a Frida vagy Objection beállításával az elemző elindítja az alkalmazást, és elfogja a hálózati forgalmat a Burp Suite vagy mitmproxy segítségével. A forgalmi adatok alapján helyreáll az API-séma: milyen végpontok, milyen paraméterek, milyen formátumban. Lehetőség szerint az elemző módosítja a kéréseket, és ellenőrzi a szerver reakcióját helytelen vagy káros adatokra. A szerveroldali validáció hiánya — közvetlen sérülékenység, amely ebben a lépésben derül ki.

4. lépés: Írás a data.json-ba

Az elemzés eredményei strukturált formában rögzítésre kerülnek. Minden talált sérülékeny helyhez megadásra kerül: osztály és metódus, a sérülékenység leírása, kihasználási vektor és javítási javaslat. Ez az adatkészlet továbbításra kerül a fejlesztőcsapatnak, vagy pentest-jelentés összeállításához használják. Automatizált környezetekben (MobSF) a jelentés automatikusan generálódik a statikus és dinamikus elemzés eredményei alapján.

Az iOS-alkalmazások reverse engineeringének jellemzői

Az iOS-alkalmazások reverse engineeringe nehezebb, mint az Androidé, az Apple szigorúbb biztonsági architektúrája és a fájlrendszerhez való közvetlen hozzáférés hiánya miatt a stock eszközökön. Az iOS elemzéséhez jailbreak szükséges.

Mach-O statikus elemzés

Az IPA-archívum Mach-O binárist tartalmaz — az Apple univerzális végrehajtható fájlformátumát. A dekompiláláshoz Hopper Disassembler vagy IDA Pro használatos. Az Android DEX-szel ellentétben, amely minimális veszteséggel Java-ba dekompilálódik, a Mach-O natív ARM64 kódot tartalmaz, amely kisebb pontossággal állítható helyre C pszeudokódban. Hopper 60–70%-os helyreállítással birkózik meg, a többit assembly szinten kell elemezni.

Dinamikus elemzés Frida-val iOS-hez

A Frida iOS-en jailbreak-et és a frida-server telepítését igényli. Csatlakozás után a Frida Objective-C metódusokat fog el az üzenetirányítási API-n keresztül. iOS-alkalmazások esetén tipikus forgatókönyv: a NSURLSession.dataTaskWithRequest metódusok elfogása a HTTP-kérések naplózásához, a NSKeyedUnarchiver elfogása a szerializált adatok elemzéséhez, és a CoreData lekérdezések nyomon követése a frida-trace-en keresztül. A Frida a Dopamine jailbreak megjelenésével vált elérhetővé iOS 15–17-re.

IPA-módosítás

A reversing magában foglalhatja az IPA módosítását, majd az újracsomagolást és telepítést az eszközre. Eszközök: ipatool a kicsomagoláshoz, MachOView a szakaszok megtekintéséhez és optool a kód injektálásához. Módosítás után az IPA-t ldid vagy fastlane sigh segítségével írják alá a jailbreakelt eszközre történő telepítéshez. iOS 16+ esetén a kódaláírás a Secure Enclave szintjén ellenőrzésre kerül, és a módosított IPA nem fog futni nem jailbreakelt eszközön.

js
// Frida: HTTP-kérések elfogása iOS-alkalmazásban
if (ObjC.available) {
    let NSURLSession = ObjC.classes.NSURLSession;
    let dataTaskWithRequest = ObjC.protocol("NSURLSessionDelegate")
        .method("- URLSession:dataTask:didReceiveData:");
    Interceptor.attach(dataTaskWithRequest.implementation, {
        onEnter(args) {
            let data = ObjC.Object(args[3]);
            console("[HTTP Response]", data.toString());
        }
    });
}

Védelmi módszerek a reverse engineering ellen

A visszafejtés elleni védelem a réteges biztonság elvén alapul: egyetlen módszer sem nyújt 100%-os védelmet, de a kombináció gazdaságilag nem kifizetődővé teszi a reversinget.

Kód obfuszkáció

Alapszint — ProGuard Androidhoz, amely az osztály- és metódusneveket egykarakteresre cseréli. Erősítéshez DexGuard használatos, amely overload induction-t (több metódus eltérő aláírással és azonos névvel) és AES-256 string titkosítást ad hozzá. Az obfuszkáció a kódelemzés idejét 5 percről 5–20 órára növeli a szinttől függően. DexGuard továbbá összekuszálja a vezérlési folyamatot, olvashatatlanná téve a kódot a jadx számára.

Konstansok titkosítása

Minden string konstans — URL-ek, kulcsok, tokenek, SQL-lekérdezések — a build fázisban titkosításra kerül, és futásidőben visszafejtődik. Ez véd a DEX-fájl stringjeinek statikus elemzése ellen. Az a támadó, aki futtatja a strings app.apk-t, nem lát egyetlen API-végpontot sem. Még dekompilálás után is az összes string bináris adatnak tűnik. Minden stringhez külön kulcs használható, ami megnehezíti a deobfuszkációt.

RASP és integritás-ellenőrzés

Az alkalmazáson belüli RASP-ügynök érzékeli a Frida-t és a hibakeresést futásidőben. Az APK SHA-256 hash-én keresztüli integritás-ellenőrzés megakadályozza az alkalmazás módosított verziójának elindítását. Ha az APK hash nem egyezik a referenciával (a natív rétegben tárolva) — az alkalmazás leáll. Ez blokkolja az APK módosításán alapuló támadásokat, beleértve a repackaginget.

Szerveroldali védelem

A kritikus üzleti logikát a szerveren kell végrehajtani, nem a kliensen. Még ha a támadó teljesen dekompilálja is az alkalmazást, a szerverkód elérhetetlen marad. Az összes kérés és paraméter szerveroldali validálása megakadályozza a reversing során talált sérülékenységek kihasználását. Szerveroldali tanúsítás Play Integrity API-n vagy App Attesten keresztül igazolja, hogy a kérés hiteles, nem módosított alkalmazástól származik.

Gyakran ismételt kérdések

Legális a mobilalkalmazások reverse engineeringje?

Az USA-ban a reverse engineeringet a DMCA szabályozza — megengedett a kompatibilitás, a biztonsági tesztelés és az archiválási célok érdekében. Tilos a technikai védelmi intézkedések (DRM) megkerülése. Európában az EUCD 6. cikke analóg a DMCA-val. Oroszországban a reverse engineering a jogtulajdonos hozzájárulása nélkül szerzői jog megsértésének minősülhet. Kereskedelmi reversing előtt jogi tanácsadás kötelező.

Megvédhető-e az alkalmazás 100%-ban a reversing ellen?

Nem. Bármely kód, amely a támadó eszközén fut, elemezhető — ez a kliensoldali védelmi modell alapvető korlátja. A védelem célja, hogy a reversinget gazdaságilag ne tegye kifizetődővé: az idő- és erőforrásköltségeknek meg kell haladniuk a megszerzett eredmény értékét. Az obfuszkáció, a RASP és a szerverlogika kombinációja a jelenlegi védelmi szabvány.

Mi az APK repackaging (újracsomagolás)?

A repackaging — az alkalmazás módosítása reverse engineering segítségével, majd az APK újrafordítása. A támadó kicsomagolja az APK-t apktool-lal, káros kódot ad hozzá vagy API-kulcsokat cserél, újrafordítja és saját tanúsítvánnyal írja alá. A repackaging a Kaspersky Threat Report (2025) szerint az Android elleni összes támadás 86%-át teszi ki. Ellenintézkedés: a digitális aláírás ellenőrzése futásidőben.

Hogyan kerüli meg a Frida az SSL-pinninget?

A Frida Universal Android SSL Unpin szkript elfogja a TrustManager.checkServerTrusted és iOS-en a ServerTrustManager hívásait, az implementációt allow-all-ra cserélve. Szintén használatos az X509TrustManager metódusok elfogása az OkHttp-ban és URLConnection-ben. SSL-pinning a Frida-n kész szkripttel 10 másodperc alatt megkerülhető. Ellenállóbb védelem — certificate transparency a szerveroldali tanúsítvány-ellenőrzésen keresztül.

Mely nyelveket a legnehezebb visszafejteni?

A natív C/C++ kód .so/.dylib könyvtárakban jelentősen nehezebben fejthető vissza, mint a Java a DEX-ben. A Swift PGO-val és Osize fordítással zavarosabb binárist ad, mint az Objective-C. Rust futásidő metaadatok és a szabványos Objective-C burkolat nélkül fordítódik natív kódba, ami a legnehezebbé teszi a visszafejtést a modern mobilfejlesztési nyelvek közül.

Összegzés

  • Reverse Engineering — az alkalmazás logikájának helyreállítása bináris kódból statikus elemzés (jadx, Ghidra, Hopper) és dinamikus instrumentáció (Frida, Xposed, Objection) segítségével
  • Android-alkalmazások statikus elemzése a DEX jadx-szel történő dekompilálásával és az erőforrások apktool-lal történő kicsomagolásával kezdődik, akár 90%-ban helyreállított Java kódot adva
  • Dinamikus elemzés Frida segítségével lehetővé teszi a hívások elfogását futásidőben, az SSL-pinning kikapcsolását és az összes argumentum és visszatérési érték naplózását
  • iOS reverse engineering jailbreak-et és ARM64 bináris fájlokkal való munkát igényel Hopper/IDA Pro segítségével, ami jelentősen nehezebb, mint a DEX-elemzés Androidon
  • Védelem a reversing ellen magában foglalja az obfuszkációt (ProGuard/DexGuard), a konstansok titkosítását, a RASP-ügynököt a Frida észlelésére és a szerveroldali tanúsítást Play Integrity API-n keresztül
  • 100%-os védelem a reversing ellen lehetetlen — a cél a támadás költségének a védett adatok értéke fölé emelése
  • APK repackaging — a legtömegesebb támadás a mobilalkalmazások ellen, megelőzhető a digitális aláírás futásidőben történő ellenőrzésével és a szerveroldali integritás-ellenőrzéssel

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is