(Un)opisyal na Habr application - HabrApp 2.0: pagkakaroon ng access

Isang matamlay at medyo boring na gabi, ako, umalis opisyal Habr application, muli kong binaluktot ang aking mga daliri, isa para sa bawat hindi gumaganang tampok. Dito, halimbawa, hindi ka maaaring magkomento, dito ay pinagkaitan ka ng karapatang bumoto, at sa pangkalahatan, bakit hindi nakikita ang mga formula sa screen?

(Un)opisyal na Habr application - HabrApp 2.0: pagkakaroon ng access
Napagpasyahan: kailangan namin ng isang bagay na komportable, kaaya-aya, isang bagay na sarili namin. Paano ang iyong sariling aplikasyon para sa Habr?
Hayaan akong bigyan ka ng ilang mga screenshot upang maunawaan ang sitwasyon.

(Un)opisyal na Habr application - HabrApp 2.0: pagkakaroon ng accessParang ganito это - ng. habr.com application

Listahan ng "mga abala"

  • Hindi mo maaaring i-rate ang isang publikasyon na ang rating ay iba sa 0
  • Hindi laging posible na magsulat ng komento
  • Hindi gumagana ang mga botohan
  • Ang mga formula ay hindi nakikita sa madilim na tema (itim sa itim)
  • Hindi lahat ng bookmark ay available

Oo, ang app ay hindi na-update mula noong Agosto noong nakaraang taon, ngunit ito ay masama pa rin. Sa pangkalahatan, kailangan itong ayusin.

Unang bahagi. Naghahanap ng access.

Mabilis na Google Query "habrahabr API" ang sabi nito ay medyo luma na imbakan sa Github, hindi na-update mula noon Nobyembre 21 2016, at ito, saglit, dalawa't kalahating taon.

Hindi pinapansin ang katotohanan na ito ay PHP, mag-scroll pababa at basahin ang:

Pagkuha ng Application ID

Sinasamantala ang form na ito sa Habrahabr, kailangan mong maikling ilarawan ang kakanyahan ng bagong application at ang layunin kung saan kailangan nito ng API.

Walang tanong, kung kailangan mong makakuha ng access, kailangan mo ito. Sumulat kami ng isang liham (pinaikling):

Isang liham

May pagnanais na gumawa ng aplikasyon para sa Habr batay sa PWA. Mayroong ilang mga dahilan para dito. 

Ang una at pinaka-halata: ang Android application ay hindi nakakatugon sa aking mga personal na kinakailangan.

Pangalawa: walang sapat na katutubong notification tungkol sa lahat ng uri ng mga bagay na kadalasang dumarating sa pamamagitan ng email (mga komento, halimbawa).

Pangatlo: mga personal na digest (bilang isang pananaw) sa mga tao/hub na interesado ako, na isinasaalang-alang ang aking mga interes.

Ang sagot, siyempre, ay hindi masyadong kaaya-aya, ngunit hindi bababa sa tapat:

Sa kasamaang palad, kasalukuyang hindi available ang access sa aming API. Plano naming ipagpatuloy ang pagbibigay ng access pagkatapos naming tapusin ang API, ngunit wala pa kaming eksaktong petsa, dahil Kasalukuyan kaming abala sa paglutas ng iba pang priyoridad na gawain.

"Okay walang problema! May gagawin tayo!" - sabi ko sa sarili ko at nagsimulang tumingin.

Ikalawang bahagi. Malalim na paghuhukay.

Batay sa lohika, kung tumatakbo ang application, mayroon itong access sa API, at naka-hardwired ito sa application. Pag-aralan natin.

Dahil nakikitungo kami sa trapiko, ang Wireshark ang aming pinili. Hindi nang walang ilang mga pasakit, na nakakonekta ang telepono sa Internet sa pamamagitan ng isang desktop computer, binuksan namin ang application at tinitingnan ang mga kahilingan:

(Un)opisyal na Habr application - HabrApp 2.0: pagkakaroon ng access
Malinaw na walang malinaw

