Реверсе Енгинееринг (повратни инжењеринг) — обнављање логике и структуре мобилне апликације без приступа изворном коду. У контексту Андроид и иОС-а, то подразумева декомпилацију DEX/APK и Мацх-О/ИПА бинарних датотека ради издвајања алгоритама, кључева за шифровање, АПИ крајњих тачака и пословне логике. Према Верацоде Сецурити Ресеарцх (2025), више од 60% мобилних апликација у топ-200 садржи бар један индикатор који олакшава реверсе енгинееринг. Реверсе Енгинееринг се примењује не само за нападе, већ и за ревизију безбедности, патентну анализу и тестирање продора.
Главно
Реверсе Енгинееринг (реверсинг) — дисциплина анализе софтвера усмерена на обнављање карактеристика, логике и структуре апликације из њеног бинарног приказа. За мобилне апликације, објекти анализе су АПК датотеке (Андроид) и ИПА датотеке (иОС), које садрже компајлирани код, ресурсе, манифесте и сертификате. Резултат реверсинга — издвајање алгоритама, протокола, кључева за шифровање, АПИ шема и пословне логике.
Циљеви повратног инжењеринга деле се на легитимне и нелегитимне. Легитимни: анализа злонамерног софтвера за стварање средстава заштите, ревизија сопствених апликација на рањивости, обезбеђивање компатибилности са затвореним протоколима, патентна анализа и обука. Нелегитимни: крађа интелектуалне својине, заобилажење лиценцних ограничења, стварање пиратских копија и модификација апликације за крађу података корисника. Према Google Play Protect (2025), 78% злонамерних модификација банкарских апликација настаје на основу оригиналног АПК-а пропуштеног кроз реверсе енгинееринг.
Методологија реверсинга укључује два главна правца: статичку анализу (без покретања апликације) и динамичку анализу (током извршавања). Сваки приступ даје различити ниво информација. Статичка — потпуну слику кода, али без података о извршавању. Динамичка — стварно понашање, ток података, мрежне позиве, али само у оквиру конкретног сценарија извршавања. Професионални реверсинг увек комбинује оба приступа.
Статичка анализа — прва фаза повратног инжењеринга. Оригинални АПК или ИПА се распакује, а свака компонента се анализира одвојено. Главни циљеви: DEX бајткод, ресурси, манифест, изворне библиотеке (.so, .dylib) и метаподаци.
jadx — главни алат за статичку анализу Андроид апликација. Он претвара DEX бајткод у читљив Java код са минималним губицима. jadx подржава: декомпилацију мултидек-а, препознавање ламбди и уграђених Котлин класа, извоз у Градле пројекат. За офусцирани код (ProGuard), jadx приказује код са именима а, б, ц, али структура класа и редослед позива се чувају. Према независним тестирањима, jadx исправно декомпилира 85–92% кода чак и са офускацијом.
apktool декодира АПК у смaли код (DEX асемблер) и обнавља ресурсе у читљивом облику: АндроидМанифест.кмл се претвара из АXМЛ-а у читљив XМЛ, лејаути — у XМЛ ознаке, стрингс.кмл — у обичан текст. apktool омогућава модификацију ресурса и поновно састављање АПК-а. Након распакивања путем apktool-а и замене ресурса, апликација се може инсталирати са измењеним садржајем.
Ghidra (NSA) — оквир за реверсе енгинееринг, незаменљив за анализу .so библиотека Андроида и .dylib иОС-а. Ghidra дезасемблира АРМ64 код, обнавља псеудокод C и гради граф позива. За мобилни реверсинг, Ghidra се користи за анализу изворних имплементација криптографије и ДРМ механизама. Ghidra подржава скриптовање на Пајтону и Јави за аутоматизацију анализе.
# Распакивање и декомпилација АПК-а
$ jadx -d output_dir app.apk
# Распакивање ресурса путем apktool-а
$ apktool d app.apk -o app_unpacked
# Анализа изворне библиотеке путем Ghidra-е
$ ghidra app.apk/lib/arm64-v8a/libnative.so
# Претрага стринг константи у DEX-у
$ strings classes.dex | grep -i api_key
Динамичка анализа се изводи на покренутој апликацији. Анализатор се повезује са процесом и пресреће позиве функција, аргументе и повратне вредности у реалном времену.
Frida — водећи алат за динамичку анализу мобилних апликација. Frida убацује JavaScript мотор у процес апликације (Андроид АРТ или иОС апп) и омогућава пресретање позива како Java/Objective-C, тако и C/C++ функција. Помоћу Frida-е, реверс инжењери могу: логовати све позиве методе AES.decrypt() са параметрима, заменити повратну вредност произвољном, уклонити ССЛ-пиннинг путем Universal Android SSL Unpin, трасирати изворне позиве путем Сталкер-а. Frida ради без модификације АПК/ИПА, што је чини незаменљивом за тестирање продора.
Objection пружа готове команде за типичне задатке реверсинга без писања JavaScript скрипти: disable-pinning (искључивање SSL пиннинга), dump-keychain (иОС), explore (преглед хијерархије класа), memory search (претрага стрингова у меморији). Objection омогућава извођење потпуне динамичке анализе без иједне линије кода. За иОС апликације, Objection аутоматски проналази и логује позиве NSURLSession, CFNetwork и NSKeyedArchiver.
Xposed — оквир за Андроид који ради заменом датотеке app_process у Зиготе-у. За разлику од Frida-е, Xposed не захтева роот приступ након инсталације. Xposed модули могу пресретати позиве метода у било којој апликацији. За реверсинг, Xposed је погодан за дугорочну анализу: модул се инсталира и ради стално, логујући понашање апликације у различитим сценаријима. Xposed подржава Андроид до верзије 8.1; за Андроид 9+ користи се EdXposed заснован на SandHook-у.
// Frida: пресретање методе decrypt() у апликацији
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);
};
Стандардни ток рада реверсинга састоји се од узастопних корака, од којих сваки даје одређени ниво информација.
Анализатор проучава АПК на нивоу метаподатака: targetSdk, uses-permission (које дозволе тражи), intent-filter и exported components. По дозволама се може одредити које АПИ се користе (android.permission.CAMERA → камера, android.permission.RECORD_AUDIO → аудио). По exported activity одређују се улазне тачке без ауторизације. Ова фаза се изводи путем aapt или ApkAnalyzer-а и траје 1–2 минута.
АПК се распакује, classes.dex (или multidex) се прослеђује на улаз jadx-а. На излазу — Java/Котлин код у пакетима. Анализатор тражи кључне класе: CryptoUtils, ApiClient, AuthManager, DatabaseHelper, и проверава који алгоритми се користе. Ако се у коду појављују стрингови AES/CBC/PKCS5Padding — апликација користи шифровање и потребно је пронаћи кључ. У овој фази се одређују: хардкодовани кључеви, АПИ УРЛ-ови, OAuth токени и тајне. Без офускације цео код апликације се чита као обичан Java пројекат.
Подешавањем Frida-е или Objection-а за искључивање ССЛ-пиннинга, анализатор покреће апликацију и пресреће мрежни саобраћај путем Burp Suite или mitmproxy. На основу података саобраћаја обнавља се АПИ шема: које крајње тачке, који параметри, у ком формату. По могућности, анализатор мења захтеве и проверава реакцију сервера на некоректне или злонамерне податке. Одсуство серверске валидације — директна рањивост откривена у овом кораку.
Резултати анализе се бележе у структурираном облику. За свако пронађено рањиво место наводе се: класа и метод, опис рањивости, вектор експлоатације и препорука за исправку. Овај скуп података се прослеђује развојном тиму или се користи за састављање пентест извештаја. У аутоматизованим окружењима (MobSF), извештај се генерише аутоматски на основу статичке и динамичке анализе.
Реверсе енгинееринг иОС апликација је тежи од Андроид због строжије безбедносне архитектуре Apple-а и недостатка директног приступа датотечном систему на стандардним уређајима. За анализу иОС-а потребан је jailbreak.
ИПА архива садржи Мацх-О бинарну датотеку — универзални формат извршних датотека Apple-а. За декомпилацију се користи Hopper Disassembler или ИДА Про. За разлику од Андроид DEX-а, који се декомпилира у Java са минималним губицима, Мацх-О садржи изворни АРМ64 код који се обнавља у псеудокод C са мањом прецизношћу. Hopper се носи са 60–70% обнављања, остало се мора анализирати на нивоу асемблера.
Frida на иОС-у захтева jailbreak и инсталацију фрида-сервер-а. Након повезивања, Frida пресреће Objective-C методе путем АПИ-ја за рутирање порука. За иОС апликације типичан сценарио: пресретање метода NSURLSession.dataTaskWithRequest за логовање ХТТП захтева, пресретање NSKeyedUnarchiver за анализу серијализованих података и трасирање ЦореДата упита путем frida-trace. Frida је постала доступна за иОС 15–17 изласком jailbreak-а Dopamine.
Реверсинг може укључивати модификацију ИПА-а са накнадним препакивањем и инсталацијом на уређај. Алати: ipatool за распакивање, MachOView за преглед секција и optool за убацивање кода. Након модификације, ИПА се потписује путем ldid или fastlane sigh за инсталацију на jailbreakованом уређају. За иОС 16+, потпис кода се проверава на нивоу Secure Enclave, а модификовани ИПА се неће покренути на non-jailbreakованом уређају.
// Frida: пресретање HTTP захтева у иОС апликацији
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());
}
});
}
Заштита од повратног инжењеринга заснива се на принципу слојевите безбедности: ниједан метод не пружа 100% заштите, али комбинација чини реверсинг економски неисплативим.
Основни ниво — ProGuard за Андроид, који замењује имена класа и метода једнословним. За појачање се користи DexGuard, који додаје overload induction (више метода са различитим потписима и истим именом) и шифровање стрингова AES-256. Офускација повећава време анализе кода са 5 минута на 5–20 сати у зависности од нивоа. DexGuard додатно замршава ток управљања, чинећи код нечитљивим за jadx.
Све стринг константе — УРЛ-ови, кључеви, токени, SQL упити — шифрују се у фази компајлирања и дешифрују у runtime-у. Ово штити од статичке анализе стрингова DEX датотеке. Нападач који покрене strings app.apk неће видети ниједну АПИ крајњу тачку. Чак и након декомпилације, сви стрингови изгледају као бинарни подаци. За сваки стринг се може користити посебан кључ, што отежава деофускацију.
RASP агент унутар апликације открива Frida-у и отклањање грешака у runtime-у. Контрола интегритета путем SHA-256 хеша АПК-а спречава покретање модификоване верзије апликације. Ако се хеш АПК-а не поклапа са референтним (сачуваним у изворном слоју) — апликација се зауставља. Ово блокира нападе засноване на модификацији АПК-а, укључујући репацкагинг.
Критична пословна логика треба да се извршава на серверу, а не на клијенту. Чак и ако нападач потпуно декомпилира апликацију, серверски код остаје недоступан. Серверска валидација свих захтева и параметара спречава експлоатацију рањивости пронађених током реверсинга. Серверска атестација путем Play Integrity API или App Attest потврђује да захтев долази од аутентичне, немодификоване апликације.
Често постављана питања
У САД, реверсе енгинееринг регулише ДМЦА — дозвољен за обезбеђивање компатибилности, тестирање безбедности и архивске сврхе. Забрањено је заобилажење технолошких мера заштите (ДРМ). У Европи, члан 6 ЕУЦД-а је аналоган ДМЦА. У Русији, реверсе енгинееринг без сагласности носиоца ауторских права може се тумачити као кршење ауторских права. Правни савет је обавезан пре комерцијалног реверсинга.
Не. Било који код који се извршава на уређају нападача може бити анализиран — ово је принципијелно ограничење модела заштите на клијентској страни. Циљ заштите је да реверсинг учини економски неисплативим: трошкови времена и ресурса треба да премаше вредност добијеног резултата. Комбинација офускације, RASP-а и серверске логике — тренутни стандард заштите.
Репацкагинг — модификација апликације путем реверсе енгинееринга са накнадним поновним састављањем АПК-а. Нападач распакује АПК путем apktool-а, додаје злонамерни код или замењује АПИ кључеве, поново саставља и потписује својим сертификатом. Репацкагинг чини 86% свих напада на Андроид, према Касперски Тхреат Репорт (2025). Контра-мера: провера дигиталног потписа у runtime-у.
Frida скрипта Universal Android SSL Unpin пресреће позиве TrustManager.checkServerTrusted и ServerTrustManager на иОС-у, замењујући имплементацију на аллов-алл. Такође се користи пресретање метода X509TrustManager у OkHttp и URLConnection. ССЛ-пиннинг на Frida-и се заобилази за 10 секунди готовом скриптом. Отпорнија заштита — цертификате транспаренци кроз серверску проверу сертификата.
Изворни C/C++ код у .so/.dylib библиотекама значајно је тежи за реверсинг од Jаве у DEX-у. Swift са ПГО и компајлирањем Osize даје збуњујућу бинарну датотеку од Objective-C. Rust се компајлира у изворни код без runtime метаподатака и без стандардног Objective-C повезивања, што га чини најтежим за реверсинг од савремених језика мобилног развоја.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође