著名的 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 作者的奉献,不只为我们提供了安全管理,还为我们开源了代码,方便学习! 致敬!