Я всегда смотрел на все "крипто-темы" с неким высокомерием. Мол это для тех, кто хочет легких денег. А работать, или вернее, зарабатывать деньги, своими навыками не хочет. Но вот в один воскресный день, я посмотрел новости на YouTube, и среди разного рода дичи там упоминалась одна, мягко скажем, сомнительная, но ставшая крайне популярной "игра", всеми силами пытающаяся прибиться к крипте. Ее суть тебе, вероятно, знакома, и по ее кишочкам мы сегодня и пробежимся. К слову, мое мнение относительно крипто-темок не изменилось - я все такой же высокомерный сноб, однако, быть может, по ходу этой статьи оно немного скорректируется.
Во время просмотра новости, где упоминалась Игра в Хомяка, меня озарила невероятная идея - если люди покупают различные секс-игрушки и массажеры, чтобы ускорять свой прогресс в этой игре, то, может быть, они будут готовы купить (за каких-то 5 000₽) электронный инструмент, мобильное приложение, которое позволит им не просто ускорить лишь одну из активностей игры, а полностью автоматизировать. И притом все аспекты игрового мира. Так я загорелся своей очередной идеей: реализовать авто-тапалку, продавать ее, и, с учетом количества вовлеченных в игру господ – определенно наведаться в магазин перчаток. Ибо всю кожу на руках сотрешь, такое количество денег считать.
Приложение я назвал "Хомякер" или "Hamsker" на английском, что это значит - догадайся сам. И пока оно доступно только в Google Play.
Перед статьей небольшой дисклеймер: в этой статье нет картинок, кода
или примеров каких-бы то ни было данных, упоминаемых далее. Эта статья
не про то, как получить некий результат, она про то, как я шел к
этому результату.И она намеренно упрощена в технических аспектах,
чтобы не насиловать мозги людей, далеких от разработки ПО, но,
возможно, прочитающих ее.Никаких ссылок в статье я приводить не буду, чтобы никого не злить 😄
TLDR
Поскольку статья получилась довольно длинной, я решил сгенерировать силами GPT очень краткую версию.
Не читай её. Читай всю статью целиком!
Я всегда смотрел на крипто-темы свысока, но однажды меня осенило создать "Хомякера" - приложение для автоматизации популярной игры-майнера в Telegram. Копаясь в кишках этого хомячеллы, я обнаружил, что это веб-приложение внутри телеги. Главная головоломка - добыть токен авторизации. После кучи экспериментов я нашёл решение: выковырять данные из веб-версии Telegram через браузерное расширение для смартфонов.
Погрузившись в механику игры, я автоматизировал всё (почти): тапанье, фоновый заработок, улучшения, бонусы, ежедневные плюшки и даже хитрые задания вроде "шифра" и "комбо". Две недели я жил как робот: работа, потом кодинг до ночи, сон по 4-5 часов, и по новой.
Решил сделать основные фишки бесплатными, прося взамен лишь подписаться на пару каналов в Telegram. В будущем, может, включу рекламу, но осторожно, чтобы не бесить народ.
Пробиться в Google Play оказалось той ещё эпопеей, но я справился. Теперь Хомякер помогает людям меньше залипать в телефоне и лучше спать, пока он сам вкалывает за них.
Мнение о крипте не изменилось - всё та же дыра для угля. Но уважаю маркетинговый подвиг создателей игры. Выстрелит ли мой Хомякер - время покажет, но опыт был интересным!
Залезаем под шкуру
Я уже писал статью про прослушивание трафика Android-приложений. И в той статье я жаловался, что на момент написания этой статьи, этой статьи не было, а я примерил на себе много грабель. Что же, в этот раз статья уже была, и она мне очень помогла. Однако к приемам из нее мы вернемся немного позже. Сначала давай (здесь и далее я буду обращаться к тебе, уважаемый читатель, на "ты", надеюсь, тебя это не оскорбит) рассмотрим задачи по шагам, чтобы реализовать то, что хочется:
Разобраться, как игра вообще запускается и начинает работу?
Понять логику работы игры. Что включает в себя:
Сетевые запросы, отвечающие за игровые аспекты
Другие сетевые запросы
Внутри-игровая логика (что делается с данными из запросов, какие данные и как отправляются в запросы)
Реализовать логику играния, очень похожую на поведение реального человека
Начнем с начала - как игра начинается.
Начало игры
Во время просмотра воскресных новостей я вообще не имел никакого представления о том, что это за игра, в какой форме она реализована. По своей наивности, первым делом я полез в Google Play и обнаружил там дивное многообразие приложений с хомяками. Но уже на моменте скриншотов закралось сомнение - то ли это? Пара запросов в гугле и просмотр нескольких видео и я понял, что игра - приложение внутри Telegram. Так называемый mini-app. Это немного озадачило меня. Порыться в обычных приложениях, какими бы они не были - 0 проблем. А вот в чем-то таком непонятном - не понятно и как.
Однако, несколько минут экспериментов, и стало ясно, что это обычный веб-сайт, который просто открывается особым образом внутри телеги. Сразу же появилась идея, что раз это веб - то и слушать его можно довольно просто. Подключаем телефон к компу, присоединяем к процессу Chrome Dev Tools и смотрим все, что только хотим смотреть, через удобный дебаггер браузера на большом экране. На этом этапе меня ожидали некоторые сложности, но судя по всему, обусловленные исключительно кривизной моих рук - почему-то мой мак никаким образом не хотел видеть этот web-view из телеги, запущенной на моем Samsung. Тогда я решил повторить весь процесс на Android-эмуляторе.
На эмуляторе все заработало сразу и без проблем. Запросы бодро посыпались во вкладке Network
и можно было начинать смотреть, что там работает да как. Без воды - все очень просто, но все запросы содержат Bearer Token
. Поймать создание которого мне с помощью Chrome Dev Tools в первой итерации не удалось.
Тогда я, все таки привыкший к более удобным и специальным инструментам, решил обратиться к своей собственной статье. 10 минут - и у меня есть эмулятор с root, на котором можно слушать трафик любого приложения. Для прослушки я использовал приложение, которым пользовался когда-то давно, когда root ставил на физический смартфон - HttpCanary. Последний раз это было...лет 5 назад, и с тех пор приложение сделало ребрендинг и стало называться Reqable. Но помимо приложения, появился и десктопный компаньон. И именно с его помощью весь процесс становится намного продуктивнее и приятнее.
Отлично. Устанавливаем и запускаем Telegram на эмуляторе, авторизуемся и заходим в бота, а потом и в игру. Поймали запрос, который создает токен авторизации. Но он создает не только токен, но и определенные проблемы...
Как работают mini-apps в Telegram?
Чтобы понять, о какой проблеме речь, нужно немного отойти в сторону и посмотреть на то, с чем мы имеем дело в принципе. Я не вдавался в эту тему очень глубоко, но с той глубины, докуда я доплыл, предстает следующая картина:
При запуске mini-app, хост (телега) выставляет определенные переменные окружения в браузере.
Среди них – id пользователя, возможно имя и никнейм, некий timestamp и хэш, являющийся подписью всей корзинки с данными.
Нужно, чтобы весь объект с данными был целостным, а хэш совпадал. При изменении любого из параметров API игры не принимает объект и отдает ошибку.
Чуть детальнее про это можно узнать в документации самого Telegram.
Проблема токена или яйца
Теперь ситуация выглядит следующим образом - чтобы создать токен авторизации, необходимо получить объект с авторизационными данными пользователя, который Telegram передает в mini-app. Была идея - получать ID пользователя с помощью какого-нибудь бота, а затем только с этим ID генерировать всю корзинку с данными. Но, как я выяснил по ссылке выше, сгенерировать хэш-подпись самостоятельно нельзя, поскольку в проверке подписи фигурирует bot_token
- а взять его неоткуда (думаю, понятно, от какого именно бота нужен токен).
Значит - нужно каким-то образом получить оригинальный объект с данными, который передается от телеги к mini-app. И тут я не придумал ничего лучше, как, фактически, реализовать свой собственный фрагмент Telegram, который бы мог авторизовать пользователя. В идеале – самостоятельно сходить в нужного бота, и взять оттуда то, что нужно, а затем, используя эти данные, сгенерировать Bearer Token
и авторизовать пользователя в игре. Это был бы простейший пользовательский опыт - ты просто авторизуешься под своей учеткой в приложении и больше ничего делать не надо. Но чтобы хотя бы понять, реализуема ли эта задумка, и сколько времени она займет - нужно было бы разобраться, как свою телегу собирать.
Я поковырялся в API Telegram, и пришел к очередному, не очень приятному выводу. Во первых - из-за своего протокола вся сетевуха, мягко говоря, не очень проста для, хотя бы, понимания (просто, ради интереса, взгляни на их "OpenAPI Scheme"). А для реализации (ткни меня носом, если не прав) - так и вовсе. Есть готовый SDK, бери да пользуйся, но есть "нюанс" - он на C(++).
Стоило упомянуть раньше, что Хомякер создан на Flutter. И у последнего есть прекрасный инструментарий для интеграции с нативными (Java / Kotlin / Objective-C / Swift / C / C++ / Rust / etc.) языками, но мне самому пока не приходилось погружаться в этот, чрезвычайно интересный, но слишком большой мир. Не хотелось потратить N дней на разборы генерации биндингов для SDK, а потом еще NN дней на имплементацию необходимого функционала, только чтобы в какой-то момент понять, что есть непреодолимая преграда, которая заруинит всю идею.
Окей, раз идея со своей телегой отменяется (пока) - как еще можно получить данные? Первой была мысль с подключением телефона к компу, открытие Chrome Dev Tools, и выкорчевывание всего необходимого оттуда. К этому моменту, с горем пополам, мне удалось подключиться и к телефону, и даже поймать нужные данные. Однако процесс этот выглядел ну уж очень трудоемким. Я бы сказал, что если его пройдет хотя бы 1% от заинтересованных людей - уже очень хорошо. Но помимо этого, требование в наличии ПК для реализации плана - тоже отрезает значительную часть целевой аудитории (предположительно, конечно). Звучит не очень.
К этому моменту я потратил практически всё воскресенье на эксперименты, и начала появляться мысль, что оно того не стоит. Совершенно не понятно – какой фронт работ предстоит, и в какой момент коса найдет на камень, а двигаться дальше будет нельзя. Но во время вечерней трапезы вдруг появилась идея – а что, если попробовать посмотреть на это все с помощью web-версии самого Telegram? К моему глубочайшему удивлению - в web-версии телеги работают встроенные веб-приложения! Ладно. Одна картинка напрашивается сама собой.
Запускаем бота, в нем - игру. И видим сообщение, которое говорит, что в вебе работать игра не хочет. Облом. Облом? Исследуем страницу и видим очень интересную картину - mini-app встроен в телеграм с помощью iframe
, в который передается именно то, что мне и нужно! Это невероятно подстегнуло мой интерес. Я вычленил необходимые фрагменты из урла, попробовал получить свой Bearer
с этими данными, и вуаля - свеженький и бессмертный (буквально) токен у меня.
Остаток этого дня (и первые пару часов следующего) я посвятил написанию браузерного расширения, которое автоматизирует извлечение необходимых данных, чтобы пользователю не пришлось ничего делать руками (как минимум - делать как можно меньше).
Проблема токена решена!
Пользовательский опыт
На текущий момент мы имеем следующее - браузерное расширение, которое может самостоятельно извлечь нужные данные и скопировать их в буфер обмена устройства. Затем, пользователю эти данные нужно каким-то образом скормить Хомякеру. И после этого начнется "магия", которая позволит заработать все хомякоины мира! Но есть нюанс. Опять эти нюансы! Опять предполагается использовать ПК...
Опять отсеивается значительная(?) часть целевой аудитории, плюс эти сложности с установкой расширения, передачей данных на смартфон и т.д. И тут, во время еще одной трапезы в голову приходит очередная генитальная мысль! А почему бы не устанавливать расширение прямо на смартфоне? Так все можно сделать на одном устройстве, решается проблема наличия ПК и в принципе - это намного удобнее! Прекрасно – удалось немного улучшить UX!
Логика
TLDR: Самый длинный раздел
Теперь, когда никаких формальных препятствий для реализации задуманного нет. Весь процесс полностью воспроизводим любым человеком - пора приниматься за главное - реализацию логики играния.
До того, как погрузиться в этот процесс, у меня было не очень верное представление об экономике игры. Я представлял, что главной активностью является тапанье. Но это не так.
Безусловно, самой-самой главной активностью является привлечение рефералов. Игра прямо таки заставляет тебя распространять себя как вирус - делиться с друзьями, родней, да и вообще всеми, с кем только можно.
Однако, второй по важности аспект - "фоновый заработок". Он очень неплохо растет до определенного уровня, а самое главное, благодаря активности Хомякера, отпадает необходимость заглядывать в игру каждые 3 часа. Фоновый заработок действительно становится фоновым.
Начнем с реализации авто-тапанья (фактически - отправляем запросы с определенной случайностью во времени, количестве, частоте и логике). Но выхлоп лишь с этого будет маловат...
В игре есть возможность прокачки энергии и количества монет, получаемых за один тап. Сначала я думал, что прокачивая количество монет за тап мы будем получать больше монет за единицу энергии. Но создатели игры оказались хитрее. Фактическая стоимость одного тапа всегда будет одинаковой. Прокачивая тапы ты просто ускоряешь разрядку энергии. Поэтому их прокачивать смысла нет вообще.
Энергия - она будет повышаться с повышением уровня, но и ее можно улучшать. Но есть очередной нюанс. Стоимость улучшений увеличивается геометрически - каждое новое стоит в 2 раза больше предыдущего. Поэтому реалистичный смысл в прокачке за монеты есть уровня на 3-4. Дальше стоимость прокачки становится слишком большой относительно приносимого за это улучшение профита. А логика тут такая - в день доступно 6 "перезарядок" энергии. Каждая прокачка дает 500 единиц энергии, или - 3 000 монет в день. Когда стоимость улучшения энергии составляет 16 000 монет и больше, вам потребуется 5 дней на отбив этого улучшения. С учетом неопределенного будущего игры, далеко не факт, что к моменту схлопывания ты сможешь отбить потраченное. А потратить монеты можно намного полезнее (о чем мы поговорим ниже).
Но вернемся к выхлопу. Вне зависимости от улучшений тапа или энергии, сама энергия восстанавливается со скоростью 3 единицы в секунду. Это дает возможность заработать 24 * 60 * 60 * 3 = 259 200
монет в день только на тапах. Иначе, это соответствует 10 800 монет профита в час. Хомякер дает возможность получить всю эту сумму без собственного вовлечения.
Аспект второй - фоновый заработок aka профит. Я обратил внимание, что многие улучшения дают намного больше профита на потраченную монету, чем другие. Поэтому было решено реализовать автоматическую стратегию покупки улучшений исходя из их прибыльности на единицу стоимости. Это дает возможность очень быстро и за относительно небольшую сумму прокачать фон до пары-другой сотен тысяч монет в час. Держим в уме, что благодаря активности Хомякера эти монетки будут капать не 3 часа после выхода из игры, а все время, пока Хомякер трудится.
В дополнение к этому, в игре есть особые улучшения, ограниченные по времени. И они, как правило, дают особенный профит. Но их надо "ловить" - то есть проверять игру на предмет, доступен ли подобный бонус, а если ты его уже купил, то закончился ли cooldown с момента прошлой покупки. Такие бонусы тоже будут куплены автоматически.
Аспект третий - бонусы. Игра предлагает довольно увесистые (для игрового мира) бонусы за различные активности. Будь то - просмотр видео на YouTube, подписка на X (Twitter) или Telegram, и кое-что еще. Что же, большинство из этих подписок не имеют никаких реальных проверок, а посему - легко воспроизводятся Хомякером. Сюда же добавим ежедневную награду, которая растет очень серьезно спустя несколько дней и может составлять ощутимую часть ежедневного дохода. И ее Хомякер тоже собирает.
Аспект четвертый - "шифр" и "комбо". С шифром все было так просто, что даже и не особо интересно рассказывать. Но я расскажу! Если честно, я так и не понял, что именно надо сделать в настоящей игре, чтобы шифр взломать, поэтому я сразу же полез в код хомячиного web-сайта. Я просто открыл страницу в обычном десктопном браузере и скачал все "исходники" с помощью браузерного расширения. Затем изучил их в IDE и пришел к выводу, что для получения награды за шифр надо отправить base64-decoded строку, которую получает игра по сети. Но это не простая base64-строка, а кривая. И чтобы ее можно было отдекодить - нужно убрать из нее лишний символ, после чего ее можно раскрыть и отправить на бэк для получения своей награды в 1 000 000 монет. Неплохо!
С комбо посложнее. Для начала, что это такое? Комбо - это некие секретные улучшения в количестве 3х штук, которые необходимо купить в течение дня. Если ты их купил - получи 5 000 000 монет. Создатели, на этот раз, не стали слишком сильно доверять клиенту и никаких подсказок о том, какие улучшения входят в комбо - нет. Поэтому единственный реальный способ его узнать - перебрать все улучшения, и тогда комбо найдется само собой. Есть много разных ресурсов, куда сливают эти комбинации каждый день, и в таком случае их можно купить вручную. Но в Хомякере есть дополнительная стратегия покупки улучшений, когда мы покупаем каждое из них лишь однажды в день, и покупаем по стоимости, от самого дешевого к дорогому. Так потратится меньше монет на больший шанс найти всё комбо. Сейчас в работе функционал по поиску комбо "коллективным разумом", а также ручная конфигурация комбо-улучшений, и если они известны, то Хомякер просто купит конкретные улучшения, а дальше примется за покупку с приоритетом профита.
Что еще? Не так давно в игру завезли мини-игру. Забавно, правда? В mini-app есть mini-game. Говорю я о "ключах". Для того, чтобы понять, как они работают, пришлось сыграть одну партию, и записать все запросы, происходившие в процессе, естественно. В целом все понятно, но пока я не стал реализовывать автоматическое получение ключей - хочу убедиться, что все усилия были не напрасны и хоть какой-то объем пользователей у Хомякера появится.
Жадность
Я писал другую статью про то, как я создавал супер-пупер CMS для Flutter-приложений с офигенными возможностями по части Server Driven UI. Если ты ее еще не читал, то краткий вывод из той статьи - я не стал богатым. Если расширить - никто не был готов платить за тот продукт, что я создавал, и ту ценность, что он приносил. Поэтому, подходя к вопросу монетизации Хомякера (а ради чего же это все вообще делать?) я пришел к выводу, что никаких платных функций в приложении не будет вообще. Скажу больше - я очень сомневаюсь, что средний человек получит в этой игре хотя бы пару долларов. А поэтому было бы просто нечестно просить хоть сколько-то настоящих денег, когда ты можешь остаться даже в минусе.
Единственное, в чем у меня есть сомнения – мульти-аккаунтность. Хомякер поддерживает неограниченное количество аккаунтов, для которых можно фармить монетки одновременно (пока эта возможность заблокирована). И, по идее, это уже ниша, я бы сказал, профессиональных хомякоинодобытчиков. А раз они делают это в промышленных масштабах - пусть платят(?).
Все остальные функции же полностью бесплатны (и новые тоже будут такими). Поэтому, как ты понимаешь, сумма в 5 000₽ из интро была шуткой. И вообще - все, что выделено курсивом - ирония. Но как тогда зарабатывать? Что же, я не придумал ничего лучше, чем завести парочку Telegram-каналов, и в определенный момент времени Хомякер потребует от тебя подписаться на них. И, в отличие от разработчиков игры, я реализовал проверку подписанности. Поэтому без подписки на эти каналы Хомякер работать не будет.
Второй момент - реклама. Все настройки в Хомякере намеренно выключены по умолчанию. То есть, если ничего не менять, то он будет собирать ежедневную награду и имитировать тапы. Этого может быть даже достаточно - 10 800 монет в час, как никак, плюс дейлик и постоянный фоновый заработок. Но чтобы он начал скупать самые выгодные улучшения, искал комбо, собирал награды за активности, предотвращал засыпание устройства, чтобы экран не блокировался - придется пройти AdWall. На данный момент реклама тоже отключена, но постепенно я буду проводить A/B тестирование, чтобы оценить, раздражает ли она пользователей настолько, чтобы они перестали пользоваться Хомякером.
Релиз
С этим все и просто, и не просто. На данный момент, как я упоминал в самом начале, приложение доступно только в Google Play. Если начнет расти пользовательская база, то я сделаю версию и для iOS (жалко $100 на аккаунт разработчика), а также "альтернативные сторы".
С попаданием в Google Play тоже было не очень гладко. В начале пути я не планировал публиковать приложение в сторах, думая ограничиться лишь Android, распространяемым по .apk
. Однако несколько экспериментов с друзьями (даже с друзьями) показали, что никто не готов устанавливать .apk
. В целом это справедливо, и я сам занимаюсь подобным только с доверенными источниками. И хотя я не скрываю свою личность, и при таких обстоятельствах было бы очень глупо делать какие-то гадости пользователям своего приложения, но вывод был однозначен - публиковаться придется.
Вторая ложка дёгтя "за" публикацию - реклама. Оказалось, что, практически, ни одна рекламная сеть не позволяет запустить рекламу, если приложение не опубликовано в сторе. Есть отдельные разновидности, скажем - Start.io, но там, похоже, просто нет заказчиков. Либо их нет, пока не верифицировал приложение.
В общем, смирившись с тем, что придется заниматься и тем, что не особо нравится - не писать код, фичи и т.д., а заниматься оформлением страницы в сторе, и вот этим всем, я принялся за дело. Оформил страницу, загрузил сборку, выложил в интернете privacy policy в виде .pdf
. И ждал неделю! Спустя 7 дней получил вежливый отказ, потому что policy должно быть в формате html
, а также приложение должно явно запрашивать согласие на обработку данных. Поэтому пришлось немного допилить Хомякера, обновить policy, опубликовать новую версию, и уже всего 5 дней спустя она была заапрувлена.
Выводы
Суммарно, я потратил на эту задумку две недели. В течение этого времени, каждый день после работы я сидел и кодил до 2-3 часов ночи, и спал по 4-5. Выходные - 100% времени было потрачено на разработку. Жалею ли я об этом? Ну... я определенно подвыгорел. Когда ты кодишь в "потоке" по 8 часов на работе, а потом еще часов 8 создаешь свой проект - это, немного, тяжковато. Но это был очень интересный опыт - ковыряться в кишочках этого хомячеллы, разгадывать загадки в исходном коде и потом все это реализовывать. Поэтому я не жалею. Даже если никаких пользователей, по итогу, у Хомякера и не будет. Это всего лишь проверка гипотезы.
Изменилось ли отношение к крипте?
Конечно же нет! Набросаю немного на вентилятор: крипта, по моему мнению - огромная дыра, в которую скидывают ежедневно по 100 вагонов с углем, просто чтобы она существовала (цифры мне посчитал GPT, на основании вот этих отчетов).
Мое мнение, как будто у старого брюзжащего деда - это огромный скам, прикрывающийся базз-вордами и не создающий никакой добавленной стоимости (для кого-то, вернее, она создается, но не для тебя). Однако, крипта есть, и я думаю, она с нами уже навсегда. За последние годы, скажем так, крипта стала особенно полезной для много кого, но это не потому, что она вдруг стала хорошим инструментом. Это потому что другие инструменты превратились в гавно. Хотелось бы только избавиться от ненужного ущерба, который каждый день наносится нашей планете, который каждый день отнимает частичку будущего у наших детей. Proof-of-Stake - очень неплохой сценарий для крипты, и когда эфир перешел на PoS, мое хейтерство очень сильно сдулось.
Что касается же хомяка, честно говоря - это вызывающий огромное уважение, пример невероятного маркетинга. Я не знаю, что они делали, но привлечь столько пользователей в свои соц-сети – это подвиг. В остальном – время покажет. Моей целью было лишь создать такую лопату, которая бы помогла людям оторваться от экранов смартфонов, не ставить будильники ночью, а спокойно спать. И пусть Хомякер делает все сам!