返回首页

VPN 上的自动应用冻结 — 技术解决方案

Android 沙箱在 VPN 检测中的漏洞分析以及通过自动应用禁用实现解决方案。Anubis 阻止后台活动,防止 IP 地址泄漏。

Anubis:应用与 VPN 检测的完全隔离
Advertisement 728x90

Anubis:VPN 激活时自动冻结应用

俄罗斯流行的应用会扫描设备上的 VPN 使用情况,并报告出站 IP 地址以使其被屏蔽。解决方案?每当 VPN 开启时自动冻结应用。Anubis 是一个开源工具,它会阻止应用的后台活动,使其对检测系统不可见。

为什么工作配置文件无法解决问题

Android 工作配置文件(Island、Insular)可以对 ConnectivityManager 隐藏 VPN,但无法防止网络泄漏。工作配置文件中的应用仍然可以看到:

  • tun0 接口,通过 NetworkInterface.getNetworkInterfaces()
  • 通过 /proc/net/route 的路由
  • 本地的 SOCKS5 代理(端口 1080 等)

这些检查无需权限,并且符合数字发展部 2026 年的指南。即使有配置文件隔离,应用仍能检测到 VPN 服务器的出站 IP 地址并发送给 Roskomnadzor。下面代码展示了标准 ConnectivityManager 检查如何在配置文件之间被过滤:

Google AdInline article slot
// Code in rabochem profile not obnaruzhit VPN osnovnogo profilya
val cm = getSystemService<ConnectivityManager>()
val vpnActive = cm.allNetworks.any {
    cm.getNetworkCapabilities(it)
        ?.hasTransport(NetworkCapabilities.TRANSPORT_VPN) == true
}
// Result: vpnActive == false

VLESS 客户端的关键漏洞(未受保护的 SOCKS5 代理)让情况雪上加霜。应用不仅能检测到 VPN,还能利用它精确定位出站 IP。像三级级联 VPN 这样的技术只是转移了问题——无法根除,因为间谍仍会抓取第一个节点的出站 IP。

Android 的架构限制

Android 不像桌面操作系统那样为配置文件使用网络命名空间。PC 上的虚拟化(VirtualBox、QEMU)完全隔离了网络栈,但在 Android 上:

  • 网络栈在所有配置文件间共享
  • 通过 BroadcastReceiverJobScheduler、FCM 允许后台活动
  • Doze Mode 和 App Standby 无法保证完全停止

即使网络隔离完美,后台进程仍会运行。拥有后台活动权限的应用(银行、即时通讯)会定期检查:

Google AdInline article slot
  • 通过系统 API 的网络状态
  • 本地上的开放端口
  • 被屏蔽资源的可用性

工作配置文件无法阻止这些检查。唯一可靠的方法是通过系统命令 pm disable-user 完全禁用应用。

Anubis 的工作原理

Anubis 通过 VpnService 监控 VPN 状态,并自动禁用目标应用。主要组件:

  • 系统监控:跟踪 CONNECTIVITY_ACTION 事件和 VpnService 状态
  • 包管理:使用 DONT_KILL_APP 标志调用 PackageManager.setApplicationEnabledSetting()
  • 目标列表:按包名过滤(例如,ru.max.messenger、ru.tbank)

激活过程:

Google AdInline article slot
  • 用户开启 VPN
  • Anubis 通过 BroadcastReceiver 接收事件
  • 对白名单中的每个应用执行 pm disable-user
  • 应用图标从启动器消失,后台进程停止

VPN 关闭时,系统会自动恢复应用到工作状态。它需要 CHANGE_NETWORK_STATE 权限以及更改应用状态的权限(通过 ADB 或 root):

# Akaktywatsiya komandy otklyucheniya for user-installed prilozheniy
adb shell pm enable-user --user 0 ru.target.app

技术实现细节

Anubis 通过两种方法绕过 Android 对用户安装应用禁用的限制:

  • ADB 模式:通过电脑设置,适用于启用调试的设备
  • Root 访问:通过 su 直接调用 pm disable-user

对于 ADB 使用,需要一次性设置:

adb shell pm set-install-location 2
adb shell pm grant com.anubis.control android.permission.CHANGE_NETWORK_STATE

重要提示:禁用后,应用完全与系统隔离。它不会接收广播事件,没有网络访问,无法启动进程。这保证即使是高级检测方法(端口扫描、路由分析)也变得不可能。

关键要点

  • 工作配置文件仅对 ConnectivityManager 隐藏 VPN,而非低级网络检查
  • 即使在隔离配置文件中,应用的后台活动仍保持活跃
  • 通过 pm disable-user 完全禁用是确保无泄漏的唯一方法
  • Anubis 自动化该过程,将应用状态与 VPN 状态关联
  • 需要 ADB 或 root 才能对用户安装应用启用

— Editorial Team

Advertisement 728x90

继续阅读