Guest User

Untitled

a guest
Dec 12th, 2019
507
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.96 KB | None | 0 0
  1. Intro
  2.  
  3. 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.
  4.  
  5. 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 !
  6.  
  7. [FF F12]
  8.  
  9. 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.
  10.  
  11. J'envisage quelques solutions pour en avoir le cœur net :
  12.  
  13. installer l'application sur mon ordiphone, lancer l'application en la faisant passer par un proxy et regarder le trafic quand je l'utilise.
  14. faire de même dans un simulateur sur le PC avec l'android studio
  15. faire une analyse statique de l'application : peut être un fichier de configuration me donnera un pointeur
  16.  
  17. Les deux premières me semblent compliquées et intrusives car mon ordiphone n'est pas relié à google. J'opte pour l'analyse statique.
  18. Analyse d'un APK
  19. Télécharger l'APK
  20.  
  21. S'assurer de l'identifiant de l'application. Notons au passage la taille de la bête - 51M - qui dépasse mon entendement.
  22.  
  23. 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.
  24.  
  25. 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.
  26. Extraire l'APK
  27.  
  28. Un APK est grosso-modo une archive ZIP.
  29.  
  30. Mais dex2jar fournit un outil appelé "d2j-std-apk" qui prétend "clean up apk to standard zip". Alors pourquoi pas.
  31.  
  32. dex2jar-2.0/d2j-std-apk.sh -o apk.zip ~/Downloads/My\ Weather\ App_v6.2.1_apkpure.com.apk puis unzip apk.zip.
  33. strings
  34.  
  35. Avant toute chose, je tente une méthode un peu brutale, en utilisant strings sur l'ensemble des fichiers.
  36.  
  37. find apk -type f -print0 | xargs -0 strings | less -p "meteofrance.com"
  38.  
  39. 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.
  40.  
  41. [Source : https://framapic.org/wYYqobjUpoYJ/QhQHSFZV1fzs]
  42. Déchiffrer les DEX
  43.  
  44. Le code de l'application se trouve dans les fichiers dex. Il faut tout d'abord recréer les fichiers class de java.
  45.  
  46. dex2jar propose l'outil dex2jar exactement pour ça.
  47.  
  48. dex2jar-2.0/d2j-dex2jar.sh classes.dex
  49.  
  50. à répéter avec classes2.dex et classes3.dex
  51. strings, le retour
  52.  
  53. 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.
  54.  
  55. unzip -p apk/classes2-dex2jar.jar | strings | less -p "meteofrance.com", à répéter avec classes2.dex et classes3.dex.
  56.  
  57. Je ne trouve rien de plus que lors de la première passe.
  58. décompiler
  59.  
  60. Java Decompiler permet de décompiler les fichiers class. Et propose une GUI en plus de la CLI.
  61.  
  62. java -jar ~/Downloads/jd-gui-1.5.1.jar apk/classes-dex2jar.jar
  63.  
  64. Dans le premier fichier je trouve un package "rest" avec une class "RestClient". On touche au but mais ce n'est pas suffisant.
  65.  
  66. [Source : https://framapic.org/kzPafl3dA58m/ScZ49L466rRT]
  67.  
  68. Dans le second fichier, rien de bien folichon.
  69.  
  70. Dans le troisième, bingo, l'API est explicitée, avec l'hôte, les chemins et les paramètres.
  71.  
  72. [Source : https://framapic.org/W8DyNsflMhNW/Iif7DNIqQMbs]
  73. Exploitation de l'API
  74.  
  75. curl et jq permettent de facilement comprendre comment fonctionnent l'API.
  76.  
  77. Il faut noter que Météo France travaille avec les identifiants INSEE des villes de France et pas avec les code postaux.
  78.  
  79. Un verbe de l'API permet de chercher une ville et d'obtenir cet identifiant.
  80.  
  81. curl -s -S 'http://ws.meteofrance.com/ws/getLieux/rennes.json' | jq -rc '.result.france[]|[.indicatif, .nom]|@csv'
  82.  
  83. "352380","Rennes"
  84. "531890","Rennes-en-Grenouilles"
  85. "113090","Rennes-le-Château"
  86. "113100","Rennes-les-Bains"
  87. "254880","Rennes-sur-Loue"
  88.  
  89. Un verbe permet d'avoir les prévisions :
  90.  
  91. curl -s -S 'http://ws.meteofrance.com/ws/getDetail/france/352380.json' | jq -rc '.result.previsions48h|.[]|[.moment, .description]|@csv'
  92.  
  93. "20-23","Rares averses"
  94. "23-02","Rares averses"
  95. "02-05","Rares averses"
  96. "05-08","Rares averses"
  97. "08-11","Rares averses"
  98. "11-14","Risque d'orages"
  99. "14-17","Averses orageuses"
  100. "17-20","Averses orageuses"
  101. "20-23","Rares averses"
  102. "23-02","Eclaircies"
  103.  
  104. Outro
  105.  
  106. Voilà, nous avons vu comment disséquer une application Android pour retrouver l'API qu'elle utilise. Y avait-il un autre moyen ?
  107.  
  108. Happy hacking !
Add Comment
Please, Sign In to add comment