Одним пасмурным вечером среды, после замечательно проведенного вечера со своей второй половинкой, я захожу на Пикабу полистать, как это обычно бывает, остатки от лучшего, после рабочего дня.
Живу себе, поживаю, снимаю сливки (гусары, цыц) с самых интересных постов, но где-то сворачиваю не туда. Продираясь сквозь дебри сисек, котиков и негатива, я натыкаюсь на комментарии товарища @zexus30, которые выводят меня на ряд его постов о нелегкой судьбе рыцарей свежего, о несправедливости модераторов и всего прочего и мой глаз цепляется конкретно за этот пост.
Сам не знаю почему, но меня зацепила сложившаяся ситуация: рыцарь вручную повторяет одни и те же действия, чтобы обнаружить баяны (с незначительной разницей), борется со злом. Моё увожение.
Даже Ваас охреневает от упорства этих сексуальных молодых людей.
Ведь мы живем в самое лучшее время - компьютеры, автоматизация, ИИ в конце-то концов. А машина, разгребающая говно самостоятельно, помогающая автоматизировать разгребание говна, периодически подвисает (привет, БМ).
Ну вы знаете, как это бывает - вечер, тишина, тихая музычка и просто четыреждыблядское невыносимое желание помочь этим людям в их миссии. Ведь ты ж поХромист; мастер над микроволновками; супер герой в рубашке, пиджаке и трусах; всё можешь, тебе это ничего не стоит. Эдакий супер-пупсик.
И вот, решение принято - буду (пробовать) писать парсер данных сайта и учиться в нейросети (нет).
Как обычно, чукча не писатель, скриншоты снимались на тапок, печенье на тарелочке, чаёк заварен, баянометр молчал орал во всю глотку (прим. простите, только на перепроверке понял, как пошло это выглядит, но мне нравится).
Я являюсь фулл-тайм программистом на С++ с неофициальным опытом лет в 7, у меня на счету уйма начатых и примерно ни одного завершенного проекта, а также полное отсутствие желания работать за бесплатно по своему направлению сверх 8 часов в день. А кодить хочется, майнкрафт С++ это моя жизнь!
Второй пост. Пинайте строго, но себя, если сможете. Правила прочитаны, мотивация есть, большая зеленая кнопка "Добавить пост" найдена. Что может пойти не так? Вперед развлекаться, мы же на развлекательном портале Пикабу!
Цель - написать приложение, облегчающее поиск баянов. Значит, надо как-то выгружать данные с сайта, куда-то их сохранять, далее осуществлять быстрый поиск/сравнение с существующими баянами, затем надо предоставить простой и удобный способ рыцарю обрушить всю свою мощь на баян (ссылка на оригинал + призыв модератора). Звучит просто. <Тут мог бы быть ваш мем с Гарольдом>.
Задача номер раз - выгрузка данных. Если её не получится сделать, то по поводу прочих прелестей можно даже не заморачиваться. Быстрый поиск по ключевым словам дает следующие результаты:
* Публичного API нет;
* Его не предвидится. Наверное;
* Есть парсер страниц на питоне;
* Есть умерший проект pikastat на Go.Чукча в Go не силен, но ключевые слова "http" найдены, так что это вряд ли мне подойдет.
(Чукча не хочет никого обидеть, особенно приверженцев веб-программирования, они тоже люди. У чукчи есть недостатки - он тащится от расширения С++ с помощью какого-нибудь скриптового движка, а чем это отличается от веба - да хз. Биполярочка наше всё).
Очередные костыли? Ура :(
Снова повторяю себе задачу - нужно выгрузить данные с сайта. Вижу 3 способа:
1. Открываю i-ую страницу, обрабатываю её HTML парсером, повторяю процесс N раз;
2. Пользуюсь каким-нибудь API и выгружаю данные быстрее и проще. Внутри теплится надежда, что нормальные пацаны, отвечающие за Android-приложение все-таки не стали писать парсер, а воспользовались только пробросом данных на клиент (а клиент уже рисует красивые элементики с полученными данными);
3. Изымаем сервера. Для этого потребуется ОМОН, чтобы их направить - связи в прокуратуре, Роскомнадзоре, всякие там высокопоставленные друзья...
А точно, друзей же нет. Интроверт, все дела. Усы, дрочило и паспорт гражданина РФ - вот мои документы. Остается два варианта.
Штош. Надо посмотреть, как общается местное приложение с серверами и понять, можно ли это использовать.
Что делает программист С++, когда забывает, как объявить константу встречает что-то новое? Правильно, вспоминает курс компьютерной безопасности из университета, рассылку псевдохакерского журнала в ВК ну и, разумеется, гуглит.
Когда я себе задал вопрос "как ты будешь анализировать трафик приложения на смартфоне?", время тут же остановилось и вьетнамские университетские флешбеки тут же напомнили о векторе атак типа mitm. Окей, гугл, мне же не придется ставить kali linux, чтобы получить доступ к программам-снифферам? Мне тут нахуй не нужон этот ваш линукс, мне есть на что потратить время.
Достаточно быстро нашлась программа mitmproxy, да еще и под Windows, да еще и распространяемая в виде инсталлятора, замечательно! Безопасники и прочие счастливые обладатели мании преследования вошли в чат:
Читаю инструкцию: "бла-бла-бла, установи и запусти, бла-бла-бла, настрой прокси на телефоне, бла-бла-бла". Ну это я умею - не зря школьным сисадмином лямку тянул. 10 минут страха и веб-морда этой штучки заработала. Простенько, почему-то напомнило интерфейс Word.
Далее издевательствам подлежит мой гордый и несломленный айфон хер вам! Только Android, только хардкор!
Настраиваю прокси, устанавливаю сертификат от mitmproxy, чтобы я мог снифать HTTPS-пакеты и запускаю Пикабу. Сейчас-то я узнаю все ваши грязные токены для авторизации. Ухахахахахах.
И ничего.
То есть, если я захожу на Пикабу через браузер - пакеты захватываются. А вот через приложение - не работает даже загрузка постов - пишет, что нет сети. Странно... Краем глаза замечаю малюсенькое (ага, оно в 2 раза длиннее, чем вся инструкция по установке сертификата) предупреждение на тестовой странице mitm.it:
"Хренушки вам, патчите приложение сами". Не, ну что вы начинаете-то сразу, я же ничего такого плохого не хотел, совсем даже наоборот... И тут в голову закралась мысль, что, наверное, было бы хорошо настроить виртуалку, а точнее, эмулятор, и на нем производить всякие манипуляции с патчами, а то негоже рабочую лошадку портить. Сказано-сделано, качаю первый попавшийся мне в гугле эмулятор Android - LDPlayer, устанавливаю его, запускаю, опять настаиваю прокси и... сношу этот эмулятор нафиг, так как в нем не работают настройки прокси. В гугле обнаруживается сообщение, что, мол, да, LDPlayer не поддерживает прокси, а вы попробуйте MEmu, там всё хорошо. И, знаете, таки да, тут прокси заработал :)
(Найди 10 отличий в UI между LDPlayer и MEmu LOL)
Далее, надо как-то пропатчить манифест pikabu.apk, чтобы ОС разрешила использовать кастомные сертификаты (а это нужно, чтобы mitmproxy смог перехватывать и переправлять HTTPS пакеты, и, как окажется позже, все заморочки не зря). Ну и ладно, программист С++ в своем опыте работы с тридцатилетним legacy и не в таком говнище ковырялся (передаю привет рыцарям свежего, я ваш поклонник :). Гуглим, как патчить манифест приложения и нахожу утилиту apktool. Ну окей, привет Java-среда на моей машине, давно с тобой не виделись. Примерно со времен, когда я, будучи школотой, на бейсике писал приложение под android 2.3.1 для подсчета ежемесячного заработка GIGALUL.
Следующий шаг - надо достать apk с приложением Пикабу. Хм, где-же, где-же скачать приложение в обход Google Play? Конечно же, скайп 4pda!
Согласно мануалу, найденному никогда не поверите где, распаковываю apk файл, нахожу манифест, добавляю указанные строчки и упаковываю apk назад. Пытаюсь установить - хренушки! Проклятый умный Android не разрешает установку apk без подписи. Океей. Согласно инструкции от Google... Вы рофлите, что ли? Настоящие пацаны копипастят команды со StackOverflow! Ключ сгенерирован, apk подписан. Копируем в эмулятор...
Как это "нельзя проверить легитимность подписи"? Ну хоть кнопку "Установить все равно" оставили, спасибо и на этом.
Приложение установилось и запустилось. Радостно. Вот только никакой активности в веб-морде mitmproxy нет. А пакеты с веб-браузера все еще перехватываться. Ничего не изменилось. Хм... Перечитываю инструкцию, пересматриваю команды, что добавлял в network_security_config.xml и замечаю что-то связанное с отладкой. И предательскую фразу в мануале, что "давайте откроем эту возможность только в тех случаях, когда мы выполняем отладку приложения, ведь это так логично и так правильно". such correct. much patch. very internets. many popular.
Стоп, блэт. Ведь у меня thirdparty приложение, без исходников, а Android Studio не установлена и вообще, время 23.30, завтра на удаленную работу вставать. Meh, не хочу разбираться, дайте рабочий вариант.
Ну хз, может, если убрать эти debug-override, то заработает?... Пробую, переупаковываю, еще раз подписываю, переустанавливаю и вот:
Время 0.30, уже четверг (да, да, скриншоты и мемасики делались позже, не ищите в этом логики). Пакеты HTTPS перехвачены. Протокол API нашего приложения - JSON. Чувствуете запах? Это запах победы. Обожаю запах победы по ночам.
Да, я прекрасно понимаю, что это не публичный API, но уж какой есть. Разумеется, он будет время от времени меняться и, наверняка, устареет и любое программное обеспечение, написанное с его помощью, может просто сломаться и никто не будет виноват. Более того, сломавшие даже будут правы. Ибо нехуй. Буду работать с тем, что есть. Все равно это лучше, чем парсер страниц на С++.
И я там был, мёд-пиво пил, по еблищу стекало, дрочило намокало. Всем кто дослушал эту сказку до конца - объявляется благодарность, зачем вы вообще потратили на этот пост время? Это проба пера, так сказать. Но мне было приятно. Спасибо. Доставляйте удовольствие авторам почаще и будьте чуть-чуть добрее. Мы тоже люди.
Следующей части статьи быть, если меня не забанят по доносу @YellowNBeetle, так как надо понять процесс авторизации приложения, затем аутентификации пользователя (наверняка), а для этого придется научиться разбираться со всякой шмалью smali.
P.S. I Love You Ввиду отсутствия какого-либо литературного опыта, на пост была потраченая такая уйма времени, что четверг превратился в пятницу, хотя тут делов-то тык-тык и готово (нет, форматирование - платное :C ). Так что вот такое получилось "Пикабу головного мозга" "Пятничное [МОЁ]".
Да, баянометр визжал как сучка. Возможно, даже всхрюкивал.