Android检测设备是否已经root详解以及如何避免检测

系统:Android
平台:MTK

对于一些应用(像apple music 4.7版本以及之后的版本),会检测该设备是否已经root过,root过的设备就无法正常使用该应用,那么我们该如何处理,使得该应用能正常的使用在咱们的设备上,
方案有两种,但都需要可以对Android源码进行定制的能力。

  1. 修改su的二进制文件的保存位置。
  2. 修改su在系统中的名称,避免被检测。

在讨论如何使root过的设备能正常使用该APP前,我们需要先了解检测的方案是什么样的。

一、一般性的检测方案

检测方案会对Android设备特定目录检测二进制文件(su)的存在,如果存在则判定设备已经被root过,可以执行只有root用户才能执行的操作,下面的函数即可检测:

private boolean checkRootMethod1() {
    String[] paths = {
            "/system/app/Superuser.apk",     // SuperSU的APK路径
            "/sbin/su",                       // su二进制文件路径
            "/system/bin/su",                 // su二进制文件路径
            "/system/xbin/su",                // su二进制文件路径
            "/data/local/xbin/su",            // su二进制文件路径
            "/data/local/bin/su",             // su二进制文件路径
            "/system/sd/xbin/su",             // su二进制文件路径
            "/system/bin/failsafe/su",        // su二进制文件路径
            "/data/local/su",                 // su二进制文件路径
    };
    for (String path : paths) {
        if (new File(path).exists()) return true;
    }
    return false;
}

其实从检测的目录中,我们也可以想到对应的策略去避免被检测 出来。

二、屏蔽root设备检测

从检测方案中我们可以想到对应的策略去规避检测。

2.1 更改su的存放位置

此时需要对应修改su的编译脚本,更改对应的生成的su文件测放的位置。
编译脚本位置:system/extra/su/Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS := -std=c11 -Wall -Werror
LOCAL_SRC_FILES:= su.c
LOCAL_MODULE:= su
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_MODULE_TAGS := option 
//option指的是系统指定编译才会编译
//如果是debug就表示如果编译debug版本的a 就编译进去
include $(BUILD_EXECUTABLE)

TARGET_OUT_OPTIONAL_EXECUTABLES:该参数便决定了编译完成后,su文件在系统重存放的位置。其为编译脚本的宏定义,在Android源码的build目录下可以找到相应的定义,了解对应的具体指代位置。

  1. 直接改为指定的目录文件可以吗?
    答案是不可以,因为试过,没有生效,当然也有可能是我没改到位。
  2. 怎么改有效果?
    查看当前系统中的宏定义有没有自己需要的目录位置,例如:vendor目录的宏定义,TARGET_OUT_VENDOR_OPTIONAL_EXECUTABLES,即可将其改到系统的vendor目录下。
    **注意:**事先在out目录清除之前生成的su文件,不然依旧会将其打包进入img文件中。
  3. 还需要修改对应的权限文件,在system/meditek/sepolicy/中,修改原来su对应权限项从而完成完整的替换。

2.2更改su文件的名称

即修改原su二进制可执行文件的名字,改名字即修改Android.mk里面模块的名字即可。打包成名字即为修改后的名字。

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS := -std=c11 -Wall -Werror
LOCAL_SRC_FILES:= su.c
LOCAL_MODULE:= sus
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_MODULE_TAGS := option 

例如上方将其改为sus,在编译成系统镜像之后,便可以实现在系统重调用sus获取root权限。也要注意修改对应的权限文件,在system/meditek/sepolicy/中,修改原来su对应权限项从而完成完整的替换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值