漏洞修复篇之 模拟器检测以及Root机型检测 如果是模拟器或者Root的机型 直接退出程序
/***
* 安全漏洞检测工具类
* **/
public class SafeUtils {
/***
* .通过设备硬件特征信息检测运行环境是否为模拟器
***/
public static Boolean CheckEmulatorBuild(Context context) {
String BOARD = android.os.Build.BOARD;
String BOOTLOADER = android.os.Build.BOOTLOADER;
String BRAND = android.os.Build.BRAND;
String DEVICE = android.os.Build.DEVICE;
String HARDWARE = android.os.Build.HARDWARE;
String MODEL = android.os.Build.MODEL;
String PRODUCT = android.os.Build.PRODUCT;
if (BOARD == "unknown" || BOOTLOADER == "unknown" || BRAND == "generic"
|| DEVICE == "generic" || MODEL == "sdk" || PRODUCT == "sdk"
|| HARDWARE == "goldfish") {
return true;
}
return false;
}
/**
* .通过检测指定目录下是否存在su程序来检测运行环境是否为Root设备
*
**/
public static boolean CheckRootPathSU() {
File f = null;
final String kSuSearchPaths[] = { "/system/bin/", "/system/xbin/",
"/system/sbin/", "/sbin/", "/vendor/bin/" };
try {
for (int i = 0; i < kSuSearchPaths.length; i++) {
f = new File(kSuSearchPaths[i] + "su");
if (f != null && f.exists()) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/** * 判断是否是调试模式 * 需要把mainfest中的debugger去掉 */ public static boolean isApkDebugable(Context context) { try { ApplicationInfo info = context.getApplicationInfo(); return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; } catch (Exception e) { } return false; } public static boolean isApkDebugable(Context context,String packageName) { try { PackageInfo pkginfo = context.getPackageManager().getPackageInfo( packageName, 1); if (pkginfo != null ) { ApplicationInfo info= pkginfo.applicationInfo; return (info.flags&ApplicationInfo.FLAG_DEBUGGABLE)!=0; } } catch (Exception e) { } return false; }
}