Reversing Native Libraries
Pour plus d'informations, consultez : https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Les applications Android peuvent utiliser des bibliothèques natives, généralement écrites en C ou C++, pour des tâches critiques en termes de performances. Les créateurs de logiciels malveillants utilisent également ces bibliothèques, car elles sont plus difficiles à rétro-ingénierie que le bytecode DEX. La section met l'accent sur les compétences en rétro-ingénierie adaptées à Android, plutôt que sur l'enseignement des langages d'assemblage. Des versions ARM et x86 des bibliothèques sont fournies pour la compatibilité.
Points clés :
Bibliothèques natives dans les applications Android :
Utilisées pour des tâches intensives en performances.
Écrites en C ou C++, rendant la rétro-ingénierie difficile.
Trouvées au format
.so
(objet partagé), similaire aux binaires Linux.Les créateurs de logiciels malveillants préfèrent le code natif pour rendre l'analyse plus difficile.
Interface Native Java (JNI) & NDK Android :
JNI permet d'implémenter des méthodes Java en code natif.
NDK est un ensemble d'outils spécifique à Android pour écrire du code natif.
JNI et NDK relient le code Java (ou Kotlin) aux bibliothèques natives.
Chargement et exécution de bibliothèques :
Les bibliothèques sont chargées en mémoire à l'aide de
System.loadLibrary
ouSystem.load
.JNI_OnLoad est exécuté lors du chargement de la bibliothèque.
Les méthodes natives déclarées en Java se lient aux fonctions natives, permettant l'exécution.
Liaison des méthodes Java aux fonctions natives :
Liaison dynamique : Les noms de fonctions dans les bibliothèques natives correspondent à un motif spécifique, permettant une liaison automatique.
Liaison statique : Utilise
RegisterNatives
pour la liaison, offrant une flexibilité dans le nommage et la structure des fonctions.Outils et techniques de rétro-ingénierie :
Des outils comme Ghidra et IDA Pro aident à analyser les bibliothèques natives.
JNIEnv
est crucial pour comprendre les fonctions JNI et les interactions.Des exercices sont fournis pour pratiquer le chargement de bibliothèques, la liaison des méthodes et l'identification des fonctions natives.
Ressources :
Apprentissage de l'assemblage ARM :
Recommandé pour une compréhension approfondie de l'architecture sous-jacente.
Bases de l'assemblage ARM d'Azeria Labs est recommandé.
Documentation JNI & NDK :
Débogage des bibliothèques natives :
Last updated