Jacques Bodin-Hullin Développeur d'applications Web

La perfection est atteinte non quand il ne reste rien à ajouter, mais quand il ne reste rien à enlever.

Antoine de Saint Exupéry

Android + Proxy = HTTP en clair

Ce soir j'ai joué à un jeu (dont je ne donnerai pas le nom) sur mon téléphone, sous Android 4.1.1 (Jelly Bean).

Et il m'est venue l'idée de voir les requêtes envoyées par l'application pour enregistrer mon score...

Procédure très facile à réaliser !


Ok tout d'abord je me suis dit que je pouvais peut-être sniffer les requêtes TCP depuis mon Mac à condition que le téléphone soit sur le même réseau... Pas possible.

Ensuite je me suis dit que j'allais simplement utiliser Charles, un proxy HTTP très sympa. J'ai donc pensé à mettre en place le proxy directement sur mon téléphone. Sauf que oui, mais non... Le proxy en place sur la connexion WiFi du téléphone n'est utilisé que par le navigateur. Enfin c'est ce qu'Android m'annonce quand je change le proxy.

Soit.

Je décide donc de récupérer le APK de mon application (via AirDroid) et d'utiliser une machine virtuelle android.

Pour la machine virtuelle c'est simple... je prends le SDK Android.

Installer un Android Virtual Device

Avant tout il nous faut donc une machine tournant sur Android. Pour ça on va simplement utiliser l'émulateur fourni avec le SDK.

Le SDK est fraîchement téléchargé et pas complet, on remédie au problème en lançant la jolie interface ;) :

~ $ cd Developper/android-sdk-macosx/tools/
~/Developper/android-sdk-macosx/tools $ ./android

Android SDK Manager

On sélectionne l'API 16 (Android 4.1) et on installe tout ça !

Maintenant nous avons donc tout ce qu'il faut pour créer notre AVD.

On commence donc par lister les systèmes Android disponibles :

~/Developper/android-sdk-macosx/tools $ ./android list targets
Available Android targets:
----------
id: 1 or "android-16"
     Name: Android 4.1
     Type: Platform
     API level: 16
     Revision: 2
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in
     ABIs : armeabi-v7a

Ensuite il nous faut créer notre AVD :

~/Developper/android-sdk-macosx/tools $ ./android create avd -n android_4.1 -a -c 100M -t android-16
Auto-selecting single ABI armeabi-v7a
Android 4.1 is a basic Android platform.
Do you wish to create a custom hardware profile [no]
Created AVD 'android_4.1' based on Android 4.1, ARM (armeabi-v7a) processor,
with the following hardware config:
hw.lcd.density=240
vm.heapSize=48
hw.ramSize=512

Tapez [enter] ou no à la question sur le hardware profile.

Lancer Charles et notre AVD

Avant de lancer notre nouvelle machine sous Android, nous devons lancer Charles.

clic clic

Voilà qui est fait.

Et maintenant ? On lance notre émulateur !

Attention : nous devons dire à notre émulateur que toutes les requêtes TCP passent par notre proxy, pour se faire rien de bien compliqué, nous devons ajouter l'argument -http-proxy localhost:8888 à la ligne de commande permettant de lancer l'émulateur :

~/Developper/android-sdk-macosx/tools $ ./emulator @android_4.1 -http-proxy localhost:8888

Pourquoi localhost:8888 ? Simplement parce que par défaut Charles est actif sur le port 8888 et que nous sommes donc en local (car notre machine virtuelle est... virtuelle).

Maintenant que nous avons une machine sous Android qui tourne et un proxy qui nous donne les informations sur toutes les requêtes TCP non chiffrées qui passent...

Installer notre APK téléchargé sur notre AVD

Nous avons téléchargez notre .apk via AirDroid et nous devons maintenant l'installer sur notre machine Android :

On se déplace dans le dossier platform-tools où se situe le fameux adb :

~/Developper/android-sdk-macosx/tools $ cd ../platform-tools/

On installe notre apk téléchargé :

~/Developper/android-sdk-macosx/platform-tools $ ./adb install ~/Downloads/SuperApplication.apk
780 KB/s (1392781 bytes in 1.743s)
    pkg: /data/local/tmp/SuperApplication.apk
Success

Et maintenant on lance l'application sur la machine virtuelle (via le menu graphique... normal quoi) et on regarde ce que nous affiche Charles (qui enregistre ce qu'il se passe par défaut au lancement du logiciel).

Conclusion

On se rend compte que certaines applications (des jeux ? avec des scores ?) font transiter les informations en clair (connexion non sécurisée) et qu'il est donc très facile de reproduire un fonctionnement standard, avec de fausses valeurs (comment ça il a fait un score plus grand que le score maxi ???).

Ca s'appelle tricher ça ! Oui MONSIEUR !

En même temps... il existe un standard qui s'appelle TLS.


Commentaires

blog comments powered by Disqus

Quelques infos

  • Par Jacques Bodin-Hullin
  • Publié le 17 August 2012
  • Les tags Android, Proxy, HTTP

Contact

Mon QRcode

le QRcode