(Ne)oficiálna aplikácia Habr - HabrApp 2.0: získanie prístupu

V jeden mdlý a už aj tak dosť nudný večer listujem ja úradník Aplikácia Habr, ešte raz som ohol prsty, jeden pre každú nefunkčnú funkciu. Tu napríklad nemôžete komentovať, tu je vám odopreté právo voliť a vo všeobecnosti, prečo nie sú vzorce viditeľné na obrazovke?

(Ne)oficiálna aplikácia Habr - HabrApp 2.0: získanie prístupu
Bolo rozhodnuté: potrebovali sme niečo pohodlné, príjemné, niečo vlastné. Ako je to s vlastnou aplikáciou pre Habr?
Dovoľte mi, aby som vám dal niekoľko snímok obrazovky, aby ste pochopili situáciu.

(Ne)oficiálna aplikácia Habr - HabrApp 2.0: získanie prístupuVyzerá asi takto это - z aplikácia habr.com

Zoznam "nepríjemností"

  • Nemôžete ohodnotiť publikáciu, ktorej hodnotenie je iné ako 0
  • Nie vždy je možné napísať komentár
  • Ankety nefungujú
  • Vzorce nie sú viditeľné v tmavom motíve (čierna na čiernej)
  • Nie všetky záložky sú dostupné

Áno, aplikácia nebola aktualizovaná od augusta minulého roka, no stále je na tom zle. Vo všeobecnosti to treba opraviť.

Časť prvá. Hľadá sa prístup.

Rýchly dopyt Google "habrahabr API" hovorí, že je to už dosť zastarané Úložisko na Github, odvtedy neaktualizovaný Novembra 21 2016a toto na chvíľu, dva a pol roka.

Ignorujte skutočnosť, že ide o PHP, prejdite nadol a prečítajte si:

Získanie ID aplikácie

Využívanie výhod tento formulár na Habrahabre treba stručne popísať podstatu novej aplikácie a účel, na ktorý potrebuje API.

Niet pochýb o tom, že ak potrebujete získať prístup, potom ho potrebujete. Píšeme list (skrátene):

písmeno

Existuje túžba podať žiadosť pre Habr na základe PWA. Má to viacero dôvodov. 

Prvý a najzrejmejší: Android aplikácia nespĺňa moje osobné požiadavky.

Po druhé: nie je dostatok natívnych upozornení na najrôznejšie veci, ktoré zvyčajne prichádzajú e-mailom (napríklad komentáre).

Po tretie: osobné prehľady (ako perspektíva) o ľuďoch/centrách, ktoré ma zaujímajú, berúc do úvahy moje záujmy.

Odpoveď, samozrejme, nebola veľmi príjemná, ale aspoň úprimná:

Bohužiaľ, prístup k nášmu API momentálne nie je k dispozícii. Plánujeme obnoviť poskytovanie prístupu po dokončení finalizácie rozhrania API, ale zatiaľ nemáme presné dátumy, pretože Momentálne sme zaneprázdnení riešením iných prioritných úloh.

"V poriadku, žiadny problém! Niečo vymyslíme!" - povedal som si a začal hľadať.

Druhá časť. Hlboké výkopy.

Na základe logiky, ak je aplikácia spustená, potom má prístup k API a je pevne zapojená do aplikácie. Poďme analyzovať.

Keďže sa zaoberáme dopravou, Wireshark je naša voľba. Nie bez problémov, po pripojení telefónu k internetu cez stolný počítač otvoríme aplikáciu a pozrieme sa na požiadavky:

(Ne)oficiálna aplikácia Habr - HabrApp 2.0: získanie prístupu
Je jasné, že nič nie je jasné

Áno, všetko je zašifrované, ale nechcem sa pohrávať s kryptografiou. Potom sa musíte pozrieť do samotnej aplikácie.

Dekompilovaný . APK, začnime hľadať. Čo potrebuje nejaké API? Správny, koncový bod, miesto, kam smerujú všetky žiadosti. Toto je pravdepodobne http(s), skúsme nájsť „https://“:

V súbore AuthLinkManager.smali nájdeme

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

Toto je kód pre virtuálny stroj Android (Dalvik VM), pre ľudí nie príliš zrozumiteľné, ale stále dosť informatívne. Tieto tri konštanty, súdiac podľa ich obsahu a názvu, ako aj úložisko GitHub, sa používajú na vyžiadanie prístupového tokenu pomocou metódy GET.

Pozrime sa ďalej. Súbor, ktorý sa pri vyhľadávaní objaví ako ďalší, je NetworkModule.smali:

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

A tu je miesto, kam ísť so svojimi požiadavkami!

Aby klient, ktorý si sám napísal, správne fungoval, zostáva už len zistiť jednu vec – client_id, čo je s najväčšou pravdepodobnosťou jedinečný identifikátor aplikácie.

Hľadanie tohto textu v zdrojovom kóde však neviedlo k nájdeniu relevantných informácií...

Ale zrazu v jednom zo súborov moje oči zachytili niekoľko zaujímavých riadkov:

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

Toto, ako viete, je záznam denníka. Ale nahrávať čo?

Časť tretia. Toto sú logá!

Používame adb logcat na zobrazenie denníkov aplikácií.

(Ne)oficiálna aplikácia Habr - HabrApp 2.0: získanie prístupu

Nečakane sa ukázalo, že protokoly sú ešte podrobnejšie, ako sa očakávalo.

Tu máme nielen to, čo potrebujeme client_idavšak žetón užívateľ/aplikácia a prihlásenie и пароль v čistom texte!

Nejaké konšpiračné teórieSamotná prítomnosť prihlasovacieho mena a hesla v protokoloch nič nepokazí, pretože tieto protokoly je možné čítať iba s právami root alebo s pripojením cez adb. Ale vzhľadom na skutočnosť, že medzi ľuďmi, ktorí čítajú Habr, sú vývojári Androidu, ktorí môžu mať povolené ladenie, to sa stáva problémom.

V tomto prípade môže „bezplatné nabíjanie“ na letisku viesť ku krádeži účtu, ale kto to potrebuje?
Z týchto protokolov môžeme extrahovať:

  • client_id и apikeypotrebné na prístup api;
  • Adresa URL autorizácie používateľa (čudné, ale v úložisku nie je nič o tejto metóde, možno nie je poskytnutá?)

Tak sa to stalo. Na základe tohto malého výskumu sa už pracuje na malom projekte – vlastnej implementácii mobilnej aplikácie. Žiadam tých, ktorí chcú pomôcť, aby napísali správu a všetkých ostatných - aby hlasovali (pretože chcem pochopiť, či to niekto potrebuje).

Ďakujem vám za pozornosť!

Do prieskumu sa môžu zapojiť iba registrovaní užívatelia. Prihlásiť saProsím.

Používate mobilnú aplikáciu Habr?

  • Áno, používam ho, som s ním spokojný

  • Áno, používam to, aplikácia spôsobuje nepríjemnosti

  • Nie, používam webovú verziu v telefóne

  • Nie, používam Habr z počítača

Hlasovalo 357 užívateľov. 30 užívateľov sa zdržalo hlasovania.

Zdroj: hab.com

Pridať komentár