安卓APP环境检测

本文介绍了如何通过检查AndroidManifest.xml配置、应用是否被调试、识别模拟器、检测root权限、分析APP安装列表以及无障碍服务,提供了一套全面的APP环境检测方法。

检测是否调试APP

这个原理就是APP的AndroidManifest.xml文件中application是否配置了android:debuggable="true",设置true支持动态调试public static boolean isAppDebuggable(Context context) {

    return (context.getApplicationInfo().flags & 2) != 0;}

检测当前APP是否被动态调试中

public static boolean isDebuggerAttached() {
  
      return Debug.isDebuggerConnected() || Debug.waitingForDebugger();}
检测是否模拟器

这里获取了Android id,如果Android id是null,就是模拟器?如果包含GOLDFISH字符串也属于模拟器

public static boolean isEmulator(Context context) {
  
      return Build.PRODUCT.contains(SDK) || Build.HARDWARE.contains(GOLDFISH) || Build.HARDWARE.contains(RANCHU) || Settings.Secure.getString(context.getContentResolver(), "android_id") == null;}
root检测

检测系统的tags是不是test-keys

检测是不是安装了supersu的APP,检测su文件是否存在。

public static boolean isRooted(Context context) {
  
          boolean isEmulator = isEmulator(context);        String str = Build.TAGS;        if ((isEmulator || str == null || !str.contains("test-keys")) && !new File("/system/app/Superuser.apk").exists()) {
  
              return !isEmulator && new File("/system/xbin/su").exists();        }        return true;}

判断一些root的APP是否安装​​​​​​​

private final boolean a(List<String> list) {
  
          PackageManager packageManager = this.b.getPackageManager();        boolean z = false;        for (String str : list) {
  
              try {
  
                  packageManager.getPackageInfo(str, 0);                C0339Io.h.e(str + " ROOT management app detected!");                z = true;            } catch (PackageManager.NameNotFoundException unused) {
  
              }        }        return z;}

通过which su寻找su文件​​​​​​​

public final boolean f() {
  
          /*            r5 = this;            r0 = 0            r1 = 0            java.lang.Runtime r2 = java.lang.Runtime.getRuntime()     // Catch: java.lang.Throwable -> L2f            java.lang.String r3 = "which"            java.lang.String r4 = "su"            java.lang.String[] r3 = new java.lang.String[]{r3, r4}     // Catch: java.lang.Throwable -> L2f            java.lang.Process r1 = r2.exec(r3)     // Catch: java.lang.Throwable -> L2f            java.io.BufferedReader r2 = new java.io.BufferedReader     // Catch: java.lang.Throwable -> L2f            java.io.InputStreamReader r3 = new java.io.InputStreamReader     // Catch: java.lang.Throwabl
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值