Mobil Geliştirmede Reverse Engineering: Nedir, Araçlar ve Analiz Yöntemleri

Yazar: IT Sectr Yayınlanma: 2026-04-04 Okuma süresi: 10 dk

Reverse Engineering (tersine mühendislik), kaynak koduna erişmeden bir mobil uygulamanın mantığını ve yapısını geri kazanmaktır. Android ve iOS bağlamında bu, algoritmaları, şifreleme anahtarlarını, API uç noktalarını ve iş mantığını çıkarmak için DEX/APK ve Mach-O/IPA ikili dosyalarını tersine derlemek anlamına gelir. Veracode Security Research (2025)'e göre, ilk 200'deki mobil uygulamaların %60'ından fazlası, tersine mühendisliği basitleştiren en az bir gösterge içeriyor. Reverse Engineering yalnızca saldırılar için değil, aynı zamanda güvenlik denetimi, patent analizi ve sızma testleri için de kullanılır.

Ana Noktalar

  • Reverse Engineering, kaynak koduna erişmeden bir uygulamanın ikili kodunu analiz ederek mantığını, verilerini ve algoritmalarını geri kazanma sürecidir
  • Statik analiz, jadx ile DEX/APK tersine derleme, Ghidra ile iOS bayt kodu ve apktool ile kaynak okumayı içerir
  • Dinamik analiz, uygulamayı durdurmadan çalışma zamanında çağrıları yakalamak için Frida, Objection ve Xposed aracılığıyla gerçekleştirilir
  • Tersine mühendislikten korunma, karartma (ProGuard, DexGuard), dizi şifreleme, RASP ajanları ve APK bütünlük kontrollerine dayanır
  • Yasal durum tersine mühendislik için değişir: DMCA birlikte çalışabilirlik ve güvenlik için izin verir, ancak lisansları ve DRM'yi atlatmayı yasaklar

Reverse Engineering Nedir?

Reverse Engineering (tersine mühendislik), bir uygulamanın ikili temsilinden özelliklerini, mantığını ve yapısını geri kazanmayı amaçlayan bir yazılım analizi disiplinidir. Mobil uygulamalar için analiz nesneleri, derlenmiş kod, kaynaklar, bildirimler ve sertifikalar içeren APK dosyaları (Android) ve IPA dosyalarıdır (iOS). Tersine mühendisliğin sonucu, algoritmaların, protokollerin, şifreleme anahtarlarının, API şemalarının ve iş mantığının çıkarılmasıdır.

Tersine mühendisliğin hedefleri meşru ve gayrimeşru olarak ikiye ayrılır. Meşru: güvenlik araçları oluşturmak için kötü amaçlı yazılım analizi, güvenlik açıkları için kendi uygulamalarını denetleme, kapalı protokollerle uyumluluğu sağlama, patent analizi ve eğitim. Gayrimeşru: fikri mülkiyet hırsızlığı, lisans kısıtlamalarını atlatma, korsan kopyalar oluşturma ve kullanıcı verilerini çalmak için uygulamaları değiştirme. Google Play Protect (2025)'e göre, bankacılık uygulamalarının kötü amaçlı değişikliklerinin %78'i, tersine mühendislik yoluyla işlenmiş orijinal APK temel alınarak oluşturulur.

Tersine mühendislik metodolojisi iki ana yön içerir: statik analiz (uygulamayı çalıştırmadan) ve dinamik analiz (yürütme sırasında). Her yaklaşım farklı bir bilgi düzeyi sağlar. Statik analiz, kodun tam bir resmini verir, ancak çalışma zamanı verileri olmadan. Dinamik analiz, gerçek davranışı, veri akışını ve ağ çağrılarını ortaya çıkarır, ancak yalnızca belirli bir yürütme senaryosu içinde. Profesyonel tersine mühendislik her zaman her iki yaklaşımı da birleştirir.

Statik Analiz Araçları

Statik analiz, tersine mühendisliğin ilk aşamasıdır. Orijinal APK veya IPA paketten çıkarılır ve her bileşen ayrı ayrı analiz edilir. Ana hedefler: DEX bayt kodu, kaynaklar, bildirim, yerel kütüphaneler (.so, .dylib) ve meta veriler.

