Free Traffic Exchange

Disséquer un APK pour trouver une API de météo 2019

[ad_1]

Intro

Si vous vous rendez sur le site de Météo France, il n’y a pas de moyen évident de récupérer les prévisions météorologiques par API pour les intégrer dans ses propres applications. Alors que, si j’en crois Wikipedia, Météo France est un « établissement public administratif », donc plus ou moins financé par nos impôts.

Pour commencer gentiment, j’ouvre les outils de développement de Firefox (F12) pour voir comment une page de prévisions est construite (onglet « network »). On peut constater que la page n’est pas construite par un appel d’API (xhr) mais directement rendu en HTML côté serveur. Doh !

FF F12 apk

Pourtant il y a une application officielle sur le playstore de google/android. Et qui ne semble pas être un simple revamping du site web. Je parierai qu’elle utilise une API.

J’envisage quelques solutions pour en avoir le cœur net :

  • installer l’application sur mon ordiphone, lancer l’application en la faisant passer par un proxy et regarder le trafic quand je l’utilise.
  • faire de même dans un simulateur sur le PC avec l’android studio
  • faire une analyse statique de l’application : peut être un fichier de configuration me donnera un pointeur

Les deux premières me semblent compliquées et intrusives car mon ordiphone n’est pas relié à google. J’opte pour l’analyse statique.

Analyse d’un APK

Télécharger l’APK

S’assurer de l’identifiant de l’application. Notons au passage la taille de la bête – 51M – qui dépasse mon entendement.

Chercher un site qui permet de télécharger une application Android sur PC. Il y en a des centaines. On se demande ce qu’ils ont à y gagner : juste afficher de la pub ou installer une petite spécialité maison au passage … méfions nous des fichiers récupérés de cette manière.

Je prends le premier, j’entre l’ID de l’application et lance le téléchargement. J’obtiens un fichier APK sur mon PC.

Un APK est grosso-modo une archive ZIP.

Mais dex2jar fournit un outil appelé « d2j-std-apk » qui prétend « clean up apk to standard zip ». Alors pourquoi pas.

dex2jar-2.0/d2j-std-apk.sh -o apk.zip ~/Downloads/My Weather App_v6.2.1_apkpure.com.apk puis unzip apk.zip.

strings

Avant toute chose, je tente une méthode un peu brutale, en utilisant strings sur l’ensemble des fichiers.

find apk -type f -print0 | xargs -0 strings | less -p "meteofrance.com"

Je commence à trouver des trucs très sympa comme « webservice.meteofrance.com », « ws.meteofrance.com », « api.meteofrance.com ». C’est bon signe mais cela ne me dit pas vraiment comment utiliser l’API ni où elle est exactement.

Déchiffrer les DEX

Le code de l’application se trouve dans les fichiers dex. Il faut tout d’abord recréer les fichiers class de java.

dex2jar propose l’outil dex2jar exactement pour ça.

dex2jar-2.0/d2j-dex2jar.sh classes.dex

à répéter avec classes2.dex et classes3.dex

strings, le retour

Maintenant que j’ai des jar avec des class. Je retente la méthode brutale, strings mais cette fois si sur le contenu des jars.

unzip -p apk/classes2-dex2jar.jar | strings | less -p "meteofrance.com", à répéter avec classes2.dex et classes3.dex.

Je ne trouve rien de plus que lors de la première passe.

décompiler

Java Decompiler permet de décompiler les fichiers class. Et propose une GUI en plus de la CLI.

java -jar ~/Downloads/jd-gui-1.5.1.jar apk/classes-dex2jar.jar

Dans le premier fichier je trouve un package « rest » avec une class « RestClient ». On touche au but mais ce n’est pas suffisant.

Dans le second fichier, rien de bien folichon.

Dans le troisième, bingo, l’API est explicitée, avec l’hôte, les chemins et les paramètres.

Exploitation de l’API

curl et jq permettent de facilement comprendre comment fonctionnent l’API.

Il faut noter que Météo France travaille avec les identifiants INSEE des villes de France et pas avec les code postaux.

Un verbe de l’API permet de chercher une ville et d’obtenir cet identifiant.

curl -s -S 'http://ws.meteofrance.com/ws/getLieux/rennes.json' | jq -rc '.result.france()|(.indicatif, .nom)|@csv'

"352380","Rennes"
"531890","Rennes-en-Grenouilles"
"113090","Rennes-le-Château"
"113100","Rennes-les-Bains"
"254880","Rennes-sur-Loue"

Un verbe permet d’avoir les prévisions :

curl -s -S 'http://ws.meteofrance.com/ws/getDetail/france/352380.json' | jq -rc '.result.previsions48h|.()|(.moment, .description)|@csv'

"20-23","Rares averses"
"23-02","Rares averses"
"02-05","Rares averses"
"05-08","Rares averses"
"08-11","Rares averses"
"11-14","Risque d'orages"
"14-17","Averses orageuses"
"17-20","Averses orageuses"
"20-23","Rares averses"
"23-02","Eclaircies"

Outro

Voilà, nous avons vu comment disséquer une application Android pour retrouver l’API qu’elle utilise. Y avait-il un autre moyen ?

Happy hacking !

[ad_2]

Source link

Add a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *