Android_Emuroot est un script Python qui permet d'accorder des privilèges racine à la volée vers des shells fonctionnant sur des machines virtuelles Android qui utilisent des images d'émulateur fournies par Google appelé Google API PlayStore , pour aider les ingénieurs à rétro-ingénieurs à approfondir leurs investigations.
Android_emuroot nécessite le lancement de l'émulateur Google API Playstore à être lancé avec l'option Qemu GDB Stub activé et l'utilise pour modifier les métadonnées du processus stockées en mémoire dans les structures de tâches du noyau. L'idée principale est de partir d'un shell avec les privilèges les plus bas, puis de trouver sa structure d'identification associée dans la mémoire du noyau pour la remplacer par une autre structure ayant les privilèges les plus élevés.
L'implémentation de cette modification de la mémoire sur un émulateur Google API Playstore présente les deux avantages suivants:
Android_emuroot a besoin d'avoir déjà un SDK Android fonctionnant. L'installation des outils de ligne de commande est recommandée (téléchargeable via le Android Studio GUI: Tools> Android> SDK Manager> SDK Tools).
Android_emuroot est un script Python qui utilise les installations ADB ainsi que les installations GDB des deux modules de Python suivants:
Assurez-vous d'avoir ces modules ou de les installer via PIP: pip3 install -r requirements.txt .
NB: Android_Emuroot prend en charge Python 2 et Python 3.
Selon l'architecture matérielle et la version du noyau de l'émulateur, la disposition de la mémoire de l'image QEMU associée varie. Ainsi, l'emplacement des correctifs de mémoire implémentés par Android_Emuroot varie également.
Pour l'instant, Android_Emuroot prend en charge les versions suivantes des émulateurs:
| Version Android | API | Architecture | Noyau | Construire |
|---|---|---|---|---|
| Android 7.0 | 24 | x86 | 3.10 | google-ap-playstore |
| Android 7.1.1 | 25 | x86 | 3.10 | google-ap-playstore |
| Android 8.0 | 26 | x86 | 3.18 | google-ap-playstore |
| Android 8.1 | 27 | x86 | 3.18 | google-ap-playstore |
Assurez-vous que l'AVD que vous souhaitez root est basé sur un émulateur de cette liste.
NB: Les émulateurs peuvent être téléchargés via SdkManager, un outil de la chaîne d'outils Android Studio, avec l'interface graphique ou en ligne de commande, par exemple comme celle-ci: sdkmanager --install "system-images;android-27;google_apis_playstore;x86" . Ensuite, créez un périphérique virtuel Android (AVD) en conséquence, via la GUI AVD Manager ou avec AVDManager comme ceci: avdmanager create avd -n my_avd_name -k "system-images;android-27;google_apis_playstore;x86" .
Android_emuroot doit interagir avec les deux:
Le schéma ci-dessous montre les interactions entre tous les éléments:

L'Android Debug Bridge (ADB) est un outil de ligne de commande de la chaîne d'outils Android Studio qui permet de communiquer avec un appareil Android. Le serveur ADB est le composant qui gère la communication entre Android_Emuroot et le démon ADB lancé sur l'appareil. Par défaut, les serveurs ADB écoutent sur 127.0.0.1 Port 5037 . adb start-server vous permet de vous assurer qu'il existe un serveur en cours d'exécution.
Assurez-vous que votre serveur ADB s'exécute.
L'autre exigence d'utiliser Android_Emuroot est de fixer un serveur GDB à votre AVD lors du lancement. Emulator, un autre outil de ligne de commande de la chaîne d'outils Android Studio, permet de lancer AVD avec de nombreuses options. Parmi eux: -qemu -s (Shorthang pour -qemu -gdb tcp::1234 ) qui ouvre un serveur GDB sur le port TCP 1234.
Utilisez cette option pour obtenir un serveur GDB disponible.
Voici un exemple simple d'utilisation de l'émulateur:
emulator -avd my_avd_name [options] -qemu -s
De cette façon, un serveur GDB sera attaché à l'AVD my_avd_name et Android_Emuroot pourra engendrer son client GDB et effectuer les correctifs de mémoire.
Une fois que le serveur ADB et le serveur GDB sont opérationnels, vous êtes prêt à utiliser Android_emuroot.
Android_emuroot a 3 modes:
single --magic-name NAME : pour donner des privilèges racine à seulement 1 shell donné dans le paramètreadbd [--stealth] : pour donner des privilèges racine à l'ensemble du serveur adbd ; Chaque nouvelle coquille sera engendrée comme racinesetuid --path NAME : Pour installer un binaire racine setuid sur le système de fichiersPlus de détails sur l'utilisation et l'outil internes: utilisation détaillée
Android_emuroot a été écrit par Mouad Abouhali et Anaïs Gantet d'Airbus-Seclab.
Android_emuroot est publié sous GPLV2.