jadx — DEX'ten Java'ya tersine derleyici

jadx, Android uygulamalarının statik analizi için ana araçtır. DEX bayt kodunu minimum kayıpla okunabilir Java koduna dönüştürür. jadx şunları destekler: çoklu dex tersine derleme, lambda ve satır içi Kotlin sınıflarını tanıma ve Gradle projesine aktarma. Karartılmış kod (ProGuard) için jadx, a, b, c adlarıyla kod gösterir, ancak sınıf yapısı ve çağrı sırası korunur. Bağımsız testlere göre jadx, karartma olsa bile kodun %85–92'sini doğru şekilde tersine derler.

apktool — kaynak çıkarma

apktool, APK'yı smali koduna (DEX assembler) dönüştürür ve kaynakları okunabilir biçimde geri yükler: AndroidManifest.xml, AXML'den okunabilir XML'e dönüştürülür, düzenler XML işaretlemesine, strings.xml düz metne dönüşür. apktool, kaynakları değiştirmeye ve APK'yı yeniden oluşturmaya izin verir. apktool ile paketten çıkarma ve kaynakları değiştirmeden sonra, uygulama değiştirilmiş içerikle yüklenebilir.

Ghidra — yerel kütüphane analizi

Ghidra (NSA), Android'de .so kütüphanelerini ve iOS'te .dylib'i analiz etmek için gerekli bir tersine mühendislik framework'udur. Ghidra, ARM64 kodunu tersine çevirir, C sözde kodunu yeniden oluşturur ve çağrı grafikleri oluşturur. Mobil tersine mühendislik için Ghidra, şifreleme ve DRM mekanizmalarının yerel uygulamalarını analiz etmek için kullanılır. Ghidra, analizi otomatikleştirmek için Python ve Java'da komut dosyası oluşturmayı destekler.

bash
# APK paketten çıkarma ve tersine derleme
$ jadx -d output_dir app.apk

# apktool ile kaynak paketten çıkarma
$ apktool d app.apk -o app_unpacked

# Ghidra ile yerel kütüphane analizi
$ ghidra app.apk/lib/arm64-v8a/libnative.so

# DEX'te dizi sabitlerini arama
$ strings classes.dex | grep -i api_key

Dinamik Analiz Araçları

Dinamik analiz, çalışan bir uygulama üzerinde gerçekleştirilir. Analizör, sürece bağlanır ve gerçek zamanlı olarak işlev çağrılarını, argümanları ve dönüş değerlerini yakalar.

Frida — evrensel enstrümantasyon aracı

Frida, mobil uygulamaların dinamik analizi için önde gelen araçtır. Frida, uygulama sürecine (Android ART veya iOS uygulaması) bir JavaScript motoru enjekte eder ve hem Java/Objective-C hem de C/C++ işlev çağrılarını yakalamaya izin verir. Frida ile tersine mühendisler şunları yapabilir: parametrelerle AES.decrypt() yönteminin tüm çağrılarını günlükleme, dönüş değerlerini keyfi olarak değiştirme, Universal Android SSL Unpin aracılığıyla SSL-pinning'i devre dışı bırakma ve Stalker aracılığıyla yerel çağrıları izleme. Frida, APK/IPA'yı değiştirmeden çalışır ve bu da onu sızma testleri için vazgeçilmez kılar.

Objection — Frida sarmalayıcısı

Objection, JavaScript komut dosyaları yazmadan yaygın tersine mühendislik görevleri için hazır komutlar sağlar: disable-pinning (SSL pinning'i devre dışı bırakma), dump-keychain (iOS), explore (sınıf hiyerarşisinde gezinme), memory search (bellekte dizi arama). Objection, tek bir kod satırı olmadan tam dinamik analiz gerçekleştirmeye izin verir. iOS uygulamaları için Objection, NSURLSession, CFNetwork ve NSKeyedArchiver çağrılarını otomatik olarak bulur ve günlükler.

Xposed Framework

Xposed, Zygote'taki app_process dosyasını değiştirerek çalışan bir Android framework'udur. Frida'nın aksine, Xposed kurulumdan sonra kök erişimi gerektirmez. Xposed modülleri, herhangi bir uygulamadaki yöntem çağrılarını yakalayabilir. Tersine mühendislik için Xposed, uzun vadeli analiz için uygundur: modül kurulur ve sürekli çalışarak uygulamanın farklı senaryolardaki davranışını günlükler. Xposed, Android 8.1'e kadar destekler; Android 9+ için SandHook tabanlı EdXposed kullanılır.

js
// Frida: bir uygulamada decrypt() yöntemini yakalama
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);
};

