Задача интеграции Tor в Android-приложение кажется очевидной, особенно учитывая наличие готовых браузеров для этой платформы. Однако на практике она оказывается сложнее, чем можно предположить, и сопряжена с рядом технических нюансов.
В качестве практического примера рассмотрим разработку приложения для работы с RuTracker. Ранее подобные приложения могли обходить блокировки с помощью Google Compression Proxy, но сейчас эта возможность, по всей видимости, отключена либо самим трекером, либо Google. Конечно, существуют VPN и другие инструменты для обхода ограничений, но данная статья посвящена именно интеграции Tor. Эта технология открывает для мобильных приложений широкие возможности: от доступа к сайтам в зоне .onion до создания защищённых мессенджеров с повышенным уровнем приватности.
Подключение библиотеки Tor
Сборка библиотеки с нуля
Если вас не интересует процесс самостоятельной сборки, переходите к следующему разделу.
Для работы с Tor существует специализированный репозиторий, связанный с Microsoft. Несмотря на его работоспособность, процесс сборки оставляет желать лучшего, а сам проект не обновлялся около двух лет. Готовых скомпилированных библиотек там нет, только запутанные инструкции. Тем не менее, их достаточно для того, чтобы привести проект в актуальное состояние.
- Клонируйте репозиторий на локальную машину.
- Обновите компонент jtorctl, отвечающий за управление Tor. Исходный форк с правками от Briar уже устарел — лучше взять актуальную версию из основного репозитория. Рекомендуется подключать его в виде исходного кода, а не через Maven, чтобы иметь возможность оперативно вносить правки и проводить анализ.
- Обновите базы данных GeoIP и GeoIPv6, которые содержат информацию о географическом расположении IP-адресов. Их можно скачать в составе Windows Expert Bundle с официального сайта Tor.
- Обновите нативную библиотеку Tor. Поскольку её стандартной сборки нет, возьмите последнюю версию из релиза Orbot — официального приложения Tor для Android. Это обеспечит использование свежей и стабильной версии.
- Вручную исправьте все ошибки компиляции, которые возникнут в проекте. API некоторых зависимых библиотек мог измениться, но правки, как правило, интуитивно понятны.
- Следуя инструкциям README, создайте локальные Maven-репозитории и соберите проект из всех компонентов.
Обратите внимание: Меняем старое оформление Android на новое!.
Обратите внимание, что оригинальный скрипт сборки содержит ряд недочётов. Для получения чистого AAR-файла библиотеки рекомендуется переписать его с нуля, сделав более простым и понятным.
Использование готовых наработок
Если вы не хотите проходить все описанные шаги, можно воспользоваться уже готовой сборкой библиотеки, доступной в релизах репозитория (ссылка в конце статьи). Однако крайне важно самостоятельно проверить исходный код и бинарные файлы на соответствие оригиналам и отсутствие потенциально вредоносных вставок. Не стоит слепо доверять сторонним сборкам при разработке серьёзных приложений.
Настройка проксирования через Tor
После подключения библиотеки необходимо инициализировать и запустить Tor-клиент в вашем приложении.
Сначала выполните запуск Tor с указанием таймаутов и количества попыток:
int totalSecondsPerTorStartup = 4 * 60;
int totalTriesPerTorStartup = 5;
try {
boolean ok = onionProxyManager.startWithRepeat(totalSecondsPerTorStartup, totalTriesPerTorStartup);
if (!ok)
Log.e("TorTest", "Couldn't start Tor!");
}
catch (InterruptedException | IOException e) {
e.printStackTrace();
}
Затем дождитесь успешного запуска службы:
while (!onionProxyManager.isRunning())
Thread.sleep(90);
После успешной инициализации Tor начнёт работать как SOCKS4a-прокси на локальном порту:
Log.v("My App", "Tor initialized on port " + onionProxyManager.getIPv4LocalHostSocksPort());
Важный момент: не все сетевые библиотеки корректно работают с SOCKS4a, так как этот протокол требует, чтобы разрешение доменных имён (DNS) происходило на стороне прокси-сервера, а не клиента.
Для библиотеки Apache HttpComponents потребуется создать кастомные реализации `ConnectionSocketFactory` и `SSLConnectionSocketFactory`.
Создайте HttpClient, использующий эти фабрики:
public HttpClient getNewHttpClient() {
Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", new MyConnectionSocketFactory())
.register("https", new MySSLConnectionSocketFactory(SSLContexts.createSystemDefault()))
.build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg);
return HttpClients.custom()
.setConnectionManager(cm)
.build();
}
Затем настройте созданный клиент на использование локального Tor-прокси:
HttpClient cli = getNewHttpClient();
int port = onionProxyManager.getIPv4LocalHostSocksPort();
InetSocketAddress socksaddr = new InetSocketAddress("127.0.0.1", port);
HttpClientContext context = HttpClientContext.create();
context.setAttribute("socks.address", socksaddr);
Готово! Теперь ваш HttpClient будет направлять весь трафик через Tor. Это позволяет не только обходить блокировки, но и получать доступ к ресурсам в доменной зоне .onion.
Итоги и выводы
Стоит признать, что инициализация Tor занимает время (около 20 секунд), а скорость загрузки страниц через сеть ниже, чем при прямом соединении. Однако это плата за гарантированный обход блокировок и повышенную анонимность. Для оптимизации можно реализовать гибридный подход, направляя через Tor только заблокированные запросы, а остальной трафик пропуская напрямую. Дополнительно можно реализовать кэширование статики для экономии трафика и ускорения работы, хотя в демонстрационном приложении это не является критичным.
В заключение, интеграция Tor в Android — это работоспособное и полезное решение. Существует и альтернативный, более простой путь — требовать от пользователя установки Orbot и взаимодействовать с ним. Однако такой подход создаёт зависимость от стороннего приложения. Встроенное решение, несмотря на увеличение размера APK-файла на несколько мегабайт, обеспечивает полную автономность. Если представленное решение вас заинтересовало — используйте его, вносите улучшения и делитесь обратной связью.
Ссылки на используемые ресурсы:
- Исходная библиотека;
- Моя сборка библиотеки;
- Приложение для рутрекера;
- Guardian Project — разработчики, благодаря которым существует нативная библиотека Tor для Android.
#безопасность и мир #безопасность #интернет #шифрование #телефон #андроид #анонимность и приватность #защита #слежка #мобильный
Больше интересных статей здесь: Гаджеты.
Источник статьи: Интеграция tor в android приложение!.