建设银行检测到设备已被Root的判断

转载:https://blog.csdn.net/m0_37735448/article/details/102555244

判断Android设备Root方法总结
先说结论没有办法完全检测出设备是否被root,因为root权限拥有系统的最高权限。 已经root的设备可以通过修改系统文件,和Hook来躲避检查。我们只能增加他躲避检查的难度来检测root权限。
1,通过判断是否存在一些已知的root程序包名来判断机器是否被root
"com.noshufou.android.su",
"com.noshufou.android.su.elite",
"eu.chainfire.supersu",
"com.koushikdutta.superuser",
"com.thirdparty.superuser",
"com.yellowes.su",
"com.topjohnwu.magisk"
2,通过判断是否存在一些危险应用,比如必须需要root权限才能使用的应用的包名来判断是否被root
    这个方法可能会误杀一些手机,可以根据自己需求添加这个方法

"com.koushikdutta.rommanager",
"com.koushikdutta.rommanager.license",
"com.dimonvideo.luckypatcher",
"com.chelpus.lackypatch",
"com.ramdroid.appquarantine",
"com.ramdroid.appquarantinepro",
"com.android.vending.billing.InAppBillingService.COIN",
"com.chelpus.luckypatcher"

3,检测一些常用目录是否有su文件
"/data/local/",
"/data/local/bin/",
"/data/local/xbin/",
"/sbin/",
"/su/bin/",
"/system/bin/",
"/system/bin/.ext/",
"/system/bin/failsafe/",
"/system/sd/xbin/",
"/system/usr/we-need-root/",
"/system/xbin/",
"/cache/",
"/data/",
"/dev/"

除了这种方法还可以通过Linux 的which命令来查找su文件,这样会更全面的查找。但是不可避免的一个问题就是,如果曾经root过但是root权限已经失效的设备会被判断成已经root。这个可以根据需求添加

4,判断ro.debuggable属性和ro.secure属性
    默认手机出厂后ro.debuggable属性应该为0,ro.secure应该为1。而root需要修改secure这个属性,如果这个属性被修改则认为这台手机被root了

5,判断一些系统路径是否可写。
    Android中一些系统目录在没有root权限的情况下是不可写入的,如果我们对这些目录有写入的权限则判断这台设备已经被Root

"/system",
"/system/bin",
"/system/sbin",
"/system/xbin",
"/vendor/bin",
"/sbin",
"/etc",
6,判断系统的Tags标签
    如果是正式发布版本的系统android.os.Build.TAGS的属性应该是release-keys,如果是test-keys,很可能是非官方正式发布的ROM,则判断设备被替换了ROM,被root了。这个方法不一定准确,根据自己情况添加。
 

建设银行解析后的判断节点有:

package com.secneo.apkwrapper; 

public final class a {
    
    不能包含下面这些apk文件:
    public static final String[] a = new String[]{"com.noshufou.android.su", "com.noshufou.android.su.elite", "eu.chainfire.supersu", "com.koushikdutta.superuser", "com.thirdparty.superuser", "com.yellowes.su"};
    public static final String[] b = new String[]{"com.koushikdutta.rommanager", "com.koushikdutta.rommanager.license", "com.dimonvideo.luckypatcher", "com.chelpus.lackypatch", "com.ramdroid.appquarantine", "com.ramdroid.appquarantinepro"};
    public static final String[] c = new String[]{"com.devadvance.rootcloak", "com.devadvance.rootcloakplus", "de.robv.android.xposed.installer", "com.saurik.substrate", "com.zachspong.temprootremovejb", "com.amphoras.hidemyroot", "com.amphoras.hidemyrootadfree", "com.formyhm.hiderootPremium", "com.formyhm.hideroot"};
    
    以下文件可以执行su操作:
    public static final String[] d = new String[]{"/data/local/", 
                                                  "/data/local/bin/", 
                                                  "/data/local/xbin/", 
                                                  "/sbin/", 
                                                  "/su/bin/", 
                                                  "/system/bin/", 
                                                  "/system/bin/.ext/", 
                                                  "/system/bin/failsafe/", 
                                                  "/system/sd/xbin/", 
                                                  "/system/usr/we-need-root/", 
                                                  "/system/xbin/"};
    
    以下目录是否有写入的权限: (成功)
    public static final String[] e = new String[]{"/system", 
                                                  "/system/bin", 
                                                  "/system/sbin", 
                                                  "/system/xbin", 
                                                  "/vendor/bin", 
                                                  "/sbin", 
                                                  "/etc"};
}

Android P的源码修改方案:

ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
    ifeq ($(TARGET_BUILD_VARIANT),user)
        BUILD_KEYS := release-keys
    else
        BUILD_KEYS := test-keys
    endif
else
BUILD_KEYS := dev-keys
endif

猜你喜欢

转载自blog.csdn.net/liuminx/article/details/106527080