Bir Android Uygulamasının Tersine Mühendislik Süreci

Standart tersine mühendislik iş akışı, her biri belirli bir düzeyde bilgi sağlayan sıralı adımlardan oluşur.

Adım 1: Bilgi Toplama

Analist, APK'yı meta veri düzeyinde inceler: targetSdk, uses-permission (hangi izinlerin istendiği), intent-filter ve dışa aktarılan bileşenler. İzinler, hangi API'lerin kullanıldığını ortaya çıkarabilir (android.permission.CAMERA → kamera, android.permission.RECORD_AUDIO → ses). Dışa aktarılan etkinlikler, kimlik doğrulama olmadan giriş noktalarını belirler. Bu aşama aapt veya ApkAnalyzer aracılığıyla gerçekleştirilir ve 1–2 dakika sürer.

Adım 2: DEX Tersine Derleme

APK paketten çıkarılır ve classes.dex (veya çoklu dex) jadx'e girilir. Çıktı, paketler halinde düzenlenmiş Java/Kotlin kodudur. Analist, anahtar sınıfları arar: CryptoUtils, ApiClient, AuthManager, DatabaseHelper ve hangi algoritmaların kullanıldığını kontrol eder. Kod AES/CBC/PKCS5Padding gibi dizeler içeriyorsa, uygulama şifreleme kullanıyor demektir ve anahtar bulunmalıdır. Bu aşamada, sabit kodlanmış anahtarlar, API URL'leri, OAuth belirteçleri ve sırlar belirlenir. Karartma olmadan, tüm uygulama kodu normal bir Java projesi gibi okunur.

Adım 3: Trafik Analizi

SSL-pinning'i devre dışı bırakmak için Frida veya Objection kurulduktan sonra analist, uygulamayı başlatır ve Burp Suite veya mitmproxy aracılığıyla ağ trafiğini yakalar. Trafik verileri API şemasını ortaya çıkarır: hangi uç noktalar, hangi parametreler ve hangi biçimde. Mümkünse, analist istekleri değiştirir ve hatalı veya kötü amaçlı verilere sunucunun yanıtını kontrol eder. Sunucu tarafı doğrulamasının olmaması, bu adımda keşfedilen doğrudan bir güvenlik açığıdır.

Adım 4: data.json'a Kaydetme

Analiz sonuçları yapılandırılmış bir biçimde kaydedilir. Bulunan her güvenlik açığı noktası için şunlar belirtilir: sınıf ve yöntem, güvenlik açığı açıklaması, istismar vektörü ve düzeltme önerisi. Bu veri kümesi geliştirme ekibine iletilir veya bir sızma testi raporu hazırlamak için kullanılır. Otomatik ortamlarda (MobSF), rapor statik ve dinamik analiz sonuçlarına dayalı olarak otomatik olarak oluşturulur.

iOS Uygulamalarında Tersine Mühendisliğin Özellikleri

iOS uygulamalarının tersine mühendisliği, Apple'ın daha sıkı güvenlik mimarisi ve standart cihazlarda dosya sistemine doğrudan erişim eksikliği nedeniyle Android'den daha zordur. iOS analizi için jailbreak gereklidir.

Mach-O Statik Analizi

IPA arşivi, Apple'ın evrensel çalıştırılabilir dosya biçimi olan bir Mach-O ikili dosyası içerir. Tersine derleme için Hopper Disassembler veya IDA Pro kullanılır. Minimum kayıpla Java'ya tersine derlenen Android DEX'in aksine, Mach-O, daha düşük doğrulukla C sözde koduna yeniden oluşturulan yerel ARM64 kodu içerir. Hopper %60–70 yeniden oluşturma elde eder; geri kalanı derleme düzeyinde analiz edilmelidir.

iOS için Frida ile Dinamik Analiz

