Dans une soirée langoureuse et déjà assez ennuyeuse, moi, en feuilletant l'application officielle du Habr, j'ai de nouveau plié les doigts, un pour chaque fonction inactive. Ici, par exemple, il est impossible de commenter, on leur refuse le droit de vote, et en général, pourquoi les formules ne sont-elles pas visibles à l'écran?
Il a été décidé: vous avez besoin de quelque chose de confortable, agréable, le vôtre. Et votre application pour Habr?
Donnons quelques captures d'écran pour comprendre la situation.
D'une certaine manière, cela ressemble à ceci - de. application habr.comLa liste des "inconvénients"- Vous ne pouvez pas évaluer une publication dont la note est différente de 0
- Il n'est pas toujours possible d'écrire un commentaire
- Les sondages ne fonctionnent pas
- Les formules ne sont pas visibles dans le sujet sombre (noir sur noir)
- Tous les signets ne sont pas disponibles
Oui, l'application n'a pas été mise à jour depuis août dernier, mais reste mauvaise. En général, vous devez le réparer.
Première partie A la recherche d'accès.
Une demande rapide à Google «habrahabr API» est déjà émise par le référentiel github obsolète, qui n'a pas été mis à jour depuis le 21 novembre 2016 , et cela, pour une minute, est de deux ans et demi .
Ignorant le fait qu'il s'agit de PHP, faites défiler vers le bas et lisez:
Obtenir l'ID d'application
En utilisant ce formulaire sur Habrahabr, vous devez décrire brièvement l'essence de la nouvelle application et le but pour lequel elle a besoin d'une API.
Ce n'est pas une question si vous avez besoin d'accéder, alors vous devez. Nous écrivons une lettre (en abréviation):
Une lettreIl y a un désir de faire une demande pour Habr basée sur PWA. Il y a plusieurs raisons à cela.
Le premier et le plus compréhensible: l'application Android ne répond pas à mes exigences personnelles.
Deuxièmement: il n'y a pas suffisamment de notifications natives sur toutes sortes de choses qui arrivent généralement au bureau de poste (commentaires, par exemple).
Troisièmement: des résumés personnels (en tant que perspective) pour les personnes / hubs qui m'intéressent, compte tenu de mes intérêts.
La réponse, bien sûr, n'était pas très agréable, mais au moins honnête:
Malheureusement, l'accès à notre API n'est pas disponible actuellement. Nous prévoyons de reprendre l'accès après avoir finalisé la finalisation de l'API, mais nous n'avons pas encore de date exacte, car en ce moment, nous sommes occupés à résoudre d'autres tâches prioritaires.
"D'accord, ça n'a pas d'importance! Nous allons trouver quelque chose! " Je me suis dit et j'ai commencé à chercher.
Deuxième partie Excavation profonde.
En fonction de la logique, si l'application fonctionne, elle a alors accès à l'API et est câblée dans l'application. Analysons.
Puisque nous traitons avec le trafic, Wireshark est notre choix. Non sans tourment en connectant le téléphone à Internet via un ordinateur fixe, ouvrez l'application et regardez les demandes:
Clair que rien n'est clairOui, tout est crypté, mais je ne veux pas jouer avec la cryptographie. Ensuite, vous devez regarder à l'intérieur de l'application elle-même.
Après avoir décompilé .apk , nous commençons à chercher. De quoi a besoin une API? C'est vrai, point final , l'endroit où vont toutes les demandes. Il s'agit probablement de http (s), essayez de trouver «https: //»:
Dans le fichier AuthLinkManager.smali
on trouve
.field OAUTH:Ljava/lang/String; = "https://habrahabr.ru/auth/o/%s/" .field OAUTH_PARAMS:Ljava/lang/String; = "?client_id=%s&response_type=token&redirect_uri=%s" .field OAUTH_REDIRECT_URL:Ljava/lang/String; = "http://cleverpumpkin.ru"
C'est le code de la machine virtuelle Android ( Dalvik VM ), pas très clair pour l'homme, mais tout de même assez informatif. Ces trois constantes, à en juger par leur contenu et leur nom, ainsi que le référentiel GitHub, sont utilisées pour demander un jeton d'accès à l'aide de la méthode GET
.
Nous regardons plus loin. Le prochain fichier NetworkModule.smali
que vous trouverez dans votre recherche:
const-string v0, "https://habr.com/api/v1/"
Et voici l'endroit où aller avec des demandes!
Il ne reste qu'une chose à savoir pour que le client auto- client_id
fonctionne correctement - client_id
, qui est très probablement un identifiant unique pour l'application.
Cependant, la recherche de ce texte dans les sources n'a pas permis de trouver des informations pertinentes ...
Mais soudain, dans un dossier, mes yeux se sont accrochés à des lignes intéressantes:
const-string p8, "log-tag" invoke-static {p8, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
Comme vous pouvez le comprendre, il s'agit d'une entrée de journal. Mais un enregistrement de quoi?
Troisième partie. Voici les journaux!
Nous utilisons adb logcat
pour afficher les journaux des applications.
De façon inattendue, mais les journaux étaient encore plus détaillés que prévu.
Voici non seulement l' client_id
nous avons client_id
, mais aussi le jeton utilisateur / application, ainsi que l' identifiant et le mot de passe en texte clair!
Quelques théories du complotLa présence de journaux de connexion et de mot de passe en soi ne nuit à rien, car ces journaux ne peuvent être lus qu'avec des droits root ou une connexion adb
. Mais du fait que parmi les personnes lisant Habr, il existe des développeurs sur Android qui peuvent activer le débogage, cela devient un problème.
Dans ce cas, les «frais gratuits» à l'aéroport peuvent entraîner le vol du compte , mais qui en a besoin?
À partir de ces journaux, vous pouvez créer:
client_id
et apikey
nécessaires pour accéder à l' api ;- URL d'autorisation utilisateur (étrange, mais il n'y a rien dans le référentiel concernant cette méthode, peut-être qu'elle n'est pas fournie?)
Et c'est arrivé. Sur la base de cette petite étude, des travaux sont déjà en cours sur un petit projet - sa propre implémentation d'une application mobile. Si vous voulez aider, veuillez écrire des messages, et tout le monde - pour voter (parce que je veux comprendre si quelqu'un en a besoin).
Merci de votre attention!