(Не)офіційний додаток Хабра — HabrApp 2.0: отримання доступу

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

(Не)офіційний додаток Хабра — HabrApp 2.0: отримання доступу
Було вирішено: потрібне щось зручне, приємне, своє. Що щодо своєї програми для Хабра?
Давайте для розуміння ситуації наведу кілька скріншотів.

(Не)офіційний додаток Хабра — HabrApp 2.0: отримання доступуЯкось так виглядає це - оф. додаток habr.com

Список «незручностей»

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

Так, програму не оновлювали з серпня минулого року, але все одно погано. Загалом треба виправляти.

Частина перша. У пошуках доступу.

Швидкий запит до Google "habrahabr API" видає вже порядком застарілий репозиторій на гітхабі, що не оновлювався з 21 листопада 2016, а це, на хвилиночку, два з половиною роки.

Не зважаючи на те, що це - PHP, гортаємо вниз і читаємо:

Отримання ідентифікатора програми

Скориставшись цією формою на Хабрахабрі, потрібно коротко описати суть нового додатка та мету, для якої йому потрібен API.

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

Лист

Є бажання зробити додаток для хабра на основі PWA. Причин тому кілька. 

Перша і найзрозуміліша: додаток для Android не задовольняє моїм персональним вимогам.

Друга: не вистачає нативних повідомлень про всілякі речі, які зазвичай приходять на пошту (коментарі, наприклад).

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

Відповідь, звичайно, була не дуже приємною, але хоч чесною:

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

«Гаразд, не біда! Що небудь придумаємо!" — сказав я собі і почав шукати.

Частина друга. Глибокі розкопки.

Виходячи з логіки, якщо програма працює, то у нього є доступ до API, і він зашитий у програму. Давайте аналізувати.

Оскільки ми маємо справу з трафіком, Wireshark — наш вибір. Не без мук підключивши телефон до інтернету через стаціонарний комп'ютер, відкриваємо програму та дивимося на запити:

(Не)офіційний додаток Хабра — 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 для перегляду логів програми.

(Не)офіційний додаток Хабра — HabrApp 2.0: отримання доступу

Несподівано, але логи виявилися ще докладнішими, ніж очікувалося.

Тут є не лише потрібний нам client_id, Але й жетон користувача/програми, а також логін и пароль відкритим текстом!

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

У такому разі «безкоштовна зарядка» в аеропорту може обернутися викраденням облікового запису, хоча кому він потрібен?
З цих ліг можна винести:

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

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

Дякуємо за увагу!

Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.

Чи користуєтеся ви мобільним додатком Хабра?

  • Так, користуюся, мене все влаштовує

  • Так, користуюся, додаток завдає незручностей

  • Ні, користуюсь веб-версією на телефоні

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

Проголосували 357 користувачів. Утрималися 30 користувачів.

Джерело: habr.com

Додати коментар або відгук