(Un) aloaia Habr talosaga - HabrApp 2.0: maua avanoa

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

(Un) aloaia Habr talosaga - HabrApp 2.0: maua avanoa
Было решено: нужно что-то удобное, приятное, своё. Что насчёт своего приложения для Хабра?
Давайте, для понимания ситуации, приведу несколько скриншотов.

(Un) aloaia Habr talosaga - HabrApp 2.0: maua avanoaКак-то так выглядит na — оф. приложение habr.com

Список «неудобств»

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

Да, приложение не обновляли с августа прошлого года, но всё равно плохо. В общем, надо исправлять.

Часть первая. В поисках доступа.

Быстрый запрос к Google «habrahabr API» выдает уже порядком устаревший faleteuoloa на гитхабе, не обновлявшийся с Novema 21 2016, а это, на минуточку, два с половиной года.

Не обращая внимания на то, что это — PHP, листаем вниз и читаем:

Получение идентификатора приложения

Fa'aaoga tatau этой формой на Хабрахабре, нужно кратко описать суть нового приложения и цель, для которой ему нужен API.

Не вопрос, если надо получать доступ, значит надо. Пишем письмо (в сокращении):

Tusi

Есть желание сделать приложение для Хабра на основе PWA. Причин этому несколько. 

Первая и самая понятная: приложение для Android не удовлетворяет моим персональным требованиям.

Вторая: не хватает нативных уведомлений о всяческих вещах, которые обычно приходят на почту (комментарии, например).

Третья: персональные дайджесты (как перспектива) по интересующим меня людям/хабам, учитывая мои интересы.

Ответ, конечно, был не очень приятным, но хоть честным:

К сожалению, доступ к нашему API в настоящий момент не предоставляется. Мы планируем возобновить предоставление доступа после того как закончим доработку API, но каких-либо точных дат у нас пока нет, т.к. в данный момент мы заняты решением других приоритетных задач.

«Ладно, не беда! Что-нибудь придумаем!» — сказал я себе, и начал искать.

Часть вторая. Глубокие раскопки.

Исходя из логики, если приложение работает, то у него есть доступ к API, и он зашит в приложение. Давайте анализировать.

Так как мы имеем дело с трафиком, то Wireshark — наш выбор. Не без мучений подключив телефон к интернету через стационарный компьютер, открываем приложение и смотрим на запросы:

(Un) aloaia Habr talosaga - HabrApp 2.0: maua avanoa
Понятно, что ничего не понятно

Да, всё зашифровано, а с криптографией возиться не хочется. Тогда надо смотреть внутрь самого приложения.

Декомпилировав .apk, начинаем искать. Что нужно любому API? Правильно, pito i luga, место, куда идут все запросы. Это наверняка http(s), попробуем найти «https://»:

I le faila 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 (Dalvik VM), не очень понятный для человека, но всё же достаточно информативный. Три эти константы, судя по их содержанию и названию, а также 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

Это, как можно понять, запись в лог. Но запись чего?

Часть третья. Вот так логи!

Matou te faaaogaina adb logcat для просмотра логов приложения.

(Un) aloaia Habr talosaga - HabrApp 2.0: maua avanoa

Неожиданно, но логи оказались ещё более подробными, чем ожидалось.

Здесь есть не только нужный нам client_idae fa'ailoga пользователя/приложения, а также логин и password открытым текстом!

Немного теорий заговораСамо по себе присутствие а логах логина и пароля ничем не вредит, так как эти логи можно прочитать лишь имея либо рут-права, либо подключение через adb. Но из-за того, что среди людей, читающих Хабр, есть разработчики на андроид, у которых может быть включена отладка, это становится проблемой.

В таком случае «бесплатная зарядка» в аэропорту может обернуться угоном аккаунта, хотя кому он нужен?
Из этих логов можно вынести:

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

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

Faafetai mo lau gauai!

Na'o tagata fa'aigoaina e mafai ona auai i le su'esu'ega. Saini ese j, faʻamolemole.

Пользуетесь ли вы мобильным приложением Хабра?

  • Да, пользуюсь, меня всё устраивает

  • Да, пользуюсь, приложение доставляет неудобства

  • Нет, пользуюсь веб-версией на телефоне

  • Нет, пользуюсь Хабром с компьютера

357 tagata fa'aoga na palota. 30 tagata fa'aoga na le fa'aaogaina.

puna: www.habr.com

Faaopoopo i ai se faamatalaga