AOSP 隐藏 su

       我们在开发过程中会用到root权限,但是又不想其它的应用能够检测到手机是root的,该怎么做呢?

       首先,检测检测手机root有很重要的一个检测方式, 就是 检测 /system/xbin/su 文件的  s位. 如下图:   

-rwsr-sr-x  1 root root    11056 2018-12-05 23:33 procmem
-rwsr-x---  1 root shell   11064 2018-12-05 23:33 su

       从上面我们可以清除看到 权限组一项 有是 s位的, 现在一些应用的检测手段就是  通过得到手机的PATH环境变量,然后扫描该环境变量路径中的全部文件来分析 是否有这个s 位.  那么我们完全可以这么干.

      1` 编译的时候删除掉 procmem 这个文件, 删掉是不会有啥影响的. 

      2` 将su文件的路径给改一改.  比如放到 上一级 system 目录下面.   

      这两个文件的源码都在 AOSP/system/extras 目录下. 直接修改Android.mk 文件 改变其编译后的路径即可. 但是, su文件如果仅仅是改了路径是不行的. 因为其权限问题.

      我们要知道 所有system 分区的文件权限其实都已经在代码中 给预先定义好了, 所以如果要改su文件的路径,那么 代码中定义的权限也需要改掉. 同样如果我们需要在 system分区新增加文件, 也需要去定义权限.

      该权限文件路径 AOSP/system/core/libcutils/fs_config.cpp 摘取代码片段如下:

    { 00600, AID_ROOT,      AID_ROOT,      0, "system/build.prop" },
    { 00444, AID_ROOT,      AID_ROOT,      0, sys_conf_dir + 1 },
    { 00444, AID_ROOT,      AID_ROOT,      0, sys_conf_file + 1 },
    { 00440, AID_ROOT,      AID_SHELL,     0, "system/etc/init.goldfish.rc" },
    { 00550, AID_ROOT,      AID_SHELL,     0, "system/etc/init.goldfish.sh" },
    { 00550, AID_ROOT,      AID_SHELL,     0, "system/etc/init.ril" },
    { 00555, AID_ROOT,      AID_ROOT,      0, "system/etc/ppp/*" },
    { 00555, AID_ROOT,      AID_ROOT,      0, "system/etc/rc.*" },
    { 00440, AID_ROOT,      AID_ROOT,      0, "system/etc/recovery.img" },
    { 00600, AID_ROOT,      AID_ROOT,      0, "vendor/build.prop" },
    { 00600, AID_ROOT,      AID_ROOT,      0, "vendor/default.prop" },
    { 00444, AID_ROOT,      AID_ROOT,      0, ven_conf_dir + 1 },
    { 00444, AID_ROOT,      AID_ROOT,      0, ven_conf_file + 1 },

    // the following two files are INTENTIONALLY set-uid, but they
    // are NOT included on user builds.
    { 06755, AID_ROOT,      AID_ROOT,      0, "system/xbin/procmem" },
    { 04750, AID_ROOT,      AID_SHELL,     0, "system/su" },

我们可以看到 其中 /system/su 就是我修改后的路径, 原本是 /system/xibin/su.

      此处修改完毕,还有一处aosp/system/sepolicy/private/file_contexts 该文件中 对于 /system/xbin/su的 声明也要改掉.

     改完编译后, 执行 /system/su 就会起效了. 直接执行 su 是找不到的. 

扫描二维码关注公众号,回复: 4506589 查看本文章

猜你喜欢

转载自blog.csdn.net/SpHinner/article/details/85001609
SU