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用户了

相关推荐
2501_915909068 小时前
抓包工具断点拦截是什么?如何半路拦截修改 HTTP 请求
网络协议·计算机网络·网络安全·adb·https·udp
misty youth2 天前
Navicat与PHPstudy小皮
mysql·adb·php·navicat
for_ever_love__3 天前
MySQL 8.0 数据类型选型指南:INT、DECIMAL、VARCHAR 与时间字段怎么选
mysql·adb·数据类型·varchar·长度·字段类型选择
yeflx4 天前
Ubuntu22.04安装Mysql Workbench
数据库·mysql·adb
夜雪一千4 天前
MySQL 自增 ID 的底层原理与坑点
android·mysql·adb
Dxy12393102165 天前
MySQL JSON 生成列索引原理、实战与坑点
mysql·adb·json
远方 hi5 天前
MySQL 管理
adb
夜雪一千6 天前
MySQL 删除 JSON 类型的数据实战
mysql·adb·json
千码君20168 天前
个人开发者:安卓手机adb调试
android·adb·智能手机