AOSP 隐藏 su

本文介绍了一种在Android设备上隐藏root权限的方法,通过修改su文件路径和procmem文件,同时更新fs_config.cpp和file_contexts文件中的权限设置,使应用无法检测到root状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       我们在开发过程中会用到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 是找不到的. 

### 如何在AOSP Launcher中隐藏所有图标或应用 为了实现隐藏所有的应用程序图标,在AOSP(Android Open Source Project)Launcher中的方法涉及修改源码。具体来说,可以通过调整`Workspace.java`文件来控制图标的显示逻辑。 #### 修改 `Workspace.java` 通过编辑`packages/apps/Launcher/src/com/android/launcher3/Workspace.java` 文件,可以改变工作区的行为模式: 1. **过滤器机制** 可以为`Workspace`类添加一个新的布尔变量用于启用或禁用图标显示功能。当此标志设置为true时,则不绘制任何快捷方式项[^4]。 ```java private boolean mHideAllIcons = false; public void setHideAllIcons(boolean hide) { mHideAllIcons = hide; } ``` 2. **重写视图渲染函数** 接下来需要覆盖负责加载并呈现桌面布局的方法。通常是在`bindAppsGrid()` 或者类似的函数里操作。这里要加入条件判断语句检查上述定义的状态位;如果处于隐藏状态则跳过实际的数据绑定过程[^5]。 ```java @Override protected void bindAppsGrid() { if (!mHideAllIcons) { super.bindAppsGrid(); } } ``` 3. **保存配置选项** 若要让用户能够切换这种行为而无需重新编译整个ROM镜像,建议利用SharedPreferences存储用户的偏好设定,并据此动态更新UI界面的表现形式[^6]。 ```java // 获取当前是否应该隐藏所有图标 boolean shouldHideIcons = getApplicationContext().getSharedPreferences("prefs", MODE_PRIVATE).getBoolean("hide_all_icons", false); workspace.setHideAllIcons(shouldHideIcons); ``` 以上就是一种可能的技术方案概述,当然也可以考虑其他更复杂的方式比如创建自定义权限管理模块等高级特性。值得注意的是这些改动可能会带来安全性和用户体验方面的影响,因此实施前务必充分评估风险利弊。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值