(Не)афіцыйнае прыкладанне Хабра - HabrApp 2.0: атрыманне доступу

Адным цяжкім і ўжо парадкам дакучлівым вечарам, я, гартаючы афіцыйнае дадатак хабра, у які раз загінаў пальцы, па адным за кожную непрацоўную фічу. Тут, напрыклад, нельга пракаментаваць, тут адмаўляюць у праве голаса, і ўвогуле, чаму не відаць формул на экране?

(Не)афіцыйнае прыкладанне Хабра - HabrApp 2.0: атрыманне доступу
Было вырашана: трэба нешта зручнае, прыемнае, сваё. Што наконт свайго прыкладання для Хабра?
Давайце, для разумення сітуацыі, прывяду некалькі скрыншотаў.

(Не)афіцыйнае прыкладанне Хабра - HabrApp 2.0: атрыманне доступуНеяк так выглядае гэта - оф. дадатак habr.com

Спіс «нязручнасцяў»

  • Нельга ацаніць публікацыю, рэйтынг якой адрозны ад 0
  • Не заўсёды можна напісаць каментар
  • Не працуюць апытанні
  • У цёмнай тэме не відаць формул (чорнае на чорным)
  • Даступныя не ўсе закладкі

Так, прыкладанне не абнаўлялі са жніўня мінулага гады, але ўсё роўна дрэнна. Увогуле трэба выпраўляць.

Частка першая. У пошуках доступу.

Хуткі запыт да Google "habrahabr API" выдае ўжо парадкам састарэлы рэпазітар на гітхабе, які не абнаўляўся з 21 лістапада 2016, а гэта, на хвіліначку, два з паловай гады.

Не звяртаючы ўвагі на тое, што гэта – PHP, гартаем уніз і чытэльны:

Атрыманне ідэнтыфікатара прыкладання

Скарыстаўшыся гэтай формай на Хабрахабры, трэба коратка апісаць сутнасць новага прыкладання і мэта, для якой яму патрэбен API.

Не пытанне, калі трэба атрымаць доступ, значыць трэба. Пішам ліст (у скарачэнні):

ліст

Ёсць жаданне зрабіць прыкладанне для Хабра на аснове PWA. Прычын гэтаму некалькі. 

Першая і самая зразумелая: прыкладанне для Android не задавальняе маім персанальным патрабаванням.

Другая: не хапае натыўных апавяшчэнняў аб усялякіх рэчах, якія звычайна прыходзяць на пошту (каментары, напрыклад).

Трэцяя: персанальныя дайджэсты (як далягляд) па якія цікавяць мяне людзям/хабам, улічваючы мае інтарэсы.

Адказ, вядома, быў не вельмі прыемным, але хоць сумленным:

Нажаль, доступ да нашага API у сапраўдны момант не падаецца. Мы плануем аднавіць прадастаўленне доступу пасля таго як скончым дапрацоўку API, але якіх-небудзь дакладных дат у нас пакуль няма, т.я. у дадзены момант мы занятыя рашэннем іншых прыярытэтных задач.

«Добра, не бяда! Што-небудзь прыдумаем! - сказаў я сабе, і пачаў шукаць.

Частка другая. Глыбокія раскопкі.

Зыходзячы з логікі, калі прыкладанне працуе, то ў яго ёсць доступ да API, і ён зашыты ў дадатак. Давайце аналізаваць.

Так як мы маем справу з трафікам, то Wireshark – наш выбар. Не без пакут падлучыўшы тэлефон да інтэрнэту праз стацыянарны кампутар, адчыняем прыкладанне і глядзім на запыты:

(Не)афіцыйнае прыкладанне Хабра - HabrApp 2.0: атрыманне доступу
Зразумела, што нічога не зразумела

Так, усё зашыфравана, а з крыптаграфіяй важдацца не жадаецца. Тады трэба глядзець унутр самога дадатку.

Дэкампіляваўшы .apk, пачынаем шукаць. Што трэба любому API? Правільна, канчатковая кропка, месца, куды ідуць усе запыты. Гэта напэўна http(s), паспрабуем знайсці "https://":

У файле AuthLinkManager.smali знаходзім

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

Гэта код для віртуальнай машыны Android (Дальвік В.М.), не вельмі зразумелы для чалавека, але ўсё ж дастаткова інфарматыўны. Тры гэтыя канстанты, мяркуючы па іх зместу і назве, а таксама GitHub-рэпазіторыю, выкарыстоўваюцца для запыту токена доступу метадам GET.

Глядзім далей. Наступным у пошуку трапляецца файл NetworkModule.smali:

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

А вось і месца, куды трэба звяртацца запытамі!

Для нармальнай працы самапіснага кліента засталося высветліць толькі адну рэч. client_id, Што хутчэй за ўсё з'яўляецца унікальным ідэнтыфікатарам дадатку.

Аднак пошукі гэтага тэксту ў зыходніках да знаходжаньня рэлевантнай інфармацыі не прывялі…

Але раптам у адным файле вочы зачапіліся за цікавыя радкі:

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

Гэта, як можна зразумець, запіс у лог. Але запіс чаго?

Частка трэцяя. Вось дык логі!

Выкарыстоўваны adb logcat для прагляду логаў дадатку.

(Не)афіцыйнае прыкладанне Хабра - HabrApp 2.0: атрыманне доступу

Нечакана, але логі аказаліся яшчэ больш падрабязнымі, чым чакалася.

Тут ёсць не толькі патрэбны нам client_id, Але і жэтон карыстальніка/прыкладанні, а таксама лагін и пароль адкрытым тэкстам!

Трохі тэорый змовыСама па сабе прысутнасць а логах лагіна і пароля нічым не шкодзіць, бо гэтыя логі можна прачытаць толькі маючы або рут-правы, або падлучэнне праз adb. Але з-за таго, што сярод людзей, якія чытаюць Хабр, ёсць распрацоўшчыкі на андроіда, у якіх можа быць уключана адладка, гэта становіцца праблемай.

У такім выпадку "бясплатная зарадка" ў аэрапорце можа абярнуцца ўгонам акаўнта, хоць каму ён патрэбен?
З гэтых логаў можна вынесці:

  • client_id и apikey, неабходныя для доступу да АПА;
  • URL аўтарызацыі карыстальніка (дзіўна, але ў рэпазітары пра гэты метад няма нічога, можа, не прадугледжана?)

Вось так і атрымалася. На базе гэтага маленечкага даследавання ўжо вядзецца праца над невялікім праектам – уласнай рэалізацыяй мабільнага прыкладання. Жадаючых дапамагчы прашу напісаць у паведамленні, а ўсіх астатніх - прагаласаваць (бо хочацца зразумець, ці трэба гэта каму-небудзь).

Дзякуй за ўвагу!

Толькі зарэгістраваныя карыстачы могуць удзельнічаць у апытанні. Увайдзіце, Калі ласка.

Ці карыстаецеся вы мабільным дадаткам Хабра?

  • Так, карыстаюся, мяне ўсё задавальняе

  • Так, карыстаюся, прыкладанне дастаўляе нязручнасці

  • Не, карыстаюся вэб-версіяй на тэлефоне

  • Не, карыстаюся Хабрам з кампутара

Прагаласавалі 357 карыстальнікаў. Устрымаліся 30 карыстальнікаў.

Крыніца: habr.com

Дадаць каментар