La sécurité mobile (Android)
Ce qu'il y a dans une application Android
Ton téléphone est un ordinateur, et ses applications peuvent être analysées comme n'importe quel logiciel, pour celles que tu possèdes : les tiennes, ou des applications volontairement vulnérables faites pour l'entraînement.
| Dans l'APK | Contenu |
|---|---|
AndroidManifest.xml |
la carte d'identité de l'app : nom, permissions, composants |
classes.dex |
le code, compilé en bytecode DEX (pas du Java lisible directement) |
res/, assets/ |
images, sons, fichiers |
lib/ |
code natif (C/C++) pour chaque type de processeur (ARM...) |
Le manifeste : permissions et composants
Le AndroidManifest.xml est la première chose qu'examine un auditeur de sécurité mobile. Deux points l'intéressent.
Exercice : Auditer les permissions d'une app
Tu analyses une app « lampe torche ». Une lampe torche n'a besoin que de la permission CAMERA (pour le flash). Écris permissions_suspectes(demandees, necessaires) qui renvoie la liste triée des permissions demandées mais non nécessaires : celles qui sont de trop.
Voir une solution
demandees = ["CAMERA", "READ_SMS", "READ_CONTACTS", "ACCESS_FINE_LOCATION", "INTERNET"]
necessaires = ["CAMERA"]
def permissions_suspectes(demandees, necessaires):
"""Renvoie les permissions demandées en trop, triées."""
return sorted(p for p in demandees if p not in necessaires)
print(permissions_suspectes(demandees, necessaires))Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Repérer un composant exporté dangereux
Tu analyses le manifeste d'une app bancaire d'entraînement. Chaque composant a un nom, un attribut exported (vrai/faux) et un niveau sensible (vrai/faux). Un composant sensible ET exporté est une faille : une autre app pourrait l'appeler directement.
Écris failles(composants) qui renvoie la liste triée des noms des composants à la fois sensibles et exportés.
Voir une solution
composants = [
{"nom": "EcranConnexion", "exported": True, "sensible": False},
{"nom": "EcranSolde", "exported": True, "sensible": True},
{"nom": "Transfert", "exported": True, "sensible": True},
{"nom": "Reglages", "exported": False, "sensible": True},
]
def failles(composants):
"""Renvoie les noms, triés, des composants sensibles ET exportés."""
return sorted(c["nom"] for c in composants if c["exported"] and c["sensible"])
print(failles(composants))Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
La suite : devenir vraiment bon
Tu as maintenant vu les grands piliers de la sécurité offensive : mots de passe et hachage, cassage, failles web, reconnaissance, sécurité mobile. Tu as codé toi-même chaque mécanisme, ce qui vaut mille explications.
Pour continuer, par la pratique, et toujours légalement :
- Monte ton laboratoire : VirtualBox + Kali Linux, et une cible comme Metasploitable ou Juice Shop. C'est le vrai point de départ.
- TryHackMe, parcours « Complete Beginner » puis « Jr Penetration Tester » : guidé, progressif, légal.
- PortSwigger Web Security Academy : gratuit, le meilleur pour les failles web, avec des labs intégrés.
- Les CTF : commence par des CTF « débutants » (picoCTF). Résoudre des défis et les documenter remplit un GitHub qui parle aux recruteurs.
- Des certifications, plus tard : eJPT (abordable, pour débuter), puis OSCP (la référence, exigeante), CEH.