Oo, lahat ay naka-encrypt, ngunit hindi ko nais na gulo sa cryptography. Pagkatapos ay kailangan mong tumingin sa loob ng application mismo.

Na-decompile .apk, simulan na nating maghanap. Ano ang kailangan ng anumang API? tama, endpoint, ang lugar kung saan napupunta ang lahat ng kahilingan. Marahil ito ay http(s), subukan nating hanapin ang "https://":

Nasa file AuthLinkManager.smali hanapin

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

Ito ang code para sa Android virtual machine (Dalvik VM), hindi masyadong naiintindihan para sa mga tao, ngunit medyo nagbibigay-kaalaman. Ang tatlong mga constant na ito, batay sa kanilang nilalaman at pangalan, pati na rin ang GitHub repository, ay ginagamit upang humiling ng access token gamit ang pamamaraan. GET.

Tingnan pa natin. Ang file na susunod na lalabas sa paghahanap ay NetworkModule.smali:

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

At narito ang lugar upang puntahan ang iyong mga kahilingan!

Para gumana nang maayos ang self-written na kliyente, isang bagay na lang ang natitira upang malaman - client_id, na malamang na isang natatanging identifier para sa application.

Gayunpaman, ang paghahanap para sa tekstong ito sa source code ay hindi humantong sa paghahanap ng may-katuturang impormasyon...

Ngunit biglang sa isa sa mga file ay nahagip ng aking mga mata ang ilang mga kawili-wiling linya:

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

Ito, tulad ng naiintindihan mo, ay isang log entry. Ngunit nagre-record ng ano?

Ikatlong bahagi. Ito ang mga tala!

Gumamit adb logcat upang tingnan ang mga log ng aplikasyon.

(Un)opisyal na Habr application - HabrApp 2.0: pagkakaroon ng access

Sa hindi inaasahan, ang mga log ay naging mas detalyado kaysa sa inaasahan.

Narito mayroon tayo hindi lamang kung ano ang kailangan natin client_idpero token user/application, at login ΠΈ password sa simpleng text!

Ang ilang mga teorya ng pagsasabwatanAng pagkakaroon lamang ng isang pag-login at password sa mga log ay hindi nakakapinsala sa anuman, dahil ang mga log na ito ay mababasa lamang gamit ang alinman sa mga karapatan sa ugat o isang koneksyon sa pamamagitan ng adb. Ngunit dahil sa katotohanan na sa mga taong nagbabasa ng Habr mayroong mga developer ng Android na maaaring pinagana ang pag-debug, nagiging problema ito.

Sa kasong ito, ang "libreng singilin" sa paliparan ay maaaring magresulta sa pagnanakaw ng account, ngunit sino ang nangangailangan nito?
Mula sa mga log na ito maaari nating kunin ang:

  • client_id ΠΈ apikeykinakailangan upang ma-access api;
  • URL ng awtorisasyon ng user (kakaiba, ngunit wala sa repositoryo tungkol sa pamamaraang ito, marahil hindi ito ibinigay?)

Ganun ang nangyari. Batay sa maliit na pananaliksik na ito, isinasagawa na ang trabaho sa isang maliit na proyekto - ang sarili nating pagpapatupad ng isang mobile application. Hinihiling ko sa mga nais tumulong na magsulat ng isang mensahe, at lahat ng iba pa - na bumoto (dahil gusto kong maunawaan kung may nangangailangan nito).

Salamat sa iyo!

Ang mga rehistradong user lamang ang maaaring lumahok sa survey. Mag-sign in, pakiusap

Ginagamit mo ba ang Habr mobile application?

  • Oo, ginagamit ko ito, masaya ako dito

  • Oo, ginagamit ko ito, ang application ay nagdudulot ng abala

  • Hindi, ginagamit ko ang web version sa aking telepono

  • Hindi, ginagamit ko ang Habr mula sa aking computer

357 user ang bumoto. 30 na user ang umiwas.

Pinagmulan: www.habr.com

Magdagdag ng komento