Android 深入系统完全讲解(18)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

3 su Root 的相关代码原理

在 Android4.4 的时候我们经常能够看到 Root Apk作为发烧友操作这个才算是真的会
Android。那么学习 su 的代码就是非常有意义的事情。这一节来说下 su 是如何管理权限
的如何调用授权 Apk完成授权操作。

代码下载地址:https://github.com/ChainsDD/su-binary
第一步查看 android.mk

查看这个可以了解编译结果是动态库静态库还是 apk 还是 bin 文件。还有可以看到文件
包含关系。这个我们可以看到是编译一个可执行文件 su。

在这里插入图片描述
然后阅读代码去看对应的实现

在这里插入图片描述
这里是当我们授权过的时候会从这里进行读取直接判断之前授权的值。如果没有我们
继续往下在这里插入图片描述
关键代码出现使用命令向系统广播出去一个 action=ACTION_REQUEST 的广播这时我们的
Superuser.apk 的 AndroidManifest.xml 会注册接收此广播弹出选择框。
操作完毕后 socket_receive_result 函数会返回
if (!strcmp(result, “DENY”)) {
deny(&ctx);
} else if (!strcmp(result, “ALLOW”)) {
allow(&ctx);
进行拒绝允许操作。
deny 函数发送一个拒绝广播 send_intent(ctx, “”, 0, ACTION_RESULT);然后退出。
allow 函数发送一个允许广播 send_intent(ctx, “”, 1, ACTION_RESULT); 然后使用
execv(ctx->to.shell, ctx->to.argv + argc); 将 su 进 程 直 接 替 换 成 需 要 执 行 的 程 序 。 发 送
send_intent 函数的目的是 Superuser.apk 里面需要存储数据。
至此 android su 程序分析完毕。
这里的逻辑是 su 本身是 root 可执行并且还有一个 s 位也就是替换成需要运行的程序时
候可以不降权直接用 Root 执行。对应的 APP 源码位置
https://github.com/ChainsDD/Superuser
看应用的源码第一步就是看 AndroidManifest.xml因为这个就是对外都有哪些界面哪些
服务一目了然。

在这里插入图片描述
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: android