An einem trägen und bereits ziemlich langweiligen Abend blätterte ich in der offiziellen App des Habr und beugte erneut meine Finger, einen für jedes Leerlaufmerkmal. Hier ist es beispielsweise unmöglich zu kommentieren, ihnen wird das Wahlrecht verweigert, und warum sind die Formeln im Allgemeinen nicht auf dem Bildschirm sichtbar?
Es wurde entschieden: Sie brauchen etwas Bequemes, Angenehmes, Eigenes. Was ist mit deiner App für Habr?
Lassen Sie uns ein paar Screenshots geben, um die Situation zu verstehen.
Irgendwie sieht es so aus - von. habr.com AnwendungDie Liste der "Unannehmlichkeiten"- Sie können keine Publikation bewerten, deren Bewertung nicht 0 ist
- Es ist nicht immer möglich, einen Kommentar zu schreiben
- Umfragen funktionieren nicht
- Die Formeln sind im dunklen Thema nicht sichtbar (schwarz auf schwarz)
- Nicht alle Lesezeichen verfügbar
Ja, die Anwendung wurde seit letztem August nicht aktualisiert, ist aber immer noch schlecht. Im Allgemeinen müssen Sie das Problem beheben.
Teil Eins Auf der Suche nach Zugang.
Eine schnelle Anfrage an Google "Habrahabr API" wird bereits vom veralteten Github- Repository ausgegeben, das seit dem 21. November 2016 nicht aktualisiert wurde. Dies dauert eine Minute und dauert zweieinhalb Jahre .
Wenn Sie die Tatsache ignorieren, dass dies PHP ist, scrollen Sie nach unten und lesen Sie:
Anwendungs-ID abrufen
Mit diesem Formular in Habrahabr müssen Sie kurz das Wesentliche der neuen Anwendung und den Zweck beschreiben, für den sie eine API benötigt.
Es ist keine Frage, ob Sie Zugriff benötigen, dann müssen Sie. Wir schreiben einen Brief (abgekürzt):
Ein BriefEs besteht der Wunsch, einen Antrag für Habr auf der Grundlage von PWA zu stellen. Dafür gibt es mehrere Gründe.
Das erste und verständlichste: Die Android-Anwendung entspricht nicht meinen persönlichen Anforderungen.
Zweitens: Es gibt nicht genügend native Benachrichtigungen über alle Arten von Dingen, die normalerweise bei der Post eingehen (z. B. Kommentare).
Drittens: persönliche Zusammenfassungen (als Perspektive) für die Personen / Hubs, die mich aufgrund meiner Interessen interessieren.
Die Antwort war natürlich nicht sehr angenehm, aber zumindest ehrlich:
Leider ist der Zugriff auf unsere API derzeit nicht verfügbar. Wir planen, den Zugriff nach Abschluss der Fertigstellung der API wieder aufzunehmen, haben jedoch noch keine genauen Daten, da Im Moment sind wir damit beschäftigt, andere vorrangige Aufgaben zu lösen.
"Okay, das ist egal! Wir werden uns etwas einfallen lassen! " Sagte ich mir und begann zu suchen.
Teil Zwei Tiefe Ausgrabung.
Wenn die Anwendung basierend auf der Logik funktioniert, hat sie Zugriff auf die API und ist mit der Anwendung verbunden. Lassen Sie uns analysieren.
Da wir es mit Verkehr zu tun haben, ist Wireshark unsere Wahl. Nicht ohne Qual, indem Sie das Telefon über einen stationären Computer mit dem Internet verbinden, öffnen Sie die Anwendung und sehen Sie sich die Anforderungen an:
Klar, dass nichts klar istJa, alles ist verschlüsselt, aber ich möchte mich nicht mit Kryptografie anlegen. Dann müssen Sie in die Anwendung selbst schauen.
Nachdem wir .apk dekompiliert haben , beginnen wir zu suchen. Was braucht eine API? Das ist richtig, Endpunkt , der Ort, an den alle Anfragen gehen. Dies ist wahrscheinlich http (s). Versuchen Sie, "https: //" zu finden:
In der Datei AuthLinkManager.smali
finden wir
.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"
Dies ist der Code für die virtuelle Android-Maschine ( Dalvik VM ), der für Menschen nicht sehr klar, aber dennoch recht informativ ist. Diese drei Konstanten werden anhand ihres Inhalts und Namens sowie des GitHub-Repositorys verwendet, um mithilfe der GET
Methode ein Zugriffstoken anzufordern.
Wir schauen weiter. Die nächste NetworkModule.smali
Datei, die Sie bei Ihrer Suche finden:
const-string v0, "https://habr.com/api/v1/"
Und hier ist der richtige Ort für Anfragen!
Für den normalen Betrieb des selbstgeschriebenen Clients muss nur noch eines herausgefunden werden: client_id
, die höchstwahrscheinlich eine eindeutige Kennung für die Anwendung ist.
Die Suche in diesem Text in den Quellen führte jedoch nicht dazu, dass relevante Informationen gefunden wurden ...
Aber plötzlich fielen mir in einer Akte interessante Zeilen auf:
const-string p8, "log-tag" invoke-static {p8, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
Wie Sie verstehen, handelt es sich hierbei um einen Protokolleintrag. Aber eine Aufzeichnung von was?
Teil drei. Hier sind die Protokolle!
Wir verwenden adb logcat
, um Anwendungsprotokolle anzuzeigen.
Unerwartet, aber die Protokolle waren noch detaillierter als erwartet.
Hier finden Sie nicht nur die client_id
wir client_id
, sondern auch das Benutzer- / Anwendungstoken sowie das Klartext- Login und das Passwort !
Einige VerschwörungstheorienDas Vorhandensein von Anmelde- und Kennwortprotokollen an sich schadet nichts, da diese Protokolle nur mit Root-Rechten oder einer adb
Verbindung gelesen werden können. Aber aufgrund der Tatsache, dass es unter Leuten, die Habr lesen, Entwickler auf Android gibt, die das Debuggen aktivieren können, wird dies zu einem Problem.
In diesem Fall kann die „kostenlose Gebühr“ am Flughafen zum Diebstahl des Kontos führen , obwohl wer benötigt sie?
Aus diesen Protokollen können Sie Folgendes erstellen:
client_id
und apikey
mussten auf die api zugreifen;- Benutzerautorisierungs-URL (seltsam, aber im Repository befindet sich nichts über diese Methode, möglicherweise wird sie nicht bereitgestellt?)
Und so geschah es. Basierend auf dieser winzigen Studie wird bereits an einem kleinen Projekt gearbeitet - der eigenen Implementierung einer mobilen Anwendung. Wenn Sie helfen möchten, schreiben Sie bitte Nachrichten und alle anderen - um abzustimmen (weil ich verstehen möchte, ob jemand dies benötigt).
Vielen Dank für Ihre Aufmerksamkeit!