технически VPN на андроид — это сервис
внутри можно получить
inputStream с байтами трафика всех приложенияclass MyVpnService : VpnService() {
fun startService() {
val tunFd = Builder()
.setSession("MyVPN")
.addAddress("10.0.0.2", 24)
.addRoute("0.0.0.0", 0)
.establish()
Thread {
val input = FileInputStream(tunFd.fileDescriptor)
}.start()
}VPN работает на уровне IP/TCP/UDP пакетов
Ему плевать, какой тип трафика в этих байтах — данные внутри могут быть упакованы по протоколу http/https или вообще gRPC/GraphQL/SIP/MQTT...
Он получает сырой набор байт, которые надо зашифровать/переупаковать любым алгоритмом и доставить на сервер
💡 А может ли приложение VPN расшифровать https трафик?
Может, но только если пользователь добавит SSL-сертификат, созданный самим VPN-клиентом, в список доверенных
Получится классическая man-in-the-middle, в которой VPN сможет расшифровывать трафик
Оказывается, существуют даже мобильные версии снифферов вроде Proxyman. Они как раз поднимают VPN-сервис и просят установить кастомный сертификат