iOS'te Frida, jailbreak ve frida-server kurulumu gerektirir. Bağlantıdan sonra Frida, API mesaj yönlendirme yoluyla Objective-C yöntemlerini yakalar. iOS uygulamaları için tipik bir senaryo şunları içerir: HTTP isteklerini günlüklemek için NSURLSession.dataTaskWithRequest'i yakalama, serileştirilmiş verileri analiz etmek için NSKeyedUnarchiver'ı yakalama ve frida-trace aracılığıyla CoreData sorgularını izleme. Frida, Dopamine jailbreak'inin yayınlanmasıyla iOS 15–17 için kullanılabilir hale geldi.

IPA Değişikliği

Tersine mühendislik, IPA'nın değiştirilmesini ve ardından yeniden paketlenmesini ve cihaza yüklenmesini içerebilir. Araçlar şunları içerir: paketten çıkarmak için ipatool, bölümleri görüntülemek için MachOView ve kod enjeksiyonu için optool. Değişiklikten sonra IPA, jailbreak yapılmış bir cihazda kurulum için ldid veya fastlane sigh aracılığıyla imzalanır. iOS 16+ için kod imzası Secure Enclave düzeyinde doğrulanır ve değiştirilmiş bir IPA, jailbreak yapılmamış bir cihazda çalışmaz.

js
// Frida: bir iOS uygulamasında HTTP isteklerini yakalama
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());
        }
    });
}

Tersine Mühendislikten Korunma Yöntemleri

Tersine mühendislikten korunma, katmanlı güvenlik ilkesini izler: hiçbir tek yöntem %100 koruma sağlamaz, ancak bir kombinasyon tersine mühendisliği ekonomik olarak uygulanamaz hale getirir.

Kod Karartma

Temel düzey, sınıf ve yöntem adlarını tek karakterli adlarla değiştiren Android için ProGuard'dır. Gelişmiş koruma için DexGuard, aşırı yükleme tümlemesi (farklı imzalara ve aynı ada sahip birden çok yöntem) ve AES-256 dizi şifrelemesi ekler. Karartma, kod analizi süresini seviyeye bağlı olarak 5 dakikadan 5–20 saate çıkarır. DexGuard ayrıca kontrol akışını karartarak kodu jadx için okunamaz hale getirir.

Sabit Şifreleme

Tüm dizi sabitleri — URL'ler, anahtarlar, belirteçler, SQL sorguları — derleme zamanında şifrelenir ve çalışma zamanında şifresi çözülür. Bu, DEX dosyalarındaki dizelerin statik analizine karşı korur. app.apk'de strings çalıştıran bir saldırgan hiçbir API uç noktasını görmez. Tersine derlemeden sonra bile, tüm dizeler ikili veri olarak görünür. Her dizi ayrı bir anahtar kullanabilir, bu da karartma çözmeyi zorlaştırır.

RASP ve Bütünlük Kontrolleri

Uygulama içindeki bir RASP ajanı, çalışma zamanında Frida'yı ve hata ayıklamayı algılar. APK'nın SHA-256 karması yoluyla bütünlük kontrolleri, uygulamanın değiştirilmiş bir sürümünün çalışmasını engeller. APK karması, referans karmayla (yerel katmanda depolanan) eşleşmezse uygulama sonlanır. Bu, yeniden paketleme dahil APK değişikliğine dayalı saldırıları engeller.

Sunucu Tarafı Koruma

Kritik iş mantığı, istemcide değil sunucuda yürütülmelidir. Bir saldırgan uygulamayı tamamen tersine derlese bile, sunucu kodu erişilemez durumda kalır. Tüm isteklerin ve parametrelerin sunucu tarafı doğrulaması, tersine mühendislik sırasında bulunan güvenlik açıklarının istismar edilmesini önler. Sunucu onayı (Play Integrity API veya App Attest aracılığıyla), isteğin gerçek, değiştirilmemiş bir uygulamadan geldiğini onaylar.

Sıkça Sorulan Sorular

Mobil uygulamaların tersine mühendisliği yasal mı?

