当前位置:网站首页>某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; }}边栏推荐
- Continuous delivery jenkinsfile syntax
- 16 种企业架构策略
- XSS攻击
- Flutter adds event listening | subscription
- OODA工作法
- 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
- FPGA基于VGA显示字符及图片
- NETCORE performance troubleshooting
- Google Earth Engine(GEE)——evaluate实现一键批量下载研究区内的所有单张影像(上海市部分区域)
- 【图像融合】基于形态学分析结合稀疏表征实现图像融合附matlab代码
猜你喜欢

Explanation and use of kotlin syntax for Android

Complete steps for a complete Oracle uninstall

之前字符串反转的题目

CSRF attack

Your driver settings have been set to force 4x antialiasing in OpenGL applications

Shardingsphere proxy 5.0 sub database and sub table (I)

CSRF攻击

MCU development -- face recognition application based on esp32-cam

Shen Lu, China Communications Institute: police open source Protocol - ofl v1.1 Introduction and Compliance Analysis

报名开启|飞桨黑客马拉松第三期如约而至,久等啦
随机推荐
OODA工作法
金仓KFS数据级联场景部署
Array structure collation
Writing wechat applet with uni app
NETCORE performance troubleshooting
Houdini graphic notes: could not create OpenCL device of type (houdini_ocl_devicetype) problem solving
Multiple environment variables
Dell technology performs the "fast" formula and plays ci/cd
At 16:00 today, Mr. sunxiaoming, a researcher of the Institute of computing, Chinese Academy of Sciences, took you into the quantum world
网易开源的分布式存储系统 Curve 正式成为 CNCF 沙箱项目
Application of global route guard
10.1. Oracle constraint deferred, not deferred, initially deferred and initially deferred
Output reading: apply what you have learned
2022-06-24:golang选择题,以下golang代码输出什么?A:1;B:3;C:4;D:编译失败。 package main import ( “fmt“ ) func mai
Is it safe to open a securities account in changtou school by mobile phone?
金仓数据库 KingbaseES 插件DBMS_RANDOM
金仓数据库 KingbaseES 插件dbms_session
戴尔科技演绎“快”字诀,玩转CI/CD
ES 学习
Think about it