(Un)isicelo seHabr esisemthethweni - HabrApp 2.0: ukufumana ukufikelela

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

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

(Un)isicelo seHabr esisemthethweni - HabrApp 2.0: ukufumana ukufikelelaКак-то так выглядит oku — оф. приложение habr.com

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

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

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

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

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

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

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

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

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

Ileta

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

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

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

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

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

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

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

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

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

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

(Un)isicelo seHabr esisemthethweni - HabrApp 2.0: ukufumana ukufikelela
Понятно, что ничего не понятно

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

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

Kwifayile 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 (UDalvik 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

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

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

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

(Un)isicelo seHabr esisemthethweni - HabrApp 2.0: ukufumana ukufikelela

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

Здесь есть не только нужный нам client_idkodwa uphawu пользователя/приложения, а также логин и iphasiwedi открытым текстом!

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

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

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

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

Спасиalu

Ngabasebenzisi ababhalisiweyo kuphela abanokuthatha inxaxheba kuphando. Ngena, ndiyacela.

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

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

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

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

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

Bali-357 abasebenzisi abavotileyo. Abasebenzisi abasi-30 abakhange.

umthombo: www.habr.com

Yongeza izimvo