刺激战场是如何检测你是用模拟器玩的
1.传统的检测方法。
传统的检测方法主要是对模拟器的IMSI、IDS、默认文件等几个方面进行检测。
(1)默认号码:
[java] view plain copyprivate static String[] known_numbers = {"15555215554", "15555215556", "15555215558", "15555215560", "15555215562", "15555215564", "15555215566", "15555215568", "15555215570", "15555215572", "15555215574", "15555215576", "15555215578", "15555215580", "15555215582", "15555215584"};
(2)默认ID:[java] view plain copyprivate static String[] known_device_ids = {"000000000000000"};
(3)默认IMSI:[java] view plain copyprivate static String[] known_imsi_ids = {"310260000000000"};
(4)默认文件路径:[java] view plain copyprivate static String[] known_files = { "/system/lib/libc_malloc_debug_qemu.so", "/sys/qemu_trace", "/system/bin/qemu-props"};
在得知了这些信息后,只需在运行时进行检测,如果检测结果和默认值吻合,那么检测设备便是模拟器。不过随着防反作弊技术的迭代,现在很多模拟器都可以改变这些值来逃避检测,所以上述传统方法在很多时候未曾达到开发者的预期效果。
2.基于模拟器cpu信息的检测。
成功率相较于传统方法,有了更高的成功率。
cpu信息检测主要是在cpu信息看看是否包含intel、amd等字段,很多模拟器目前对于cpu信息还无法进行模拟。
(1)读取cpu信息:
[html] view plain copypublic static String readCpuInfo() { String result = ""; try { String[] args = {"/system/bin/cat", "/proc/cpuinfo"}; ProcessBuilder cmd = new ProcessBuilder(args); Process process = cmd.start(); StringBuffer sb = new StringBuffer(); String readLine = ""; BufferedReader responseReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "utf-8")); while ((readLine = responseReader.readLine()) != null) { sb.append(readLine); } responseReader.close(); result = sb.toString().toLowerCase(); } catch (IOException ex) { } return result; }
(2)进行判定:[java] view plain copyString cpuInfo = readCpuInfo(); if ((cpuInfo.contains("intel") || cpuInfo.contains("amd"))) {return true;}
类似的还有[java] view plain copyString[] blockList = "google_sdk,sdk,sdk_x86,vbox86p".split(",");
原理相同。
3.关键路径检测特定模拟器检测
前面2个方法在很大程度上已经可以鉴定出很多模拟器了,但是对于某些在反防作弊上同样热爱的模拟器,需要特定的检测方法。
bluestacks成功躲避了前两种检测方法,所以在这里给予其VIP的待遇。
以下是总结出来的一些bluestacks的关键路径:
[java] view plain copyprivate static String[] known_bluestacks = {"/data/app/com.bluestacks.appmart-1.apk", "/data/app/com.bluestacks.BstCommandProcessor-1.apk", "/data/app/com.bluestacks.help-1.apk", "/data/app/com.bluestacks.home-1.apk", "/data/app/com.bluestacks.s2p-1.apk", "/data/app/com.bluestacks.searchapp-1.apk", "/data/bluestacks.prop", "/data/data/com.androVM.vmconfig", "/data/data/com.bluestacks.accelerometerui", "/data/data/com.bluestacks.appfinder", "/data/data/com.bluestacks.appmart", "/data/data/com.bluestacks.appsettings", "/data/data/com.bluestacks.BstCommandProcessor", "/data/data/com.bluestacks.bstfolder", "/data/data/com.bluestacks.help", "/data/data/com.bluestacks.home", "/data/data/com.bluestacks.s2p", "/data/data/com.bluestacks.searchapp", "/data/data/com.bluestacks.settings", "/data/data/com.bluestacks.setup", "/data/data/com.bluestacks.spotlight", "/mnt/prebundledapps/bluestacks.prop.orig" };
检测方法:
[java] view plain copypublic static boolean checkBlueStacksFiles() { for (int i = 0; i < known_bluestacks.length; i++) { String file_name = known_bluestacks[i]; File qemu_file = new File(file_name); if (qemu_file.exists()) { FkLog.e("Result : Find BlueStacks Files!"); return true; } } FkLog.e("Result : Not Find BlueStacks Files!"); return false; }
这种基于关键路径的检测,便可以成功的检测出bluestacks。
默认文件等几个方面进行检测,,
人家有特定的检测机制
可以的可以的
可以看看所玩游戏的说明书或简介,是如何交代的,应该可以解决问题。
查验功能选项