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,因为这个就是对外都有哪些界面,哪些
服务,一目了然。
、