当前位置:网站首页>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; }}边栏推荐
- Network protocol learning -- lldp protocol learning
- 10.1. Oracle constraint deferred, not deferred, initially deferred and initially deferred
- Complete steps for a complete Oracle uninstall
- 从GEE中免费获取全球人类住区层 (GHSL) 数据集
- 一个数学难题,难倒两位数学家
- Daily 3 questions (3) - check whether integers and their multiples exist
- 中國信通院沈瀅:字體開源協議——OFL V1.1介紹及合規要點分析
- 金仓数据库 KingbaseES 插件DBMS_OUTPUT
- 之前字符串反转的题目
- 【文件包含漏洞-04】经典面试题:已知某网站仅存在本地文件包含漏洞时,如何GetShell?
猜你喜欢

c盘使用100%清理方法

Sign up to open the third session of the "flying oar hacker marathon". It's been a long time

A five-year technical Er, based on the real experience of these years, gives some suggestions to the fresh students

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

Chinese translation of IMA Lazarus' the new giant, the goddess of Liberty

Open source invites you to participate in the openssf Open Source Security Online Seminar

Nuxtjs actual combat case

查询法,中断法实现USART通信

网易开源的分布式存储系统 Curve 正式成为 CNCF 沙箱项目

Opencv learning (II) -- installing opencv on raspberry pie
随机推荐
Is it safe for Guosen Securities to open a securities account
1-7snapshots and clones in VMWare
龙书虎书鲸书啃不动?试试豆瓣评分9.5的猴书
有关计网的五种类型题
Get to know Prometheus
查询法,中断法实现USART通信
金仓数据库 KingbaseES 插件identity_pwdexp
软件测试 避免“试用期被辞退“指南,看这一篇就够了
Dependent properties, dependent additional properties, and type conversions
OODA工作法
Opencv learning (II) -- installing opencv on raspberry pie
【上云精品】节能提效!加速纺织业“智造”转型
Floating window --- create a system floating window (can be dragged)
Upload and modify the use of avatars
Shardingsphere proxy 5.0 sub database and sub table (I)
Array structure collation
服务端渲染
3 Questions par jour (3) - vérifier l'existence d'entiers et de leurs doubles
金仓数据库 KingbaseES 插件dbms_session
Network protocol learning -- lldp protocol learning