(Ne)oficiali „Habr“ programa – „HabrApp 2.0“: prieiga

Vieną tingusį ir jau gana nuobodų vakarą aš, vartydamas pareigūnas Habr aplikacija, dar kartą sulenkiau pirštus, po vieną kiekvienai neveikiančiai funkcijai. Čia pvz negali komentuoti, čia tau atimama balsavimo teisė ir apskritai kodėl ekrane nesimato formulės?

(Ne)oficiali „Habr“ programa – „HabrApp 2.0“: prieiga
Buvo nuspręsta: reikia kažko patogaus, malonaus, kažko savo. O kaip jūsų prašymas gauti Habrą?
Leiskite man pateikti keletą ekrano kopijų, kad suprastumėte situaciją.

(Ne)oficiali „Habr“ programa – „HabrApp 2.0“: prieigaAtrodo maždaug taip tai - apie. habr.com programa

„nepatogumų“ sąrašas

  • Negalite vertinti leidinio, kurio įvertinimas skiriasi nuo 0
  • Ne visada įmanoma parašyti komentarą
  • Apklausos neveikia
  • Formulės nematomos tamsioje temoje (juoda ant juodo)
  • Galimos ne visos žymės

Taip, programėlė nebuvo atnaujinta nuo praėjusių metų rugpjūčio, bet ji vis tiek bloga. Apskritai tai reikia pataisyti.

Pirma dalis. Ieškau prieigos.

Greita „Google“ užklausa "habrahabr API" sako, kad tai jau gana pasenusi saugykla „Github“, nuo tada neatnaujinta Lapkritis 21 2016, ir tai trumpam, dveji su puse metų.

Nepaisydami to, kad tai yra PHP, slinkite žemyn ir perskaitykite:

Programos ID gavimas

Pasinaudojus šią formą apie Habrahabr, turite trumpai apibūdinti naujosios programos esmę ir tikslą, kuriam jai reikalinga API.

Nėra jokios abejonės, jei jums reikia gauti prieigą, tada jums jos reikia. Rašome laišką (sutrumpintai):

Laiškas

Yra noras pateikti paraišką dėl Habr pagal PWA. Tam yra keletas priežasčių. 

Pirmas ir akivaizdžiausias: Android programa neatitinka mano asmeninių reikalavimų.

Antra: nėra pakankamai vietinių pranešimų apie įvairius dalykus, kurie paprastai ateina el. paštu (pavyzdžiui, komentarai).

Trečia: asmeniniai apžvalgos (kaip perspektyva) apie mane dominančius žmones / centrus, atsižvelgiant į mano interesus.

Atsakymas, žinoma, nebuvo labai malonus, bet bent jau nuoširdus:

Deja, prieiga prie mūsų API šiuo metu nepasiekiama. Kai baigsime kurti API, planuojame atnaujinti prieigą, tačiau tikslių datų dar neturime, nes Šiuo metu esame užsiėmę kitų prioritetinių užduočių sprendimu.

"Gerai, be problemų! Mes ką nors sugalvosime!" - pasakiau sau ir pradėjau ieškoti.

Antra dalis. Gilūs kasinėjimai.

Remiantis logika, jei programa veikia, ji turi prieigą prie API ir yra prijungta prie programos. Paanalizuokime.

Kadangi mes susiduriame su eismu, Wireshark yra mūsų pasirinkimas. Ne be skausmo, prijungę telefoną prie interneto per stalinį kompiuterį, atidarome programą ir žiūrime į užklausas:

(Ne)oficiali „Habr“ programa – „HabrApp 2.0“: prieiga
Aišku, kad niekas neaišku

Taip, viskas užšifruota, bet nenoriu maišytis su kriptografija. Tada reikia pažvelgti į pačią programą.

Dekompiliuota . Apžiūros, pradėkime ieškoti. Ko reikia bet kokiai API? Teisingai, vertinamoji baigtis, vieta, kur pateikiami visi prašymai. Tai tikriausiai yra http, pabandykime rasti „https://“:

Byloje AuthLinkManager.smali mes randame

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

Tai yra „Android“ virtualios mašinos kodas (Dalvikas VM), nelabai suprantamas žmonėms, bet vis tiek gana informatyvus. Šios trys konstantos, sprendžiant iš jų turinio ir pavadinimo, taip pat pagal „GitHub“ saugyklą, naudojamos prašyti prieigos prieigos rakto naudojant metodą GET.

Pažiūrėkime toliau. Failas, kuris pasirodo toliau paieškoje, yra NetworkModule.smali:

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

Ir čia yra vieta, kur eiti su savo pageidavimais!

Kad savarankiškai parašytas klientas veiktų tinkamai, belieka išsiaiškinti vieną dalyką - client_id, kuris greičiausiai yra unikalus programos identifikatorius.

Tačiau ieškant šio teksto šaltinio kode atitinkamos informacijos rasti nepavyko...

Bet staiga vienoje iš failų mano akys užkliuvo už įdomių eilučių:

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

Tai, kaip jūs suprantate, yra žurnalo įrašas. Bet ką įrašyti?

Trečia dalis. Tai rąstai!

Mes naudojame adb logcat norėdami peržiūrėti programų žurnalus.

(Ne)oficiali „Habr“ programa – „HabrApp 2.0“: prieiga

Netikėtai žurnalai pasirodė net išsamesni, nei tikėtasi.

Čia mes turime ne tik tai, ko mums reikia client_idBet žetonu vartotojas / programa ir prisijungti и slaptažodis aiškiu tekstu!

Kai kurios sąmokslo teorijosVien prisijungimo vardo ir slaptažodžio buvimas žurnaluose nieko nekenkia, nes šiuos žurnalus galima skaityti tik turint root teises arba prisijungus per adb. Tačiau dėl to, kad tarp „Habr“ skaitančių žmonių yra „Android“ kūrėjų, kuriems gali būti įjungtas derinimas, tai tampa problema.

Tokiu atveju „nemokamas apmokestinimas“ oro uoste gali baigtis sąskaitos vagyste, bet kam to reikia?
Iš šių žurnalų galime išgauti:

  • client_id и apikeyreikalinga prieiga API;
  • Vartotojo prieigos URL (keista, bet saugykloje apie šį metodą nieko nėra, gal jis nepateiktas?)

Taip ir atsitiko. Remiantis šiuo nedideliu tyrimu, jau vyksta nedidelis projektas – mūsų pačių įdiegtas mobiliosios aplikacijos. Norinčių padėti prašau parašyti žinutę, o visų kitų - balsuoti (nes noriu suprasti ar kam to reikia).

Dėkojame už dėmesį!

Apklausoje gali dalyvauti tik registruoti vartotojai. Prisijungti, Prašau.

Ar naudojate Habr mobiliąją programą?

  • Taip, naudoju, esu patenkinta

  • Taip, naudoju, aplikacija sukelia nepatogumų

  • Ne, aš naudoju žiniatinklio versiją savo telefone

  • Ne, naudoju Habr iš savo kompiuterio

Balsavo 357 vartotojų. 30 vartotojai susilaikė.

Šaltinis: www.habr.com

Добавить комментарий