Reversing Native Libraries
Reading time: 6 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Kwa maelezo zaidi angalia: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Programu za Android zinaweza kutumia maktaba za asili, ambazo kwa kawaida zimeandikwa kwa C au C++, kwa kazi zinazohitaji utendaji wa juu. Waumbaji wa programu za hasara pia wanatumia vibaya maktaba hizi kwa sababu vitu vya ELF vinavyoshirikiwa bado ni vigumu zaidi kutafsiri kuliko nambari ya byte ya DEX/OAT. Ukurasa huu unalenga kwenye mifumo ya kazi ya vitendo na mboresho ya zana za hivi karibuni (2023-2025) ambazo zinafanya kurudi nyuma kwa faili za Android .so
kuwa rahisi.
Mchakato wa haraka wa triage kwa libfoo.so
iliyovutwa hivi karibuni
- Toa maktaba
# Kutoka kwa programu iliyosakinishwa
adb shell "run-as <pkg> cat lib/arm64-v8a/libfoo.so" > libfoo.so
# Au kutoka kwa APK (zip)
unzip -j target.apk "lib/*/libfoo.so" -d extracted_libs/
- Tambua usanifu & ulinzi
file libfoo.so # arm64 au arm32 / x86
readelf -h libfoo.so # OS ABI, PIE, NX, RELRO, nk.
checksec --file libfoo.so # (peda/pwntools)
- Orodhesha alama zilizotolewa & viunganishi vya JNI
readelf -s libfoo.so | grep ' Java_' # JNI iliyo na kiungo cha dinamik
strings libfoo.so | grep -i "RegisterNatives" -n # JNI iliyoandikishwa kwa statiki
- Pakia kwenye decompiler (Ghidra ≥ 11.0, IDA Pro, Binary Ninja, Hopper au Cutter/Rizin) na uendeshe uchambuzi wa kiotomatiki. Toleo jipya la Ghidra limeleta decompiler ya AArch64 inayotambua PAC/BTI stubs na MTE tags, ikiboresha sana uchambuzi wa maktaba zilizojengwa na Android 14 NDK.
- Amua kati ya kurudi nyuma kwa statiki na dinamik: nambari iliyondolewa, iliyofichwa mara nyingi inahitaji kufanya kazi (Frida, ptrace/gdbserver, LLDB).
Ufunguo wa Dinamik (Frida ≥ 16)
Mfululizo wa 16 wa Frida ulileta maboresho kadhaa maalum kwa Android ambayo yanasaidia wakati lengo linatumia uboreshaji wa kisasa wa Clang/LLD:
thumb-relocator
sasa inaweza kuunganisha kazi ndogo za ARM/Thumb zinazozalishwa na usawa mkali wa LLD (--icf=all
).- Kuorodhesha na kuunganisha vitu vya uagizaji vya ELF inafanya kazi kwenye Android, ikiruhusu urekebishaji wa
dlopen()
/dlsym()
kwa kila moduli wakati viunganishi vya ndani vinakataliwa. - Kuunganisha Java kuliwekwa sawa kwa ART quick-entrypoint mpya inayotumika wakati programu zinapojengwa na
--enable-optimizations
kwenye Android 14.
Mfano: kuorodhesha kazi zote zilizorekebishwa kupitia RegisterNatives
na kutupa anwani zao wakati wa wakati wa kukimbia:
Java.perform(function () {
var Runtime = Java.use('java.lang.Runtime');
var register = Module.findExportByName(null, 'RegisterNatives');
Interceptor.attach(register, {
onEnter(args) {
var envPtr = args[0];
var clazz = Java.cast(args[1], Java.use('java.lang.Class'));
var methods = args[2];
var count = args[3].toInt32();
console.log('[+] RegisterNatives on ' + clazz.getName() + ' -> ' + count + ' methods');
// iterate & dump (JNI nativeMethod struct: name, sig, fnPtr)
}
});
});
Frida itafanya kazi moja kwa moja kwenye vifaa vya PAC/BTI (Pixel 8/Android 14+) mradi utumie frida-server 16.2 au baadaye – toleo la awali lilishindwa kupata padding kwa ajili ya hooks za ndani. citeturn5search2turn5search0
Uthibitisho wa hivi karibuni unaofaa kutafutwa katika APKs
Mwaka | CVE | Maktaba iliyoathirika | Maelezo |
---|---|---|---|
2023 | CVE-2023-4863 | libwebp ≤ 1.3.1 | Overflow ya buffer ya heap inayoweza kufikiwa kutoka kwa msimbo wa asili unaodecode picha za WebP. Programu kadhaa za Android zinakusanya toleo zenye udhaifu. Unapokutana na libwebp.so ndani ya APK, angalia toleo lake na jaribu kutumia au kurekebisha. |
2024 | Mbalimbali | Mfululizo wa OpenSSL 3.x | Masuala kadhaa ya usalama wa kumbukumbu na padding-oracle. Mifuko mingi ya Flutter & ReactNative inasafirisha libcrypto.so zao wenyewe. |
Unapokutana na faili za .so za upande wa tatu ndani ya APK, kila wakati thibitisha hash zao dhidi ya taarifa za juu. SCA (Software Composition Analysis) sio ya kawaida kwenye simu, hivyo toleo za zamani zenye udhaifu ni nyingi.
Mwelekeo wa Kupinga Kurejea & Kuimarisha (Android 13-15)
- Uthibitisho wa Pointer (PAC) & Utambulisho wa Lengo la Tawi (BTI): Android 14 inaruhusu PAC/BTI katika maktaba za mfumo kwenye silicon inayounga mkono ARMv8.3+. Decompilers sasa zinaonyesha pseudo-maagizo yanayohusiana na PAC; kwa uchambuzi wa dynamic Frida inaingiza trampolines baada ya kuondoa PAC, lakini trampolines zako za kawaida zinapaswa kuita
pacda
/autibsp
inapohitajika. - MTE & Scudo allocator iliyoimarishwa: utagu wa kumbukumbu ni wa hiari lakini programu nyingi zinazojua Play-Integrity zinajengwa na
-fsanitize=memtag
; tumiasetprop arm64.memtag.dump 1
pamoja naadb shell am start ...
ili kukamata makosa ya tag. - LLVM Obfuscator (predicates zisizo wazi, kupunguza mtiririko wa udhibiti): pakers za kibiashara (mfano, Bangcle, SecNeo) zinaendelea kulinda msimbo wa asili, sio tu Java; tarajia mtiririko wa udhibiti wa uwongo na blobs za nyuzi zilizofichwa katika
.rodata
.
Rasilimali
- Kujifunza ARM Assembly: Azeria Labs – Misingi ya ARM Assembly
- Dokumentesheni ya JNI & NDK: Oracle JNI Spec · Vidokezo vya Android JNI · Miongozo ya NDK
- Kukarabati Maktaba za Asili: Debug Android Native Libraries Using JEB Decompiler
Marejeleo
- Frida 16.x change-log (Android hooking, tiny-function relocation) – frida.re/news citeturn5search0
- NVD advisory kwa
libwebp
overflow CVE-2023-4863 – nvd.nist.gov citeturn2search0
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.