(O)officiell Habr-applikation - HabrApp 2.0: får åtkomst

En trög och redan ganska tråkig kväll bläddrade jag igenom officiell Habr applikation, återigen böjde jag fingrarna, en för varje funktion som inte fungerar. Här kan man till exempel inte kommentera, här nekas man rösträtt och generellt, varför syns inte formlerna på skärmen?

(O)officiell Habr-applikation - HabrApp 2.0: får åtkomst
Det bestämdes: vi behövde något bekvämt, trevligt, något eget. Hur är det med din egen ansökan om Habr?
Låt mig ge dig några skärmdumpar för att förstå situationen.

(O)officiell Habr-applikation - HabrApp 2.0: får åtkomstPå något sätt ser det ut så här detta - av. habr.com-applikationen

Lista över "olägenheter"

  • Du kan inte betygsätta en publikation vars betyg skiljer sig från 0
  • Det går inte alltid att skriva en kommentar
  • Omröstningar fungerar inte
  • Formler är inte synliga i mörkt tema (svart på svart)
  • Alla bokmärken är inte tillgängliga

Ja, appen har inte uppdaterats sedan augusti förra året, men den är fortfarande dålig. I allmänhet måste det fixas.

Del ett. Söker tillgång.

Snabb Google-fråga "habrahabr API" det står att det redan är ganska föråldrat förvaret på Github, inte uppdaterad sedan dess November 21 2016, och detta, för ett ögonblick, två och ett halvt år.

Ignorera det faktum att detta är PHP, scrolla ner och läs:

Hämta applikations-ID

Utnyttja detta formulär på Habrahabr måste du kortfattat beskriva kärnan i den nya applikationen och syftet för vilken den behöver ett API.

Det är ingen fråga, om du behöver få tillgång, då behöver du det. Vi skriver ett brev (förkortat):

Ett brev

Det finns en önskan att göra en ansökan för Habr baserad på PWA. Det finns flera anledningar till detta. 

Den första och mest uppenbara: Android-applikationen uppfyller inte mina personliga krav.

För det andra: det finns inte tillräckligt med inbyggda aviseringar om alla möjliga saker som vanligtvis kommer via e-post (kommentarer till exempel).

För det tredje: personliga sammanfattningar (som ett perspektiv) om människor/nav som intresserar mig, med hänsyn till mina intressen.

Svaret var naturligtvis inte särskilt trevligt, men åtminstone ärligt:

Tyvärr är åtkomst till vårt API för närvarande inte tillgänglig. Vi planerar att återuppta tillhandahållandet av åtkomst efter att vi slutfört API:t, men vi har inga exakta datum ännu, eftersom Vi är just nu upptagna med att lösa andra prioriterade uppgifter.

"Okej, inga problem! Vi kommer på något!" – Jag sa till mig själv och började leta.

Del två. Djupa utgrävningar.

Baserat på logiken, om applikationen körs, har den åtkomst till API:t och den är kopplad till applikationen. Låt oss analysera.

Eftersom vi har att göra med trafik är Wireshark vårt val. Inte utan några smärtor, efter att ha anslutit telefonen till Internet via en stationär dator, öppnar vi applikationen och tittar på förfrågningarna:

(O)officiell Habr-applikation - HabrApp 2.0: får åtkomst
Det är klart att inget är klart

Ja, allt är krypterat, men jag vill inte bråka med kryptografi. Sedan måste du titta in i själva applikationen.

Dekompilerade . Apk, låt oss börja leta. Vad behöver ett API? Höger, slutpunkt, platsen dit alla förfrågningar går. Det här är förmodligen http(s), låt oss försöka hitta "https://":

I fil AuthLinkManager.smali hitta

.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"

Detta är koden för den virtuella Android-maskinen (Dalvik VM), inte särskilt förståeligt för människor, men ändå ganska informativt. Dessa tre konstanter, att döma av deras innehåll och namn, samt GitHub-förvaret, används för att begära en åtkomsttoken med metoden GET.

Låt oss titta vidare. Filen som kommer upp härnäst i sökningen är NetworkModule.smali:

const-string v0, "https://habr.com/api/v1/"

Och här är platsen att gå med dina önskemål!

För att den självskrivna klienten ska fungera korrekt är det bara en sak kvar att ta reda på - client_id, vilket troligen är en unik identifierare för applikationen.

Att söka efter denna text i källkoden ledde dock inte till att man hittade relevant information...

Men plötsligt fångade mina ögon några intressanta rader i en av filerna:

const-string p8, "log-tag"
invoke-static {p8, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

Detta är, som du kan förstå, en loggpost. Men spela in vad?

Del tre. Det här är stockarna!

Vi använder adb logcat för att visa applikationsloggar.

(O)officiell Habr-applikation - HabrApp 2.0: får åtkomst

Loggarna visade sig oväntat vara ännu mer detaljerade än väntat.

Här har vi inte bara det vi behöver client_idMen pollett användare/applikation och logga in и пароль i klartext!

Några konspirationsteorierBlotta närvaron av inloggning och lösenord i loggarna skadar ingenting, eftersom dessa loggar endast kan läsas med antingen roträttigheter eller en anslutning via adb. Men på grund av att det bland de som läser Habr finns Android-utvecklare som kan ha felsökning aktiverat, blir detta ett problem.

I det här fallet kan "gratis laddning" på flygplatsen leda till kontostöld, men vem behöver det?
Från dessa loggar kan vi extrahera:

  • client_id и apikeykrävs för att komma åt api;
  • Användarbehörighets-URL (konstigt, men det finns inget i arkivet om den här metoden, den kanske inte tillhandahålls?)

Det var så det gick till. Baserat på denna lilla forskning pågår redan arbetet med ett litet projekt - vår egen implementering av en mobilapplikation. Jag ber de som vill hjälpa till att skriva ett meddelande, och alla andra – att rösta (för jag vill förstå om någon behöver detta).

Tack för din uppmärksamhet!

Endast registrerade användare kan delta i undersökningen. Logga in, Snälla du.

Använder du mobilapplikationen Habr?

  • Ja, jag använder den, jag är nöjd med den

  • Ja, jag använder det, applikationen orsakar besvär

  • Nej, jag använder webbversionen på min telefon

  • Nej, jag använder Habr från min dator

357 användare röstade. 30 användare avstod från att rösta.

Källa: will.com

Lägg en kommentar