Reversing Native Libraries
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Per ulteriori informazioni controlla: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Le app Android possono utilizzare librerie native, tipicamente scritte in C o C++, per compiti critici per le prestazioni. Anche i creatori di malware utilizzano queste librerie, poiché sono più difficili da ingegnerizzare a ritroso rispetto al bytecode DEX. La sezione enfatizza le competenze di ingegneria inversa su misura per Android, piuttosto che insegnare linguaggi di assemblaggio. Sono fornite versioni ARM e x86 delle librerie per compatibilità.
Librerie Native nelle App Android:
Utilizzate per compiti ad alta intensità di prestazioni.
Scritte in C o C++, rendendo l'ingegneria inversa una sfida.
Trovate in formato .so
(oggetto condiviso), simile ai binari Linux.
I creatori di malware preferiscono il codice nativo per rendere l'analisi più difficile.
Java Native Interface (JNI) & Android NDK:
JNI consente ai metodi Java di essere implementati in codice nativo.
NDK è un insieme di strumenti specifici per Android per scrivere codice nativo.
JNI e NDK collegano il codice Java (o Kotlin) con le librerie native.
Caricamento ed Esecuzione delle Librerie:
Le librerie vengono caricate in memoria utilizzando System.loadLibrary
o System.load
.
JNI_OnLoad viene eseguito al caricamento della libreria.
I metodi nativi dichiarati in Java si collegano a funzioni native, abilitando l'esecuzione.
Collegamento dei Metodi Java alle Funzioni Native:
Collegamento Dinamico: I nomi delle funzioni nelle librerie native corrispondono a un modello specifico, consentendo il collegamento automatico.
Collegamento Statico: Utilizza RegisterNatives
per il collegamento, fornendo flessibilità nella denominazione e nella struttura delle funzioni.
Strumenti e Tecniche di Ingegneria Inversa:
Strumenti come Ghidra e IDA Pro aiutano ad analizzare le librerie native.
JNIEnv
è cruciale per comprendere le funzioni e le interazioni JNI.
Sono forniti esercizi per praticare il caricamento delle librerie, il collegamento dei metodi e l'identificazione delle funzioni native.
Apprendimento dell'Assembly ARM:
Suggerito per una comprensione più profonda dell'architettura sottostante.
Nozioni di base sull'Assembly ARM da Azeria Labs è raccomandato.
Documentazione JNI & NDK:
Debugging delle Librerie Native:
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)