Как стать автором
Обновить

(Не)официальное приложение Хабра — HabrApp 2.0: получение доступа

Время на прочтение3 мин
Количество просмотров17K

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



Было решено: нужно что-то удобное, приятное, своё. Что насчёт своего приложения для Хабра?
Давайте, для понимания ситуации, приведу несколько скриншотов.

Как-то так выглядит это — оф. приложение habr.com

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

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

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


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

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


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



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


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


Письмо

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


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


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


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


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


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


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


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


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


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


Понятно, что ничего не понятно

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

Декомпилировав .apk, начинаем искать. Что нужно любому API? Правильно, endpoint, место, куда идут все запросы. Это наверняка 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 (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

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


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


Используем adb logcat для просмотра логов приложения.



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


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


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

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

Из этих логов можно вынести:

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

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

Спасибо за внимание!
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Пользуетесь ли вы мобильным приложением Хабра?
5.55% Да, пользуюсь, меня всё устраивает49
26.27% Да, пользуюсь, приложение доставляет неудобства232
34.88% Нет, пользуюсь веб-версией на телефоне308
33.3% Нет, пользуюсь Хабром с компьютера294
Проголосовали 883 пользователя. Воздержались 77 пользователей.
Теги:
Хабы:
Всего голосов 67: ↑65 и ↓2+63
Комментарии76

Публикации

Истории

Работа

Java разработчик
319 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн