Ngwa Habr gọọmentị (Un) - HabrApp 2.0: ịnweta ohere

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

Ngwa Habr gọọmentị (Un) - HabrApp 2.0: ịnweta ohere
Было решено: нужно что-то удобное, приятное, своё. Что насчёт своего приложения для Хабра?
Давайте, для понимания ситуации, приведу несколько скриншотов.

Ngwa Habr gọọmentị (Un) - HabrApp 2.0: ịnweta ohereКак-то так выглядит — оф. приложение habr.com

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

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

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

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

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

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

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

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

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

Ide ihe

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

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

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

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

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

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

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

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

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

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

Ngwa Habr gọọmentị (Un) - HabrApp 2.0: ịnweta ohere
O doro anya na ọ dịghị ihe doro anya

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

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

Na faịlụ 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

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

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

Anyị na-eji adb logcat для просмотра логов приложения.

Ngwa Habr gọọmentị (Un) - HabrApp 2.0: ịnweta ohere

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

Здесь есть не только нужный нам client_idMa tọk пользователя/приложения, а также логин и paswọọdụ открытым текстом!

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

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

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

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

Gwa anyị ihe ị ga-eme!

Naanị ndị ọrụ edebanyere aha nwere ike isonye na nyocha a. banye, Biko.

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

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

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

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

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

Ndị ọrụ 357 tụrụ vootu. Ndị ọrụ 30 anabataghị.

isi: www.habr.com

Tinye a comment