(Не)официјална апликација Habr - HabrApp 2.0: стекнување пристап

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

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

(Не)официјална апликација Habr - HabrApp 2.0: стекнување пристапКак-то так выглядит овој — оф. приложение habr.com

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

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

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

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

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

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

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

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

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

Пишување

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

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

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

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

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

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

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

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

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

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

(Не)официјална апликација Habr - 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 для просмотра логов приложения.

(Не)официјална апликација Habr - HabrApp 2.0: стекнување пристап

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

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

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

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

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

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

Ви благодариме!

Само регистрирани корисници можат да учествуваат во анкетата. Најави се, вие сте добредојдени.

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

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

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

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

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

Гласаа 357 корисници. 30 корисници беа воздржани.

Извор: www.habr.com

Додадете коментар