androidroot权限破解分析

破解手机Root权限是比较简单及安全的,破解Root权限的原理就是在手机的/system/bin/或/system/xbin/目录下放置一个可执行文件“su”,这是一个二进制文件,仅仅在系统中置入这个“su”文件是不会给手机的软件或硬件造成任何故障。

       下面的代码是android系统原版的su中的部分代码,可以看出只允许getuid()为AID_ROOT和AID_SHELL的进程可以使用su进行登陆。
/* Until we have something better, only root and the shell can use su. */
myuid = getuid();
if (myuid != AID_ROOT && myuid != AID_SHELL) {
fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
return 1;
}
      在Superuser这个android程序中的su不再有上面的一部分,这样任何进程都可以使用su进行登陆了,有一部分android程序要使用root权限可能的用法类似于(这个也是Superuser中的一部分代码):

Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("mount -oremount,rw /dev/block/mtdblock3 /system\n");
os.writeBytes("busybox cp /data/data/com.koushikdutta.superuser/su /system/bin/su\n");
os.writeBytes("busybox chown 0:0 /system/bin/su\n");
os.writeBytes("chmod 4755 /system/bin/su\n");
os.writeBytes("exit\n");
os.flush();



而在上面提到的Superuser和android程序中的su源码中都有这部分代码:

if(setgid(gid) || setuid(uid)) {
fprintf(stderr,"su: permission denied\n");
return 1;
}

看上去这里就是进行权限切换的地方了。面普通用户要能使用su,su的权限要是这样:
-rwsr-xr-x. 1 root root 34904 11月 3 2010 /bin/su
这个和电脑版的su上是一样的。

从出上面的分析可以认为破解android的root权限的实质是:在系统中加入一个任何用户都可能用于登陆的su命令。当然这首先要取得root权限才能做到。在z4root这个android下的破解android的root权限的程序中有一个rageagainstthecage,可能就是设法得到root权限的程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android设备上,即使没有root权限,你仍然可以使用Android API来获取CPU使用率。可以通过读取/proc/stat文件来获取CPU使用率信息。该文件包含了系统中各个进程以及CPU的使用情况,你可以通过分析该文件来计算CPU使用率。 具体来说,你可以使用以下步骤来获取CPU使用率: 1. 读取/proc/stat文件,获取CPU的总时间以及各个进程的时间信息。 2. 计算CPU的空闲时间和总时间,从而得到CPU的使用时间。 3. 计算CPU的使用率,即使用时间除以总时间。 以下是一个示例代码,用于获取CPU使用率: ```java public class CpuUsageMonitor { private static final String TAG = "CpuUsageMonitor"; private long lastCpuTime = 0; private long lastUpdateTime = 0; public float getCpuUsage() { try { FileReader fileReader = new FileReader("/proc/stat"); BufferedReader bufferedReader = new BufferedReader(fileReader); String line; while ((line = bufferedReader.readLine()) != null) { if (line.startsWith("cpu ")) { String[] cpuInfoArray = line.split("\\s+"); long userTime = Long.parseLong(cpuInfoArray[1]); long niceTime = Long.parseLong(cpuInfoArray[2]); long systemTime = Long.parseLong(cpuInfoArray[3]); long idleTime = Long.parseLong(cpuInfoArray[4]); long ioWaitTime = Long.parseLong(cpuInfoArray[5]); long irqTime = Long.parseLong(cpuInfoArray[6]); long softIrqTime = Long.parseLong(cpuInfoArray[7]); long totalTime = userTime + niceTime + systemTime + idleTime + ioWaitTime + irqTime + softIrqTime; if (lastCpuTime != 0) { long deltaTime = totalTime - lastCpuTime; long currentTime = System.currentTimeMillis(); long timeDelta = currentTime - lastUpdateTime; float cpuUsage = (deltaTime * 100.0f) / (timeDelta * 1000.0f * Runtime.getRuntime().availableProcessors()); return cpuUsage; } else { lastCpuTime = totalTime; lastUpdateTime = System.currentTimeMillis(); } } } bufferedReader.close(); fileReader.close(); } catch (IOException ex) { Log.e(TAG, "Unable to read /proc/stat", ex); } return 0; } } ``` 在上述代码中,我们读取/proc/stat文件,解析出CPU的总时间以及各个进程的时间信息,然后计算出CPU的使用率。我们通过保存上一次读取的CPU时间和更新时间,来计算出两次读取之间的CPU使用时间。最后,我们将使用时间除以总时间,得到CPU的使用率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值