ABD'de tersine mühendislik DMCA tarafından düzenlenir — birlikte çalışabilirlik, güvenlik testleri ve arşivleme amaçları için izin verilir. Teknolojik koruma önlemlerini (DRM) atlatmak yasaktır. Avrupa'da EUCD'nin 6. Maddesi DMCA'ya benzer. Rusya'da, telif hakkı sahibinin izni olmadan tersine mühendislik telif hakkı ihlali olarak kabul edilebilir. Ticari tersine mühendislikten önce yasal danışmanlık zorunludur.

Bir uygulama tersine mühendislikten %100 korunabilir mi?

Hayır. Bir saldırganın cihazında yürütülen herhangi bir kod analiz edilebilir — bu, istemci tarafı güvenlik modelinin temel bir sınırlamasıdır. Korumamın amacı, tersine mühendisliği ekonomik olarak çekici kılmamaktır: zaman ve kaynak maliyetleri elde edilen sonucun değerini aşmalıdır. Karartma, RASP ve sunucu tarafı mantığının kombinasyonu mevcut koruma standardıdır.

APK yeniden paketleme (repackaging) nedir?

Yeniden paketleme, tersine mühendislik yoluyla bir uygulamanın değiştirilmesi ve ardından APK'nın yeniden oluşturulmasıdır. Saldırgan, apktool aracılığıyla APK'yı paketten çıkarır, kötü amaçlı kod ekler veya API anahtarlarını değiştirir, yeniden oluşturur ve kendi sertifikasıyla imzalar. Yeniden paketleme, Kaspersky Threat Report (2025)'e göre Android'deki tüm saldırıların %86'sını oluşturur. Karşı önlem: çalışma zamanında dijital imzayı kontrol edin.

Frida SSL-pinning'i nasıl atlar?

Frida betiği Universal Android SSL Unpin, iOS'ta TrustManager.checkServerTrusted ve ServerTrustManager çağrılarını yakalar ve uygulamayı tümüne izin ver ile değiştirir. OkHttp ve URLConnection'daki X509TrustManager yöntemlerinin yakalanması da kullanılır. SSL-pinning, hazır bir betikle Frida ile 10 saniyede atlatılabilir. Daha sağlam bir koruma, sunucu tarafı sertifika doğrulaması yoluyla sertifika şeffaflığıdır.

Hangi dillerin tersine mühendisliği en zordur?

.so/.dylib kütüphanelerindeki yerel C/C++ kodu, DEX'teki Java'dan önemli ölçüde daha zordur. PGO ve Osize derlemesiyle Swift, Objective-C'den daha karartılmış bir ikili dosya üretir. Rust, çalışma zamanı meta verileri olmadan ve standart Objective-C sarmalayıcıları olmadan yerel koda derlenir ve bu da onu modern mobil geliştirme dilleri arasında tersine mühendislik için en zoru yapar.

Özet

  • Reverse Engineering, statik analiz (jadx, Ghidra, Hopper) ve dinamik enstrümantasyon (Frida, Xposed, Objection) yoluyla ikili koddan uygulama mantığını geri kazanır
  • Statik analiz Android uygulamalarının jadx ile DEX tersine derlemesi ve apktool ile kaynak çıkarmasıyla başlar ve Java kodunun %90'ına kadarını geri kazanır
  • Dinamik analiz Frida aracılığıyla çalışma zamanında çağrıları yakalamaya, SSL-pinning'i devre dışı bırakmaya ve tüm yöntem argümanları ve dönüş değerlerini günlüklemeye izin verir
  • iOS'te Reverse Engineering jailbreak ve Hopper/IDA Pro aracılığıyla ARM64 ikili dosyalarıyla çalışmayı gerektirir, bu Android'deki DEX analizinden önemli ölçüde daha karmaşıktır
  • Tersine mühendislikten korunma, karartma (ProGuard/DexGuard), sabit şifreleme, Frida tespiti için RASP ajanı ve Play Integrity API aracılığıyla sunucu onayını içerir
  • Tersine mühendislikten %100 korunma imkansızdır — amaç saldırı maliyetini korunan verilerin değerinden yüksek yapmaktır
  • APK yeniden paketleme mobil uygulamalara yönelik en yaygın saldırıdır ve çalışma zamanında dijital imza kontrolü ve sunucu tarafı bütünlük doğrulamasıyla önlenir

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun