记一次蛋疼的App 调用su 之旅

本文记录了一次在AOSP Android 10 userdebug环境下,尝试调用su命令遇到的权限问题及调试过程。通过修改代码、权限设置和用户身份,最终将应用包名改为com.android.shell以避免权限冲突,但遇到su内部错误。
摘要由CSDN通过智能技术生成

背景

  • 软件:AOSP Android 10 userdebug with sepolicy on;

  • 硬件:无需关心;

  • 事由:好朋友阿P说需要他的盒子调用su 实现不可告人的目的。

调试过程

代码

使用AndroidStudio 新建一个工程,基本一路默认,修改代码如下:

  • MainActivity.java

    package com.nobita.su;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.util.Log;
    
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    
    public class MainActivity extends AppCompatActivity {
         
        private static final String TAG = "NOBITA";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
         
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        @Override
        protected void onResume() {
         
            super.onResume();
            String result = runRootCommand("echo hello");
            Log.d(TAG, result);
        }
    
        private String runRootCommand(String command) {
         
            try {
         
                Process process = Runtime.getRuntime().exec("su");
                DataOutputStream os = new DataOutputStream(process.getOutputStream());
                os.writeBytes(command + "\n");
                os.writeBytes("exit\n");
                os.flush();
                process.waitFor();
                BufferedReader resultBuffReader = new BufferedReader(
                        new InputStreamReader(process.getInputStream()));
                BufferedReader errorBuffReader = new BufferedReader(new InputStreamReader(
                        process.getErrorStream()));
                String line;
                StringBuilder sb = new StringBuilder();
                sb.append("result:\n");
                while ((line = resultBuffReader.readLine()) != null) {
         
                    sb.append(line);
                    sb.append("\n");
                }
                sb.append("error:\n");
                while ((line = errorBuffReader.readLine()) != null) {
         
                    sb.append(line);
                    sb.append("\n");
                }
                return sb.toString();
            } catch (Exception e) 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值