adb shell中执行system用户权限命令的方法

做系统开发的过程中经常需要抓取一下只有system组才能拿到的信息,而这个时候一般用户使用的是user版本,问题又很难复现,这个时候刷机可能信息都没有了,所以产生了一个需求,在adb shell里面以system权限执行命令,下面提供了一个这个办法,前提是你拥有系统签名,我们开发一个程序,在AndroidManifest.xml里面配置systemuid

XML 复制代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:sharedUserId="android.uid.system"
    xmlns:tools="http://schemas.android.com/tools">

然后在build.gradle里面加上系统签名

我们在MainActivity里面加上

java 复制代码
        try {
            Runtime.getRuntime().exec("toybox nc -s 127.0.0.1 -p 1234 -L /system/bin/sh -l");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

这段代码的作用,就是监听一个端口,执行命令

  • toybox nc:使用Toybox工具集中的netcat(网络工具)。
  • -s 127.0.0.1:绑定到本地回环地址,仅允许本地连接。
  • -p 1234:监听1234端口。
  • -L:持续监听模式(接受连接后保持运行,继续等待新连接)。
  • /system/bin/sh -l:连接建立后执行的命令(启动一个登录Shell)。

上述apk编译后放到安卓设备里面打开即可

然后我们进入adb shell,在里面执行

java 复制代码
toybox nc 127.0.0.1 1234

运行后没有其他提示,输入whoami,可以看到当前已经是system用户组了,这个时候就可以执行一些操作了,例如查看和复制/data目录下等需要system用户权限的动作了

其实,如果你有系统签名,本身也可以写一个system权限的apk来获取你想要的信息,但是没有通过命令行交互来的这么方便

当然了,如果以root用户执行那段代码,然后nc打开这个端口,你就是root用户了

相关推荐
JosieBook10 小时前
【数据库】MySQL 实战精通系列 · 第1篇:MySQL 全局观与实战环境搭建
数据库·mysql·adb
蒸鱼Yuzheng20 小时前
设备端性能工件可靠导出:断点续传、哈希、manifest 与失败恢复
android·自动化测试·python·adb·数据完整性
文人sec9 天前
grant 之后要跟着 flush privileges 吗?要不要使用分区表?
数据库·mysql·adb·数据分析
2501_9160088910 天前
SSE 和 gRPC 流式接口如何抓包,调试 SSE 与 gRPC 流式接口
网络协议·计算机网络·网络安全·ios·adb·https·udp
2501_9160088913 天前
全平台抓包工具,Windows、iPhone、Linux三个平台抓包测试
网络协议·计算机网络·网络安全·ios·adb·https·udp
鸽芷咕15 天前
MySQL Server 鸿蒙 PC 适配全记录:以混合工具链完成 C++23 交叉编译与 HNP 交付
adb·harmonyos·c++23
游戏开发爱好者818 天前
网络连接排查指南,谁在电脑后台偷跑流量,哪些程序在联网
网络协议·计算机网络·网络安全·ios·adb·https·udp
实心儿儿18 天前
MySQL 的安装
数据库·mysql·adb
2601_9623004718 天前
基于Python与Tkinter的ADB Monkey自动化测试脚本开发
python·adb·tkinter·android测试·gui自动化
flower_drop20 天前
基于 WebUSB 与 CDP:在浏览器端实现 Android 设备通信与无证书抓包实践
android·chrome·测试工具·adb·bug·edge浏览器