另一种思路实现类似冰箱/黑阈的功能 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
cache

另一种思路实现类似冰箱/黑阈的功能

  •  
  •   cache Jul 11, 2021 16370 views
    This topic created in 1751 days ago, the information mentioned may be changed or developed.

    Android 上实现不 root 管理其他 App,基本上有几种方案:

    1. 利用设备管理员模式。代表应用 App Ops/小黑屋。
    2. 利用 Adb 调试权限。代表应用 冰箱 /黑阈。
    3. 另有一派非主流,利用无障碍服务,模拟点击杀进程。如KillApps

    对我个人来说,设备管理员模式的操作过于复杂,而且有相当一部分设备不支持。主要研究了一下 Adb 模式。

    冰箱 /黑阈在非 root 情况下,需要用户在每次设备重启后用 adb 运行一个脚本,这个脚本在后台起一个有 adb 权限的进程。后面需要 adb 权限时,通过 socket 和这个进程通信,利用它的 adb 权限代替执行相关操作。

    但其实原生 Android 上已经有一个进程在做一模一样的事,那就是 adbd 。

    熟悉 Adb 调试的人都知道,adb 调试是通过 PC 端的 adb 命令程序和 Android 设备端的 adbd 服务进程通信实现的。不管底层是走 usb 还是 tcpip,他们之间交互的协议是固定的。

    那么能不能在设备端实现一个 adb 命令程序,实现在设备上对其他 App 的管理呢。

    答案是肯定的,Adb 协议相当简单明了,实现并没有太大难度。 https://android.googlesource.com/platform/packages/modules/adb/+/HEAD/protocol.txt

    这样一来,App 获取 ADB 权限流程变成:

    1.开启 adb 调试,连上设备,执行: adb tcpip 5555 2.App 中连接 localhost 的 5555 端口,发送 adb 调试证书授权,用户点确认,获取 adb 权限。 

    相比于冰箱 /黑阈,这个方案的好处是,利用的是 Android 官方的 adbd,后台没有任何第三方进程,不使用 App 时系统零开销。 安全性,稳定性更有保障。

    利用这个原理,我写一个 App,有兴趣的 tx 可以试用一下

    Ran: Rule your Apps with Adb on devices

    https://play.google.com/store/apps/details?id=com.cloudmonad.ran

    目前功能比较简陋,主要利用 adb 权限实现了 获取 App 运行状态,杀死 App,frozen/unfrozen(利用 pm disable/enable )

    17 replies    2021-07-13 18:02:53 +08:00
    44670
        1
    44670  
       Jul 11, 2021
    wifi adb 重启后会保留吗?
    Jirajine
        2
    Jirajine  
       Jul 11, 2021 via Android
    你说的这些主流应用,现在就是这样做的啊。Android 11 以上可以直接开启 WiFi adb,之前的需要你先通过有线连接然后开启,重启后仍然会重置。
    另外 shizuku 这种服务的目的是为了能够直接使用 Java api,而不是只能用 shell 命令。
    cache
        3
    cache  
    OP
       Jul 11, 2021
    @44670 不能,每次重启要重新执行一下 adb tcpip 命令
    cache
        4
    cache  
    OP
       Jul 11, 2021
    @Jirajine 具体哪个是这么做的,至少我测试的时候他们都是起了后台进程。
    shizuku 是 root 方案,不在讨论里
    AoEiuV020
        5
    AoEiuV020  
       Jul 12, 2021 via Android
    我记得黑域就有支持这种方案,记得是 root, wifi adb, 电脑 adb 都支持的,
    Jirajine
        6
    Jirajine  
       Jul 12, 2021 via Android
    @cache 这么做的是指,它们都能在开启了 WiFi adb 的情况下,直接在本地和 adbd 通讯激活。
    shizuku 可以用 root 启动也可以用 adb 启动,其他的也一样。这类后台服务最主要的目的是通过 binder 导出 Java API,从而可以直接调用。直接用 adbd 的话,一来只能用 shell 指令非常麻烦,并且在用户 WiFi 断开的情况下就不能操作了。
    x2009again
        7
    x2009again  
       Jul 12, 2021
    不知道是不是安卓备份出来的原因,安卓 7 打开闪退,我从一个手机的 google play 下载安装后备份下来然后安装到安卓 7
    cache
        8
    cache  
    OP
       Jul 12, 2021
    @AoEiuV020
    我最早就是从黑域的 adb 激活入坑的

    你从 https://brevent.sh/安装后,ps 看一下,有两个 shell 权限后台进程。

    另外还有小黑屋的麦克斯韦妖,原理都一样。
    Cielsky
        9
    Cielsky  
       Jul 12, 2021 via Android
    安卓 10 才需要运行 ADB tcpip 吧,11 设置里可以直接开启无线调试了
    cache
        10
    cache  
    OP
       Jul 12, 2021
    @Jirajine
    我只测试了官方提供的激活方式

    @x2009again 有 adb 日志么
    cache
        11
    cache  
    OP
       Jul 12, 2021
    @Cielsky adb tcpip 所有版本都支持,通用性好。

    Andoid 11 以后 adb 协议增加了 A_STLS 命令,理论上不需要电脑就可以完成 adb 授权了。目前还不支持
    vk42
        12
    vk42  
       Jul 12, 2021
    @cache 后台是用来执行黑名单的啊,你这个就相当于是手动黑名单了,每次把需要冻的 app 手动执行一遍
    cache
        13
    cache  
    OP
       Jul 12, 2021
    @vk42 没错,现在只是提供了手动功能

    后面也可以起个 Service 做自动清理,不需要自动功能的用户可以关闭,不影响激活
    ikas
        14
    ikas  
       Jul 13, 2021
    这种很早就用过了...主要问题还是 adb 的权限远远不够..
    cache
        15
    cache  
    OP
       Jul 13, 2021
    @ikas 够用就行

    adb 权限的好处是可以稳定获取
    而能 root 的手机并不是主流
    pipilu
        16
    pipilu  
       Jul 13, 2021
    每次得开启 wifiadb,这里有安全隐患,相对于 冰箱 /黑阈,实际还是每次都得执行 adb

    如果都是在本机运行,是不是可以虚拟 usb 驱动来连接 adbd ?
    cache
        17
    cache  
    OP
       Jul 13, 2021
    @pipilu 安全隐患是指什么? 第一次连接 adb 是有认证弹窗的

    都有内核驱动级权限也看不上 adbd 这点权限了吧
    About     Help     Advertise     Blog     API     FAQ     Solana     6142 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 67ms UTC 02:14 PVG 10:14 LAX 19:14 JFK 22:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86