当前位置:网站首页>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; }}边栏推荐
猜你喜欢

看完这篇 教你玩转渗透测试靶机Vulnhub——DriftingBlues-7

Explanation and use of kotlin syntax for Android

报名开启|飞桨黑客马拉松第三期如约而至,久等啦

XSS attack

Compilation of learning from Wang Shuang (1)

ES 学习

龙书虎书鲸书啃不动?试试豆瓣评分9.5的猴书

Use of three-level linkage plug-ins selected by provinces and cities
![[file containing vulnerability-03] six ways to exploit file containing vulnerabilities](/img/4f/495c852eb0e634c58e576d911a2c14.png)
[file containing vulnerability-03] six ways to exploit file containing vulnerabilities

c盘使用100%清理方法
随机推荐
软件测试 避免“试用期被辞退“指南,看这一篇就够了
Daily 3 questions (2) - find out the lucky numbers in the array
CDN+COS搭建图床超详细步骤
Output reading: apply what you have learned
June 24, 2022: golang multiple choice question, what does the following golang code output? A:1; B:3; C:4; D: Compilation failed. package main import ( “fmt“ ) func mai
金仓数据库 KingbaseES 插件dbms_session
SystemVerilog(十三)-枚举数据类型
Five types of questions about network planning
Kotlin arrays and collections (1) {create arrays, use arrays, use for in loops to traverse arrays, use array indexes, and multi-dimensional arrays}
一文了解Prometheus
Google Earth engine (GEE) - evaluate enables one click batch download of all single images in the research area (some areas in Shanghai)
垃圾回收机制
【文件包含漏洞-03】文件包含漏洞的六种利用方式
龙书虎书鲸书啃不动?试试豆瓣评分9.5的猴书
16 enterprise architecture strategies
Apache ShenYu 入门
Application of global route guard
MySQL synchronous data configuration and shell script implementation
[observation] objectscale: redefining the next generation of object storage, reconstruction and innovation of Dell Technology
Performance file system