Reversing Native Libraries
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à.
Punti Chiave:
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
oSystem.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.
Risorse:
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:
Last updated