Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Авторы приложения тестируют модуль обхода блокировок в странах-цензорах
Популярная социальная сеть была запрещена в России в 2022 году. Для многих поклонников приложения это стало настоящим ударом, а трафик Instagram* понес огромные потери: по данным Brand Analytics на октябрь 2022 года, количество авторов (блогеров) сократилось с 38 млн до 17 млн за год, а количество отправленных сообщений упало со 135 млн до 40 млн за тот же период. Теперь, вероятно, владельцы соцсети ищут новые способы вернуть свою аудиторию. Одним из них может стать работа Instagram* с уже встроенным модулем обхода блокировок в странах-цензорах.
Что использует Instagram*
Во время тестирования обновленной версии приложения Instagram* одним из сотрудников компании i2crm было установлено, что приложение работает в обычном режиме без использования VPN-сервиса. Для выяснения причины компания обратилась к стороннему специалисту по реверс-инжинирингу. В результате реверса мобильного приложения удалось обнаружить, что в Android-версии Instagram* 260.0.0.23.115 arm64 появился модуль Psiphon.
Что такое реверс-инжиниринг
Реверс-инжиниринг (обратная разработка) — это исследование некоторого готового устройства или программы, а также документации на него, с целью понять принцип его работы.
Реверс-инжиниринг приложения: как именно был обнаружен модуль Psiphon
Сервис Psiphon имеет открытый код, который опубликован на веб-хостинге для IT-проектов GitHub. Для обнаружения модуля, прежде всего, необходимо было ознакомиться с документацией по внедрению модуля в Android-приложение:
Как внедрить модуль в проект Android.
Пример использование модуля в мобильном приложении Android.
Ресурсами модуля.
Было установлено, что для работы модуля Psiphon на смартфоне требуется несколько условий, а именно:
Разрешения для работы с сетью в AndroidManifest.xml.
Java код.
Нативная библиотека.
Вызов java-кода Psiphon модуля из java-кода Instagram*.
Первый этап
С помощью архиватора 7-zip был открыт apk-файл Instagram*, в котором были обнаружены файлы.
Среди этих данных были интересны:
AndroidManifest.xml — он предоставляет подробную информацию о приложении;
файлы classes.dex — classes9.dex — это скомпилированный java-код;
папка lib — нативные библиотеки.
Файл AndroidManifest.xml содержит много информации о приложении, но в данной ситуации специалистов интересовали разрешения на доступ в сеть. Так как приложение Instagram* активно использует интернет-соединение, то проверку разрешений можно пропустить, сделав вывод, что условие по доступу в сеть выполняется.
Второй этап: Java-код
Далее требовалась распаковка apk-файла в декомпиляторе Bytecode-viewer. В нем был обнаружен класс модуля Psiphon.
На этом этапе Java-часть в apk-файле Instagram* была обнаружена, что подтвердило второе условие для поддержки модуля Psiphon.
Данное расширение указывало на то, что файл является скомпилированным (преобразованным) java-кодом. Чтобы понять, что внутри java-кода, специалистам потребовалось преобразовать его в исходный вид, т.е. декомпилировать. В изначальном java-коде и был обнаружен модуль для обхода блокировок Psiphon.
Третий этап: работа с нативной библиотекой
«Заглянуть» внутрь java-кода и обнаружить класс модуля Psiphon удалось с помощью Bytecode-viewer. Реверс apk-файла позволил найти dex-файлы, а при их последующей декомпиляции обнаружить класс модуля Psiphon.
Далее, чтобы понять, как обеспечивается работа модуля на Android, необходимо было найти java-метод, который загружает нативную библиотеку. Когда этот метод был найден, специалисты занялись поиском нативной библиотеки. С ее помощью нужно было установить, какая часть кода отвечает за загрузку этой библиотеки на смартфон.
Нативная библиотека для 64-разрядных arm-процессоров в репозитории располагается также в открытом доступе на GitHub здесь и имеет имя «libtun2socks.so».
Для подтверждения использования модуля специалисты исследовали java-код и обнаружили метод «startRouting()», который отвечает за загрузку нативной части модуля.
В методе «startRouting()» был обнаружен интерфейс, в который передается имя нативной библиотеки. Сам интерфейс использует системный Android api-метод «loadLibrary()». Этот метод является кодом самого Android и отвечает за загрузку нативной библиотеки в память устройства и делает ее экспортированные функции доступными для java-кода. В свою очередь это дает возможность взаимодействия со скомпилированным С/С++ кодом из java.
Вот так выглядит та же функция в декомпилированном java-коде:
При распаковке приложения расположение библиотек в каталоге обычно выглядит так: lib\<архитектура процессора>.
Однако по данному пути libtun2socks.so обнаружить не удалось. Поэтому пришлось заглянуть assets\lib, где приложение Instagram* также может хранить нативные библиотеки.
В папке находились два файла:
libs.spo -— архив с библиотеками;
metadata.txt — перечень библиотек с указанием sha-256 хэша и размера каждого файла.
Но и в metadata.txt нативная библиотека снова не была обнаружена. Все, что было известно изначально — Instagram* при первом запуске приложения автоматически распаковывает архив libs.spo в защищенную часть памяти устройства /data/data/com.instagram.android/lib-compressed/.
Таким образом, третье условие было не выполнено (наличие нативной библиотеки libtun2socks.so). Из первых трех условий можно сделать вывод, что использование модуля невозможно из-за отсутствия ключевой библиотеки.
Специалисты решили проверить, добавили ли разработчики только код модуля или уже начали его активное внедрение.
Вызов java-кода Psiphon-модуля из java-кода Instagram* на примере установки в Android-приложение
Чтобы понять, как именно устанавливается модуль Psiphon в Android-приложение, можно рассмотреть пример из открытых источников
Создание модуля происходит с помощью метода newPsiphonTunnel(), его код выглядит так:
Метод newPsiphonTunnelImpl() выглядит так:
При установке модуля в Android встречается еще одна нативная библиотека gojni. При реверс-инжиниринге она не была замечена. При повторном изучении репозитория был обнаружен maven aar- модуль для интеграции Psiphon в проекты Android Studio.
Далее при открытии aar-файла архиватором 7-Zip специалисты нашли искомую библиотеку и ресурсы.
На основании этого можно сделать такой вывод: для работы Psiphon модуля требуется libtun2socks.so и libgojni.so.
После проведенных установок специалисты снова вернулись к Instagram* и зафиксировали пути, где хранятся библиотеки:
/data/data/com.instagram.android/lib-compressed/
<apk>/lib/<архитектура процессора>
Библиотека вновь не была обнаружена. Тогда была сделана попытка найти Instagram*- код, который ссылается на метод newPsiphonTunnel().
При этой операции был найден вызов из кода Instagram* искомого Psiphon модуля. Данное исследование с установкой модуля Psiphon в Android показало, что в целом модуль не используется полноценно, а, как и предполагалось, находится на этапе внедрения. Вероятно, этот сервис компания Meta* может использовать в дальнейшем для того, чтобы избежать блокировок Instagram* со стороны стран-цензоров.
Что представляет собой сервис Psiphon?
VPN-сервис Psiphon разработан в 2006 году в Университете Торонто. Он предназначен для обхода цензуры со стороны госрегуляторов в таких странах, как Китай и Иран. Подробно о принципах работы VPN-сервисов можно прочитать в этой статье.
Psiphon имеет сложный механизм, и его трафик почти невозможно поймать, например, через системы фильтрации DPI. Он предоставляет доступ в интернет через прокси-сервер в другой стране, а если сервер становится недоступным, то меняет его автоматически. Теперь, по-видимому, Instagram* решил «зашить» модуль обхода блокировок непосредственно в приложение, чтобы избавить пользователей от необходимости искать варианты зайти в него.
Опасен ли модуль Psiphon с точки зрения передачи данных между пользователями Instagram*? Его создатели могут видеть домены, к которым происходит доступ, но не могут видеть пользовательские данные. Это объясняется тем, что модуль — это локальный прокси-сервер, на который перенаправляется зашифрованный Instagram*-трафик. Однако для его чтения недостаточно перехвата, требуется еще расшифровка. Иными словами, модуль может получать данные в обобщенном виде и использовать, например, для настройки рекламного трафика, но не может получать историю браузера и файлов cookies.
Почему Instagram* не использует методы Telegram
Трафик Instagram* блокируется с 14 марта 2022 года интернет-провайдерами России по требованию Генпрокуратуры РФ. Приложение не может самостоятельно обходить блокировки, как это делает Telegram, используя разные IP-адреса.
Telegram для обхода блокировок использует моментальное изменение IPv4-адресов на хостингах Amazon, Google, DigitalOcean. Если заблокировать эти адреса принудительно, то неизбежно произойдет сбой в работе других сайтов и приложений, базирующихся на данных хостинга. Этот способ не используется в Китае, где перечисленные сервера заблокированы госрегулятором.
Также Telegram использует IPv6-адреса, которые регулирующие органы пока не умеют массово выявлять и блокировать. Еще одним способом защиты от возможных блокировок является возможность proxy-подключений через протоколы SOCKS5 и MTProto и ботов автоматической настройки от провайдеров услуг proxy и VPN.
Передача сообщений между пользователями Telegram осуществляется напрямую по протоколу P2P с использованием встроенного Proxy, подобного Tor. Заблокировать такой протокол возможно лишь по конечным IP-адресам пользователей, то есть фактически отключив от сети всех.
Заключение
Исследование работы модуля Psiphon в Android-версии Instagram* 260.0.0.23.115 arm64 было проведено двумя способами: с помощью реверс-инжиниринга приложения и методом вызова java-кода Instagram* на примере установки в Android-приложение. Изучение было проведено с помощью информации, полученной из открытых источников и ресурсов.
Специалисты установили, что в настоящее время модуль не используется полноценно. Скорее всего, он тестируется и в дальнейшем будет встроен в приложение для того, чтобы избежать блокировок Instagram* со стороны регуляторов в странах-цензорах.
*Meta Platforms Inc. (Facebook, Instagram) — признана экстремистской, ее деятельность запрещена на территории России.