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

本文总结了检测Android设备是否被Root的各种方法,包括检查特定应用、文件路径、系统属性及可写目录等,旨在增强应用的安全性和稳定性。

转载:https://blog.youkuaiyun.com/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

### 如何检测设备是否已被Root或正在运行自动化工具 #### 检测设备是否已被Root 在Android设备中,Root权限允许用户访问系统的受限区域并修改核心功能。以下是几种常见方法用于判断设备是否已获得Root权限: 1. **通过`su`二进制文件检查** Root权限通常依赖于名为`su`的二进制文件存在与否。可以通过以下命令查找该文件是否存在: ```bash which su || whereis su ``` 如果返回路径,则说明可能已经获取了Root权限[^1]。 2. **利用第三方库检测** 存在一些专门设计用来检测Root状态的Java/Kotlin库,例如`RootBeer`。它可以扫描常见的Root标志物以及隐藏的Root行为模式。 ```java import com.scottyab.rootbeer.RootBeer; public class MainActivity { public static void main(String[] args) { RootBeer rootBeer = new RootBeer(this); boolean isRooted = rootBeer.isDeviceRooted(); System.out.println("Is Device Rooted? " + isRooted); } } ``` 3. **分析系统属性和日志** 可以读取特定的日志条目或者系统属性来确认是否有异常活动表明Root操作的存在。比如查看SELinux的状态: ```bash getenforce ``` 若输出为`Permissive`而非`Enforcing`,则可能是由于Root引起的配置更改[^1]。 #### 检测是否正运行自动化工具 对于防止自动化脚本绕过安全机制的情况,可以从以下几个方面入手: 1. **监控API调用频率** 自动化工具往往表现出规律性的交互特征,如点击间隔固定不变、滑动轨迹直线等不自然的行为。因此设置阈值去监测这些指标有助于识别潜在威胁。 2. **启用无障碍服务(AccessibilityService)** Android平台提供了Accessibility API供开发者创建辅助应用的同时也赋予其强大的控制能力。然而恶意程序也可能滥用此接口模拟人为动作完成某些任务。故而应当谨慎授予此类权限给不可信任的应用,并定期审查授权列表。 3. **借助官方框架特性——UiAutomator Verifier** Google推出的Selenium WebDriver兼容组件能够协助验证界面元素的真实性及其背后逻辑流程的一致性。当发现任何偏离预期的结果时即可触发警报机制停止进一步处理直至人工介入核查完毕为止[^3]。 ```python from selenium.webdriver.common.action_chains import ActionChains import time def check_for_automation(driver): actions = ActionChains(driver) # Simulate human-like behavior by adding random delays between actions. def perform_action_with_delay(action_func, delay_min=0.5, delay_max=1.5): action_func() time.sleep(random.uniform(delay_min, delay_max)) try: element_to_click = driver.find_element_by_id('some_button') # Check click pattern consistency over multiple iterations. for _ in range(5): # Example number of checks; adjust as needed. start_time = time.time() perform_action_with_delay(lambda: actions.click(element_to_click).perform()) end_time = time.time() - start_time if not (delay_min <= end_time <= delay_max * 1.2): # Allow slight variance. raise Exception("Suspicious automation detected based on timing analysis.") except Exception as e: print(f"Error during detection process: {e}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值