标签: adb

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

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 条回复    2021-07-13 18:02:53 +08:00

44670
    1

44670   26 天前

wifi adb 重启后会保留吗?
Jirajine
    2

Jirajine   26 天前 via Android

你说的这些主流应用,现在就是这样做的啊。Android 11 以上可以直接开启 WiFi adb,之前的需要你先通过有线连接然后开启,重启后仍然会重置。
另外 shizuku 这种服务的目的是为了能够直接使用 Java api,而不是只能用 shell 命令。
cache
    3

cache   26 天前

@44670 不能,每次重启要重新执行一下 adb tcpip 命令
cache
    4

cache   26 天前

@Jirajine 具体哪个是这么做的,至少我测试的时候他们都是起了后台进程。
shizuku 是 root 方案,不在讨论里
AoEiuV020
    5

AoEiuV020   26 天前 via Android

我记得黑域就有支持这种方案,记得是 root, wifi adb, 电脑 adb 都支持的,
Jirajine
    6

Jirajine   26 天前 via Android

@cache 这么做的是指,它们都能在开启了 WiFi adb 的情况下,直接在本地和 adbd 通讯激活。
shizuku 可以用 root 启动也可以用 adb 启动,其他的也一样。这类后台服务*主要的目的是通过 binder 导出 Java API,从而可以直接调用。直接用 adbd 的话,一来只能用 shell 指令非常麻烦,并且在用户 WiFi 断开的情况下就不能操作了。
x2009again
    7

x2009again   26 天前

不知道是不是安卓备份出来的原因,安卓 7 打开闪退,我从一个手机的 google play 下载安装后备份下来然后安装到安卓 7
cache
    8

cache   26 天前

@AoEiuV020
我*早就是从黑域的 adb 激活入坑的

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

另外还有小黑屋的麦克斯韦妖,原理都一样。

Cielsky
    9

Cielsky   26 天前 via Android

安卓 10 才需要运行 ADB tcpip 吧,11 设置里可以直接开启无线调试了
cache
    10

cache   26 天前

@Jirajine
我只测试了官方提供的激活方式

@x2009again 有 adb 日志么

cache
    11

cache   26 天前

@Cielsky adb tcpip 所有版本都支持,通用性好。

Andoid 11 以后 adb 协议增加了 A_STLS 命令,理论上不需要电脑就可以完成 adb 授权了。目前还不支持

vk42
    12

vk42   26 天前

@cache 后台是用来执行黑名单的啊,你这个就相当于是手动黑名单了,每次把需要冻的 app 手动执行一遍
cache
    13

cache   26 天前

@vk42 没错,现在只是提供了手动功能

后面也可以起个 Service 做自动清理,不需要自动功能的用户可以关闭,不影响激活

ikas
    14

ikas   25 天前

这种很早就用过了…主要问题还是 adb 的权限远远不够..
cache
    15

cache   25 天前

@ikas 够用就行

adb 权限的好处是可以稳定获取
而能 root 的手机并不是主流

pipilu
    16

pipilu   24 天前

每次得开启 wifiadb,这里有安全隐患,相对于 冰箱 /黑阈,实际还是每次都得执行 adb

如果都是在本机运行,是不是可以虚拟 usb 驱动来连接 adbd ?

cache
    17

cache   24 天前

@pipilu 安全隐患是指什么? *次连接 adb 是有认证弹窗的

都有内核驱动级权限也看不上 adbd 这点权限了吧

为什么手柄连接安卓设备要连接电脑激活映射?

为什么手柄连接安卓设备经常需要连接电脑激活映射?

这个过程没办法在设备上独立完成吗?

第 1 条附言  ·

小鸡手柄安卓激活教程: https://www.xiaoji.com/help/gw/2274.html

游戏世界激活教程—PC端

1、下载PC版小鸡手柄 精灵激活工具

2、开启USB调试与USB安全权限;

%title插图%num

3、手机数据线连接电脑,打开刚下载的激活工具,并按提示进行激活

%title插图%num

激活成功,即可畅玩安卓手游;如下图

%title插图%num

第 2 条附言  · 

北通手柄还出了个安卓激活器: http://www.betop-cn.com/product/16
%title插图%num %title插图%num %title插图%num
15 条回复    2021-02-06 10:12:35 +08:00
meso5533
    1

meso5533   61 天前 via Android

求技术细节
ysc3839
    2

ysc3839   61 天前 via Android

“连接电脑激活映射”指的是什么?
Laforet
    3

Laforet   61 天前 via Android

Sixaxis Tool 的收费版可以在手机上完成匹配,但是部分机型的蓝牙芯片可能不支持配对。不想花时间适配的其他工具可能就直接让你在电脑上完成了
meso5533
    4

meso5533   61 天前

@ysc3839 比如小鸡模拟器: https://www.xiaoji.com/help/gw/2274.html
meso5533
    5

meso5533   61 天前

@meso5533 写错了,比如小鸡手柄
mitong3269
    6

mitong3269   61 天前 via iPhone

那种 usb 的东东 远离是连接后 进行 adb 控制
ysc3839
    7

ysc3839   61 天前 via Android

@meso5533 没明白这是什么操作,不激活手柄就无法连接手机吗?
meso5533
    8

meso5533   61 天前

@ysc3839 是的,特别繁琐
meso5533
    9

meso5533   61 天前

@ysc3839 是手柄通过蓝牙连上安卓后,还需要将安卓和电脑连接,运行一下激活按键映射的工具后,手柄才能使用
ysc3839
    10

ysc3839   61 天前 via Android

@meso5533 我从来没听说过这种操作……Xbox 手柄连接 Android 后就可以直接使用了,我自己测试 GTA 是能正常使用的。

wms
    11

wms   61 天前

反汇编了一下, 这个激活是通过 ADB 拷贝一个 xjServer.jar 到 /data/local/tmp/.xiaoji 目录下面, 然后通过 app_process 运行这个 jar, 根据网上的资料这样运行的 jar 比安装的权限大, 猜测应该是获取了 input 权限, 模拟了输入.
yujiang
    12

yujiang   61 天前 via Android

是通过 adb 映射键位吧,我用 scrcpy 网络连接每次重启都需要重新连接再用 tcpip 命令激活远程
beijiaoff
    13

beijiaoff   61 天前

我的理解,安卓并没有官方标准的手柄接口(或者这些手柄都没有用),所以需要「激活」的形式来告诉手机里的软件如何映射按键和屏幕触摸位置
wms
    14

wms   61 天前   ❤️ 2

@beijiaoff 不是, Android 有标准的手柄接口, 而是这些游戏没有使用或者有的游戏需要认证了的手柄才可以用(可以收认证费,反作弊等). 所以手柄厂就用 input 输入触摸事件,模拟了触屏操作.
systemcall
    15

systemcall   61 天前 via Android   ❤️ 3

@beijiaoff Android 有标准的手柄接口,和 iOS 、Windows 差不多
一般的游戏引擎也是支持的。但是国产游戏不支持,没封你号就算好的
所以要映射成触摸输入,这个一般的软件做不到,要用 adb 。adb 本身就支持模拟用户输入,这个用户有这个权限
友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速