Reversão de Bibliotecas Nativas
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Para mais informações, consulte: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Aplicativos Android podem usar bibliotecas nativas, tipicamente escritas em C ou C++, para tarefas críticas de desempenho. Criadores de malware também abusam dessas bibliotecas porque objetos compartilhados ELF ainda são mais difíceis de descompilar do que byte-code DEX/OAT. Esta página foca em fluxos de trabalho práticos e melhorias de ferramentas recentes (2023-2025) que facilitam a reversão de arquivos .so
do Android.
Fluxo de trabalho rápido de triagem para um libfoo.so
recém-extraído
- Extraia a biblioteca
# De um aplicativo instalado
adb shell "run-as <pkg> cat lib/arm64-v8a/libfoo.so" > libfoo.so
# Ou do APK (zip)
unzip -j target.apk "lib/*/libfoo.so" -d extracted_libs/
- Identifique a arquitetura e proteções
file libfoo.so # arm64 ou arm32 / x86
readelf -h libfoo.so # OS ABI, PIE, NX, RELRO, etc.
checksec --file libfoo.so # (peda/pwntools)
- Liste símbolos exportados e ligações JNI
readelf -s libfoo.so | grep ' Java_' # JNI dinâmico
strings libfoo.so | grep -i "RegisterNatives" -n # JNI registrado estaticamente
- Carregue em um descompilador (Ghidra ≥ 11.0, IDA Pro, Binary Ninja, Hopper ou Cutter/Rizin) e execute a análise automática. Versões mais novas do Ghidra introduziram um descompilador AArch64 que reconhece stubs PAC/BTI e tags MTE, melhorando significativamente a análise de bibliotecas construídas com o NDK do Android 14.
- Decida entre reversão estática e dinâmica: código ofuscado ou removido frequentemente precisa de instrumentação (Frida, ptrace/gdbserver, LLDB).
Instrumentação Dinâmica (Frida ≥ 16)
A série 16 do Frida trouxe várias melhorias específicas para Android que ajudam quando o alvo usa otimizações modernas do Clang/LLD:
thumb-relocator
agora pode hookear pequenas funções ARM/Thumb geradas pelo alinhamento agressivo do LLD (--icf=all
).- Enumerar e reatribuir slots de importação ELF funciona no Android, permitindo patching
dlopen()
/dlsym()
por módulo quando hooks inline são rejeitados. - O hooking Java foi corrigido para o novo ponto de entrada rápido ART usado quando aplicativos são compilados com
--enable-optimizations
no Android 14.
Exemplo: enumerando todas as funções registradas através de RegisterNatives
e despejando seus endereços em tempo de execução:
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 funcionará imediatamente em dispositivos habilitados para PAC/BTI (Pixel 8/Android 14+) desde que você use frida-server 16.2 ou posterior – versões anteriores falharam em localizar o preenchimento para hooks inline. citeturn5search2turn5search0
Vulnerabilidades recentes que valem a pena investigar em APKs
Ano | CVE | Biblioteca afetada | Notas |
---|---|---|---|
2023 | CVE-2023-4863 | libwebp ≤ 1.3.1 | Buffer overflow na heap acessível a partir de código nativo que decodifica imagens WebP. Vários aplicativos Android incluem versões vulneráveis. Quando você vê um libwebp.so dentro de um APK, verifique sua versão e tente exploração ou correção. |
2024 | Múltiplos | Série OpenSSL 3.x | Vários problemas de segurança de memória e oracle de preenchimento. Muitos pacotes Flutter & ReactNative incluem seu próprio libcrypto.so . |
Quando você encontrar arquivos .so
de terceiros dentro de um APK, sempre verifique seu hash contra avisos upstream. SCA (Análise de Composição de Software) é incomum em dispositivos móveis, então builds vulneráveis desatualizados são comuns.
Tendências de Anti-Reversão & Hardening (Android 13-15)
- Autenticação de Ponteiros (PAC) & Identificação de Alvo de Ramificação (BTI): O Android 14 habilita PAC/BTI em bibliotecas do sistema em silício ARMv8.3+ suportado. Descompiladores agora exibem pseudo-instruções relacionadas ao PAC; para análise dinâmica, o Frida injeta trampolinas após remover o PAC, mas suas trampolinas personalizadas devem chamar
pacda
/autibsp
quando necessário. - MTE & Alocador endurecido Scudo: a marcação de memória é opcional, mas muitos aplicativos cientes do Play-Integrity são construídos com
-fsanitize=memtag
; usesetprop arm64.memtag.dump 1
maisadb shell am start ...
para capturar falhas de tag. - Ofuscador LLVM (predicados opacos, achatamento de fluxo de controle): empacotadores comerciais (por exemplo, Bangcle, SecNeo) protegem cada vez mais o código nativo, não apenas Java; espere fluxo de controle falso e blobs de string criptografados em
.rodata
.
Recursos
- Aprendendo Assembly ARM: Azeria Labs – Fundamentos de Assembly ARM
- Documentação JNI & NDK: Especificação JNI da Oracle · Dicas JNI para Android · Guias NDK
- Depurando Bibliotecas Nativas: Depure Bibliotecas Nativas do Android Usando JEB Decompiler
Referências
- Registro de alterações do Frida 16.x (hooking Android, realocação de função pequena) – frida.re/news citeturn5search0
- Aviso da NVD para overflow
libwebp
CVE-2023-4863 – nvd.nist.gov citeturn2search0
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.