Задание: Даниил Фукалов, SPbCTF Прохождение: Влад Росков, SPbCTF

В космопоездах беда: появился обаятельный андроид-шулер, который обыгрывает всех в наперстки и обирает до нитки: robotrickster.apk

Совершите маленькую шалость — выиграйте у робошулера весь миллион монет, которые звенят в его карманах.

Осматриваемся

На примере этого демо-задания мы хотим показать несколько универсальных приёмов, как можно заглянуть под капот мобильного приложения под Андроид: посмотреть его трафик, пропатчить приложение и восстановить его алгоритм на Java. Каждый из этих подходов пригодится при анализе безопасности любых мобильных приложений.

В задании нас ждёт единственный файл robotrickster.apk размером 6 МБ, и по его расширению мы опознаём в нём пакет для установки Android-приложения.

Untitled

Чтобы понять, что за приложение перед нами и что оно умеет, первым делом стоит его запустить. К счастью, для этого необязательно иметь телефон на Андроиде в кладовке — есть много эмуляторов, которые позволяют запустить Android в виртуальной машине прямо на компьютере.

Мы будем использовать официальный SDK от Гугла, в нём после запуска Android Studio эмулятор находится по More Actions → Virtual Device Manager. Перетащим файл .apk в окно виртуального девайса, где уже запустился Андроид, и стартуем установленное приложение.

Напёрстки с жуликом

Напёрстки с жуликом

Итак, нам предлагается обыграть напёрсточника, который то и дело жульничает, мешая нам следить за перемещением напёрстков. За каждое верно угаданное положение шарика наш выигрыш удваивается, и по условиям задачи нам нужно набрать миллион — то есть удвоить 20 раз подряд. Однако при любом неверном угадывании андроид-аферист забирает у нас все монетки, кроме одной.

Попробуем восстановить справедливость.

Способ 1. Смотрим сетевой трафик

Часто мобильное приложение — это просто красивая оболочка для взаимодействия с сервером по API. Получше узнать, что происходит внутри такого приложения, можно с помощью перехвата его сетевого трафика. Давайте этим займёмся.

Для начала нам понадобится Burp Suite — комплект для удобного анализа HTTP-трафика (достаточно бесплатной Community-версии). Мы подробно рассказывали о работе с ним в разборе задания «Cringe Archive» с IT’s Tinkoff CTF 2023, рекомендуем освежить в памяти, если вы не работаете с Бёрпом каждый день.

Посмотрите разбор Cringe Archive, если не поняли, что происходит на скриншоте

Посмотрите разбор Cringe Archive, если не поняли, что происходит на скриншоте

Burp показывает тот трафик, который проходит через его прокси-сервер. Встроенный Chromium-браузер, который идёт в комплекте, настроен на этот прокси изначально, поэтому зайти поковырять какой-нибудь сайт легко. Однако эмулятор Андроида ходит в сеть напрямую, без прокси.

Подробная инструкция, как завернуть Андроид через прокси Бёрпа, есть например в статье на Хабре от @W0lFreaK, но краткая выглядит так:

  1. Перевешиваем прокси на внешний интерфейс

    Untitled

    Изначально прокси слушает на локалхосте, эмулятор не сможет к нему подключиться. Proxy → ⚙️ Proxy Settings → Proxy listeners → Edit → выбираем любой IPv4 кроме 127.0.0.1

  2. Прописываем прокси в Андроиде

    Untitled

    Untitled

    Untitled

    Untitled

    В расширенных настройках виртуальной WiFi-сети «AndroidWifi» настраиваем использование прокси. IP-адрес тот, что только что выбрали в Бёрпе, порт 8080.