-
Производительность: № 12 в этой категории
-
Оценок: 47,3 тыс.
imshkv , 29.06.2022
Он работает!
Наконец-то удалось найти рабочий vpn
мстительдонбасса , 15.11.2022
Отзыв
Все хорошо, рекламу уберите страшно бесит
ishimyrayeu , 16.04.2023
жаль.
помянем единственный VPN который работал быстрее и лучше , да и вообще работал . увы , сегодня перестал (
Конфиденциальность приложения
Разработчик WEILAI NETWORK TECHNOLOGY CO., LIMITED указал, что в соответствии с политикой конфиденциальности приложения данные могут обрабатываться так, как описано ниже. Подробные сведения доступны в политике конфиденциальности разработчика.
Данные, используемые для отслеживания информации
- Данные об использовании
Не связанные с пользователем данные
Может вестись сбор следующих данных, которые не связаны с личностью пользователя:
ТОП VPN сервисов для смартфона и компьютера
- Данные об использовании
Конфиденциальные данные могут использоваться по-разному в зависимости от вашего возраста, задействованных функций или других факторов. Подробнее
Информация
Провайдер WEILAI NETWORK TECHNOLOGY CO., LIMITED
Размер 51,1 МБ
Совместимость iPhone Требуется iOS 11.0 или новее. iPad Требуется iPadOS 11.0 или новее. iPod touch Требуется iOS 11.0 или новее.
русский, английский, испанский, корейский, немецкий, традиционный китайский, упрощенный китайский, французский, шведский, японский
Цена Бесплатно
- Сайт разработчика
- Поддержка приложения
- Политика конфиденциальности
- Сайт разработчика
- Поддержка приложения
- Политика конфиденциальности
Источник: apps.apple.com
Разработка VPN-клиента под Android (Часть 1)
Всем привет! Поводом к написанию данной статьи стало осознание того факта, что при наличии большого количества статей и обзоров про приложения VPN-клиенты для Android, нет ни одной нормальной статьи описывающей проблемы разработки с использованием VpnService API. Причём, в большинстве случаев вы, как разработчик приложения, не сможете ничего сделать с этими проблемами.
Начнём с самого начала. Некоторое время назад наша компания, на основе проводимых исследований в области безопасности мобильных устройств, решила выпустить небольшое приложение (WebGuard) под Android для блокировки всем уже надоевшей рекламы, а так же защиты от слежки и вирусов при работе из любого браузера. Чтобы реализовать данный функционал нам потребовалось решить множество задач, самой трудоёмкой из которых оказалась задача по перехвату и обработке трафика приложений. Для перехвата и фильтрации соединений браузеров было решено использовать VpnService API, которое появилось в Android с версии 4.0.3 и предоставляет всю нужную функциональность (правда, временами эта функциональность просто не работает по куче разных причин, но выяснилось это несколько позже).
Лучший БЕСПЛАТНЫЙ VPN 2023 года. #vpn #бесплатныйvpn #vpn2023 #лучшийvpn
Немного об используемых технологиях
Тут стоит рассказать подробнее, почему было выбрано данное API и какие вообще способы существуют для перехвата сетевого трафика приложений другим приложением на «нерутованном» android-устройстве. Собственно способов всего три (не считая различных уязвимостей) и знать о них будет полезно разработчикам приложений с различными механизмами внутриигровых покупок. Т. к. многие из них считают, что подмена сетевого трафика приложения возможно только на «рутованном» устройстве и «не заморачиваются» с защитой передаваемых данных, хотя есть вероятность (и довольно большая) появления «читерских» приложений вносящих изменения в передаваемые данные.
Итак, первый способ — это установка локального прокси-сервера. Этим способом пользуется большинство антивирусов под Android. Приложению для перехвата трафика достаточно реализовать поддержку HTTP-прокси описанную в стандарте RFC 2068 и установить в настройках WiFi сети прокси-сервер или APN в настройках мобильной сети. В этом случае передача данных будет происходить как на схеме ниже.

Но у этого способа есть куча серьёзных проблем:
-
установить WiFi прокси или APN для мобильной сети программно можно только с использование скрытого API (например скрытые методы в WifiManager);
// показываем Activity для запроса прав у пользователя Intent intent = VpnService.prepare(PromptActivity.this); startActivityForResult(intent, VPN_REQUEST_CODE); // запрос прав
// и в onActivityResult если нам выдали права // requestCode == VPN_REQUEST_CODE resultCode == RESULT_OK VpnService.Builder vpnBuilder = new VpnService.Builder(); vpnBuilder.addAddress(options.address, options.maskBits); vpnBuilder.addRoute(«0.0.0.0», 0); ParcelFileDescriptor pfd = vpnBuilder.establish(); FileInputStream in = new FileInputStream(parcelFileDescriptor.getFileDescriptor()); FileOutputStream out = new FileOutputStream(parcelFileDescriptor.getFileDescriptor());
, и весь TCP/IP трафик всех приложений (даже запущенных под root’ом) будет перенаправлен на TUN интерфейс, который создаст Android, а вашему приложению будет доступен на чтение/запись файл устройства /dev/tun (или /dev/tun0, /dev/tun1 и т. п.), откуда можно вычитывать исходящие сетевые пакеты, передавать их на обработку на удалённый VPN-сервер (обычно через шифрованное соединение) и затем записывать входящие сетевые пакеты. Для того, что бы соединения самого VPN-клиента не «заворачивались» в TUN, используется метод VpnService.protect на TCP или UDP сокетах созданных приложением.
Схема, представленная выше, в данном случае будет выглядеть следующим образом:

У этого способа есть две особенности:
-
Приложению нужно обязательно получить права на использование VpnService через вызов startActivityForResult, при этом система покажет пользователю такой вот диалог:

Причём, Android запоминает, что выдал права приложению, только до перезагрузки устройства, поэтому после перезагрузки права нужно запрашивать снова. Как выяснилось (мы этого даже не ожидали) есть пользователи («да их тут сотни» ), которые любят перезагружать свой телефон каждые 10 минут и им это окно мешает, за что они в маркете могут оценить приложение в 1 балл;
Тут недовольство пользователей было ожидаемо, т. к. многие нынешние приложения просто обожают «вешать» уведомления (иногда сразу по несколько) и статус-бар превращается в новогоднюю гирлянду:

Проблема с наличием сервера решается третьим способом (несколько изменённый способ №2) — приложение VPN-клиент содержит ещё и стек TCP/IP (можно взять готовый или написать самому из-за наличия недостатков в готовых) для разбора трафика из приложений и обработки соединений почти как прокси-сервер. Тогда схема обработки трафика приложений несколько изменится и будет выглядеть следующим образом:

Именно этот способ мы используем в WebGuard. Из недостатков, по сравнению с предыдущим способом, можно отметить только один — это невозможность нормальной обработки протоколов отличных от TCP или UDP (или протоколов «поверх» них), потому что приложению нужно будет создавать «сырые» сокеты для чего обычно нужны права root’а. Чтобы было понятно, о чём идёт речь, возьмём простой пример: пользователь запускает шелл через ADB и выполняет команду «ping www.ya.ru», которая отправляет ICMP эхо-запрос. Далее, приложение VPN-клиент читает из /dev/tun IP пакет, разбирает его, и выясняет что пакет содержит ICMP эхо-запрос к некоему серверу. А так как приложение не может передать запрос далее в сеть, то вариантов у него всего два: игнорировать пакет или эмулировать ping попытавшись установить соединение с нужным сервером и в случае успеха записать поддельный ICMP эхо-ответ в /dev/tun.
«Фичи» VpnService API
В процессе разработки приложения, тестирования и использования первых версий пользователями, мы столкнулись с большим количеством ошибок или недоработок связанных с VpnService API. Часть из них удалось исправить, т. к. по сути это были недоработки наших программистов (о чем мы честно написали и попали на bash.org.ru), а с оставшейся частью сделать что либо довольно сложно или невозможно:
-
Нет поддержки TUN интерфейса в ядре linux, соответственно VPN не заработает. В основном эта проблема встречается на самосборных прошивках на основе проектов CyanogenMod, AOSP и др. Авторы сборок либо вообще убирают поддержку из ядра, либо забывают положить модуль tun.ko в прошивку. Такое ощущение, что авторы руководствуются принципом «не знаю что это такое, поэтому не нужно»;
Немного о NinePatch
В список выше, не попала ещё одна проблема, последствия решения которой были для нас весьма неожиданны (и не только для нас). Поэтому мы решили рассказать о последствиях поподробнее. Началось все с того, что в какой то момент нужно было сделать самую важную часть приложения — нескучную иконку. Сказано — сделано. Красивая круглая иконка нарисована и мы радостно тестируем предрелизную версию, как вдруг:

Выяснилось, что на части телефонов иконка приложения в уведомлении о VPN может очень странно отображаться (неправильная цветность, размеры или ещё что-нибудь). После экспериментов и недолгого, но жаркого обсуждения
, было приказанорешено сделать иконку приложения в формате nine-patch, благо официальная документация по этому поводу ничего не говорит (т. е. не запрещает) и яйцеобразная проблема решается. Но, после выхода релиза очень быстро появились «пострадавшие». Это были как приложения под Android, так и различные онлайн сервисы работающие с apk-файлами, и не ожидающие получить иконку приложения в формате nine-patch. Самых примечательных мы решили расположить на пьедестале из трёх мест:
nbspnbsp3. Различные лаунчеры, которые падали при попытке отобразить иконку (например LauncherPro).
nbspnbsp2. Магазины Android приложений от Samsung и Yandex. При попытке загрузить приложение в Yandex.Store выдавалось вполне понятное описание ошибки: «Не удалось извлечь из APK иконку приложения». C Samsung Apps оказалось веселее.
Так как компания высокотехнологичная, то и результаты проверки при добавлении приложения приходят в соответствующем виде — письмо с ссылкой на видео в котором записан процесс тестирования приложения и должно быть видно (по идее) ошибку. Получилось, правда, все как обычно, пришло письмо с ссылкой по которой видео не было.
nbspnbsp1. Ну а почётное первое место, по праву, занимает компания Sony с телефоном Xperia. Через какое то время после выхода релиза, владельцы Xperia L начали присылать сообщения о том, что WebGuard «убил» им телефон (пример). Оказалось, что падает PackageManagerService при попытке обработать иконку приложения во время установки, после чего телефон автоматически перезагружается и идёт бесконечная загрузка:
E/AndroidRuntime( 790): *** FATAL EXCEPTION IN SYSTEM PROCESS: Thread-123
E/AndroidRuntime( 790): java.lang.ClassCastException: android.graphics.drawable.NinePatchDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
E/AndroidRuntime( 790): at com.android.server.pm.PackageManagerService$SetIconCacheThread.run(PackageManagerService.java:3672)
.
E/AndroidRuntime( 2981): FATAL EXCEPTION: ApplicationsProviderUpdater
E/AndroidRuntime( 2981): java.lang.RuntimeException: Package manager has died
E/AndroidRuntime( 2981): at android.app.ApplicationPackageManager.queryIntentActivitiesAsUser(ApplicationPackageManager.java:487)
E/AndroidRuntime( 2981): at android.app.ApplicationPackageManager.queryIntentActivities(ApplicationPackageManager.java:473)
E/AndroidRuntime( 2981): at com.android.providers.applications.ApplicationsProvider.updateApplicationsList(ApplicationsProvider.java:518)
E/AndroidRuntime( 2981): at com.android.providers.applications.ApplicationsProvider.access$300(ApplicationsProvider.java:69)
E/AndroidRuntime( 2981): at com.android.providers.applications.ApplicationsProvider$UpdateHandler.handleMessage(ApplicationsProvider.java:206)
E/AndroidRuntime( 2981): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 2981): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 2981): at android.os.HandlerThread.run(HandlerThread.java:60)
E/AndroidRuntime( 2981): Caused by: android.os.DeadObjectException
E/AndroidRuntime( 2981): at android.os.BinderProxy.transact(Native Method)
E/AndroidRuntime( 2981): at android.content.pm.IPackageManager$Stub$Proxy.queryIntentActivities(IPackageManager.java:2027)
E/AndroidRuntime( 2981): at android.app.ApplicationPackageManager.queryIntentActivitiesAsUser(ApplicationPackageManager.java:481)
E/AndroidRuntime( 2981): . 7 more
В итоге, с версии 1.3 было решено использовать иконку без nine-patch, тем более что его использование всех проблем с отображением иконки не решило:

nbspnbspnbspnbspУведомление о включении VPN на Ainol Novo10 Hero
Заключение
Нам не хотелось делать слишком большой пост, поэтому было решено разбить статью на несколько частей. В следующей части мы расскажем почему приложения под Android, фильтрующие трафик, потребляют так много заряда аккумулятора (по мнению андроида) и напомним, на примере одного теста производительности, что DalvikVM != JavaVM.
Надеемся наша статья кому-нибудь поможет в написании интересного приложения под Android. Удачной разработки!
- Блог компании Mobisoft
- Разработка под Android
Источник: habr.com
Что за программа vpndialogs
uzverss
Рассказываю, как я достал нужные файлы из прошивки и записал их в планшет. Авось кому пригодится, там есть несколько не вполне прямолинейных моментов.
1) Распаковываю файл прошивки T285XXU0APE1_T285OXE0APC1_T285XXU0APF1_H OME.tar.md5 . Естественно, tar-ом
tar xvf T285XXU0APE1_T285OXE0APC1_T285XXU0APF1_H OME.tar.md5
2) получается куча файлов, в частности нужный мне system.img . Этот system.img не является еще образом диска, он пожат некоей технологией под названием sparse image file. Его нужно распаковать командой
simg2img system.img system.raw
программа simg2img в моем дистрибутиве (debian testing) находится в пакете android-sdk-libsparse-util
3) полученный образ system.raw все еще нельзя смонтировать, потому что что у него обрезан конец — незначащие последние блоки данных. Нужно добить файл пустыми блоками до двух гигабайт. Возможно, для этого существует более элегантное решение, но я поступил в лоб, использовав dd
dd if=/dev/zero of=sys.raw count=524300 bs=4096
dd if=system.raw of=sys.raw conv=notrunc
Необходимые числа можно посмотреть в dumpe2fs и/или в ругани dmesg при попытке подмонтировать system.raw
4) теперь можно смонтировать образ диска куда-нибудь в файловую систему, бо это обычный ext4
sudo mount -o loop sys.raw /mnt/01/
5) для перемещения файлов на их место в планшете надо использовать adb. Для того пользоваться adb нужно разрешить его в настройках планшета. Я не буду это описывать, поскольку все разрешения у меня стоят уже очень давно и подробностей я уже не помню. Документации на эту тему вагон.
6) По какой-то причине файлы нельзя записать прямо на их место в /system/priv-app/. Нужно сначала записать их в пользовательское пространство, чтобы затем шеллом под adb переместить их на место. Нет, и после перемонтирования /system тоже нельзя.
adb push /mnt/01/priv-app/VpnDialogs/ /sdcard
7) теперь запускаем шелл и перемонтируем /system для записи
adb shell
>su
>mount -oremount,rw /system
8) Теперь можно копировать. Из под той же сессии adb shell
cp -r /sdcard/VpnDialogs /system/priv-app/
9) После копирования пермишены по какой-то трансцедентной причине портятся. Поэтому нужно файл за файлом их восстановить.
>chmod 755 /system/priv-app/Vpn/Dialogs/
>chmod 755 /system/priv-app/Vpn/Dialogs/arm/
>chmod 744 /system/priv-app/Vpn/Dialogs/*.apk
>chmod 744 /system/priv-app/Vpn/Dialogs/arm/*.odex
10) перемонтировать /system обратно в ro мне было лень, тем более что он все равно туда сбросится при перезагрузке.
Источник: uzverss.livejournal.com