知乎首页代码:【转】SuperUser for Android 实现分析

来源:百度文库 编辑:中财网 时间:2024/04/28 07:20:58

SuperUser for Android 实现分析

分类: 移动安全 Android 2011-10-14 13:48 193人阅读 评论(0) 收藏 举报

著名的 Superuser 程序是一直我们 root 后必装的一个软件,同时也保证了我们在 root 后安全的使用 root 能力。 

在这里十分赞同这样的行为,在对设备进行扩充能力的同时避免扩充后的弊端, 再一次证明双刃剑要合理运用的道理。 

如果说 root exploit 为我们提供了广阔的空间,哪么,Superuser 就给我们提供了这在个空间合理正确安全的使用拥有的能力,真是能力越大责任越大啊! 

言归正传,我们是要分析一下是 Superuser 如何为我们提供这个能力的! 

该安装包中有二部份:

1.  su 程序。

2. Superuser 界面部份 

su 程序在 Linux 中是非常有名的一个命令,可以为我们提供更高的用户级别 (root) ,此程序在权限中有一个 s 位,

见 ls -l su 输入结果:

-rwsr-xr-x     su           root    root

有了这样的权限,就能保证调用 su 后会有 root 能力,具体原因可以在网上找找,这里不介绍了。 

而我们知道 su 被调用的时候, 在 Superuser 程序中会弹出个对话框, 这是我们要研究的问题所在。 只好看看源代码了,参见:http://code.google.com/p/superuser/ 

可知这里的 su  是改良版本,不是原始的 su 程序。

经过分析其流程是: 

>>>  su 被用户调用

>>>  su 创建了一个 socket 监听

>>>  su 向 Superuser 发送了一个广播,说是有一个程序要请求 root

>>>  su 等待 socket 数据接受。 有超时处理。

>>>  Superuser 界面收到广播后,弹出一个对话框,询问用户

>>>  Superuser 向传来的数据中的 socket 写回用户应答结果。

>>>  su  根据 socket 得到的结果处理应该不应该继续执行

>>>  完成提权管理。 

技术难点总结:

1.  阻塞进程用的是 socket 阻塞。

2. 控制台向其它程序发送广播,这里作者应该用了大量精力搞定,自己拼装的 Parcel 对像来兼容不同的版本,可见其对系统了解很深。

3. 权限控制策略实现。 

好了,基本明白了! 

再次要感谢 Superuser 作者的奉献,不只为我们提供了安全管理,还为我们开源了代码,方便学习!   致敬!