当前位置:网站首页>某APP中模拟器检测分析
某APP中模拟器检测分析
2022-06-25 10:47:00 【华为云】
以下的只是分享检测的一部分实现,并且仅为技术研究。
1.检测模拟器的实现
1.检测模拟器的 imsi的 id是否是310260000000000
具体的实现:先判断是否有android.permission.READ_PHONE_STATE权限,在判断当前的运行环境的imsi id 是否是310260000000000这个值,以及判断VoiceMailNumbe是否等于15552175049和 GetDeviceId等于"000000000000000", "012345678912345"这两串值。
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.检测模拟器的驱动文件内容
具体的检测步骤:判断/proc/tty/drivers 文件是否存在是否可读取。可读情况下读取出具体的内容数据进行比对是否包含goldfish字符串
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.检测模拟器的特定文件及文件属性
具体的步骤:判断读取指定的文件及文件属性,以及判断特有的Genymotion模拟器,采用的是ro.product.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.判断指定的设备文件是否存在
判断下面三个文件是否存在
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; }}边栏推荐
- Handler asynchronous message processing
- 西门子PLCS7-200使用(一)---开发环境和组态软件入门
- Learn to learn self-study [learning to learn itself is more important than learning anything]
- 金仓数据库 KingbaseES 插件identity_pwdexp
- 今天16:00 | 中科院计算所研究员孙晓明老师带大家走进量子的世界
- [paper reading | deep reading] drne:deep recursive network embedding with regular equivalence
- NETCORE performance troubleshooting
- MySQL synchronous data configuration and shell script implementation
- XSS攻击
- A five-year technical Er, based on the real experience of these years, gives some suggestions to the fresh students
猜你喜欢

Use of Siemens plcs7-200 (I) -- Introduction to development environment and configuration software

单片机进阶---PCB开发之照葫芦画瓢(二)

NuxtJS实战案例

开源社邀请您参加OpenSSF开源安全线上研讨会

Task03 probability theory

CSRF attack

Es learning

Technical practice and development trend of video conference all in one machine

TASK03|概率论

NETCORE performance troubleshooting
随机推荐
手机办理长投学堂证券开户靠谱安全吗?
Socket communication principle
Flutter adds event listening | subscription
Use of three-level linkage plug-ins selected by provinces and cities
Open source invites you to participate in the openssf Open Source Security Online Seminar
性能之内存篇
今天16:00 | 中科院计算所研究员孙晓明老师带大家走进量子的世界
一个五年北漂的技术er,根据这些年的真实经历,给应届生的一些建议
scrapy+scrapyd+gerapy 爬虫调度框架
有关计网的五种类型题
金仓KFS数据级联场景部署
性能之文件系统篇
Es learning
VW VH adaptation of mobile terminal
Shen Ying, China Academy of communications and communications: font open source protocol -- Introduction to ofl v1.1 and analysis of key points of compliance
《天天数学》连载52:二月二十日
ES 学习
2022-06-24:golang选择题,以下golang代码输出什么?A:1;B:3;C:4;D:编译失败。 package main import ( “fmt“ ) func mai
每日3題(3)-檢查整數及其兩倍數是否存在
金仓数据库 KingbaseES 插件dbms_session