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 是找不到的. 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章