当前位置:网站首页>Detection and analysis of simulator in an app

Detection and analysis of simulator in an app

2022-06-25 11:06:00 Hua Weiyun

The following is just part of the implementation of shared detection , And only for technology .

1. Implementation of test simulator

1. Test the simulator's imsi Of id Whether it is 310260000000000
Concrete implementation : Judge first if there is android.permission.READ_PHONE_STATE jurisdiction , In judging the current running environment imsi id Whether it is 310260000000000 This value , And judgment VoiceMailNumbe Is it equal to 15552175049 and GetDeviceId be equal to "000000000000000", "012345678912345" These two strings of values .

private static boolean a(Context context, String str, String[] strArr, String str2) {    boolean z;    boolean z2;    boolean z3;    String[] strArr2;    if (context.getPackageManager().checkPermission("android.permission.READ_PHONE_STATE", context.getPackageName()) == 0) {        z = true;    } else {        z = false;    }    if (z) {        z2 = false;        for (String str3 : d) {            if (z2 || StringUtils.equal(str3, str)) {                z2 = true;            } else {                z2 = false;            }        }    } else {        z2 = false;    }    if (strArr != null) {        for (String equal : strArr) {            if (StringUtils.equal(equal, "310260000000000") || z2) {                z3 = true;            } else {                z3 = false;            }        }    }    if (z2 || StringUtils.equal(str2, "15552175049")) {        return true;    }    return false;}

2. Check the driver file content of the simulator
Specific test steps : Judge /proc/tty/drivers Whether the file exists or can be read . Read out the specific content data to compare whether it contains goldfish character string

private static String[] b = {"goldfish"};
private static Boolean a() {

    String str;    File file = new File("/proc/tty/drivers");    if (!file.exists() || !file.canRead()) {        String str2 = "EmulatorChecker";        StringBuilder sb = new StringBuilder("can not read file /proc/tty/drivers ,because");        if (file.exists()) {            str = "not exist";        } else {            str = "not readable";        }        sb.append(str);        Logger.e(str2, sb.toString());    } else {        byte[] bArr = new byte[1024];        try {            FileInputStream fileInputStream = new FileInputStream(file);            fileInputStream.read(bArr);            fileInputStream.close();        } catch (Exception unused) {        }        String str3 = new String(bArr);        for (String contains : b) {            if (str3.contains(contains)) {                return Boolean.TRUE;            }        }    }    return Boolean.FALSE;}

3. Detect specific files and file attributes of the simulator
Specific steps : Judge to read the specified file and file properties , And judging the unique Genymotion Simulator , It's using ro.product.manufacturer Read the way of the mobile phone manufacturer

private static int a(h hVar) {

    int i;    int i2;    String[] strArr = {"/system/bin/qemu_props", "/system/bin/androVM-prop", "/system/bin/microvirt-prop", "/system/lib/libdroid4x.so", "/system/bin/windroyed", "/system/bin/microvirtd", "/system/bin/nox-prop", "/system/bin/ttVM-prop", "/system/bin/droid4x-prop", "/data/.bluestacks.prop"};    String[] strArr2 = {"init.svc.vbox86-setup", "init.svc.droid4x", "init.svc.qemud", "init.svc.su_kpbs_daemon", "init.svc.noxd", "init.svc.ttVM_x86-setup", "init.svc.xxkmsg", "init.svc.microvirtd", "ro.kernel.android.qemud", "androVM.vbox_dpi", "androVM.vbox_graph_mode"};    int i3 = 0;    for (int i4 = 0; i4 < 10; i4++) {        if (a(strArr[i4])) {            i2 = 1 << i4;        } else {            i2 = 0;        }        i3 |= i2;        a(strArr[i4]);    }    int i5 = 10;    for (int i6 = 0; i6 < 11; i6++) {        String str = strArr2[i6];        if (StringUtils.isEmpty(hVar.a(str))) {            i = 0;        } else {            i = 1 << i5;        }        i3 |= i;        StringUtils.isEmpty(hVar.a(str));        i5++;    }    Pair pair = new Pair("ro.product.manufacturer", "Genymotion");    String a2 = hVar.a((String) pair.first);    if (StringUtils.isEmpty(a2) || !a2.contains((CharSequence) pair.second)) {        return i3;    }    return i3 | (1 << i5);}

4. Determine whether the specified device file exists
Determine whether the following three files exist

private static String[] c = {"/dev/socket/qemud", "/dev/qemu_pipe", "/dev/qemu_trace"};

private static boolean a(String str) {

    if (StringUtils.isEmpty(str)) {        return false;    }    File file = new File(str);    if (file.exists()) {        return true;    }    try {        new FileInputStream(file);        return true;    } catch (FileNotFoundException e) {        if (!e.getMessage().contains("No such file or directory")) {            return true;        }        return false;    }}
原网站

版权声明
本文为[Hua Weiyun]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/176/202206251046553690.html