Android模拟器检测常用方法
在Android开发过程中,防作弊一直是老生常谈的问题,而模拟器的检测往往是防作弊中的重要一环,接下来有关于模拟器的检测方法,和大家进行一个简单的分享。
1.传统的检测方法。
传统的检测方法主要是对模拟器的IMSI、IDS、默认文件等几个方面进行检测。
(1)默认号码:
- private static String[] known_numbers = {"15555215554", "15555215556",
- "15555215558", "15555215560", "15555215562", "15555215564",
- "15555215566", "15555215568", "15555215570", "15555215572",
- "15555215574", "15555215576", "15555215578", "15555215580",
- "15555215582", "15555215584"};
(2)默认ID:
- private static String[] known_device_ids = {"000000000000000"};
(3)默认IMSI:
- private static String[] known_imsi_ids = {"310260000000000"};
(4)默认文件路径:
- private 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信息:
- public 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)进行判定:
- String cpuInfo = readCpuInfo();
- if ((cpuInfo.contains("intel") || cpuInfo.contains("amd"))) {return true;}
类似的还有
- String[] blockList = "google_sdk,sdk,sdk_x86,vbox86p".split(",");
原理相同。
3.关键路径检测特定模拟器检测
前面2个方法在很大程度上已经可以鉴定出很多模拟器了,但是对于某些在反防作弊上同样热爱的模拟器,需要特定的检测方法。
bluestacks成功躲避了前两种检测方法,所以在这里给予其VIP的待遇。
以下是总结出来的一些bluestacks的关键路径:
- private 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"
- };
检测方法:
- public 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。
4.模拟器检测新思路
模拟器检测与模拟器反检测都在不断的更新迭代中,无法确保哪一种方法会永垂不朽,在这里分享下新的思路。
电池信息检测
可以从电池的温度和电量等信息入手,检测温度在使用过程中是否一直保持不变、或者是电量一直是固定值并且不是百分之百等等。
亲测可以鉴别出genymotion、bluestacks等主流模拟器。
5.写在最后
其实很多时候在检测模拟器的过程中,都不是只使用某一种固定的方法,一来需要具体问题具体分析,二来也需要用多种方法来综合检测。言而总之,有了十八般武艺才能见招拆招。
ps:如有错误或需要补充的地方,请各位多多指正~
http://blog.csdn.net/sinat_33150417/article/details/51320228
Android模拟器检测常用方法的更多相关文章
- Android 模拟器检测
参考链接:https://github.com/MindMac/HideAndroidEmulator 从多个方面识别模拟器1.用户习惯:联系人数量.短信数量.相册里面照片数量.安装的应用2.从IME ...
- PC电脑运行Android模拟器总是弹出“视频源”窗体的原因和解决方案
原因: PC电脑运行Android模拟器时弹出“视频源”窗体,会让你"选择视频设备",如:HP TruevIsion HD,而这个视频设备就是你电脑中的内置摄像头,这个内置摄像头在 ...
- Delphi XE7下如何创建一个Android模拟器调试
利用Delphi XE7我们可以进行多种设备程序的开发,尤其是移动开发应用程序得到不断地加强.在实际的Android移动程序开发中,如果我们直接用android真机直接调试是非常不错.一是速度快,二是 ...
- Android 手势检测实战 打造支持缩放平移的图片预览效果(下)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39480503,本文出自:[张鸿洋的博客] 上一篇已经带大家实现了自由的放大缩小图 ...
- Android root检测方法小结
转载目的,之前主要应用这里的原理解决了,手机被某个APP检测为root过的手机的问题,记录后续可能参考. 出于安全原因,我们的应用程序不建议在已经root的设备上运行,所以需要检测是否设备已经root ...
- 【Android】Android模拟器的安装
目录结构: contents structure [+] 使用VMware安装Android模拟器 安装安卓(Android)系统前VMware虚拟机的配置 安装安卓(Android)系统 安装安卓( ...
- 【转】Android root检测方法总结
一 为什么要进行root检测?出于安全原因,我们的应用程序不建议在已经root的设备上运行,所以需要检测是否设备已经root,以提示用户若继续使用会存在风险. 二 root了会有什么风险?在Linux ...
- 移动端自动化测试之android模拟器问题集合
黑屏 在做移动端自动化测试过程中,android模拟器启动黑屏的问题一直困扰着我,网上找了许多方法尝试了都不能解决我的问题,最后重新安装了镜像文件,问题才得以解决,当然并不是网上的解决办法都是错的,只 ...
- 第三方Android 模拟器流畅速度快,适合开发人员
“工欲善其事,必先利其器.” 使用Android模拟器开发和调试应用肯定比使用真机方便.但相比XCODE的IOS模拟器,Android SDK自带的AVD实在不争气,不过一些第三方的模拟器却表现不俗! ...
随机推荐
- 201521123017 《Java程序设计》第9周学习总结
1. 本周学习总结 2. 书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 1.3 什么样的 ...
- Java课程设计——计算数学表达式的程序(201521123051 谢庆圆)
计算数学表达式的程序(201521123051 谢庆圆) 1.团队课程设计博客链接 团队课程设计博客链接 2.个人负责模块或任务说明 1.计算数字表达式中操作按钮的实现(右容器) 2.. 注册监听器以 ...
- MarkDown模板
一个例子: 例子开始 1. 本章学习总结 今天主要学习了三个知识点 封装 继承 多态 2. 书面作业 Q1. java HelloWorld命令中,HelloWorld这个参数是什么含义? 今天学了一 ...
- idea使用转载【别人的专栏】
维C果糖
- Intellij idea 断点调试
前言 之前使用Intellij Idea断点调试都是极其简单的,都是下一步下一步下一步这样子-..还有最坑爹的以为:IDEA只能调试一次.调试完就要重启Tomcat服务器-..因此花了大量的冤枉时间- ...
- oracle 删除外键约束 禁用约束 启用约束
oracle 删除外键约束 禁用约束 启用约束 执行以下sql生成的语句即可 删除所有外键约束 Sql代码 select 'alter table '||table_name||' drop con ...
- Spring03-jdbc
1,Spring集成Jdbc,需要导入spring包和数据库驱动包,这里我们使用的是mysql驱动包 2,选择一个数据源(DBCP,C3P0),这里我们使用DBCP,需要导入DBCP驱动包 3,创建j ...
- 一款简单而不失强大的前端框架——【Vue.js的详细入门教程①】
↓— Vue.js框架魅力 —↓ 前言 Vue.js 是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.V ...
- angular 学习笔记
每天进步一点点,学习笔记 笔记来自 angular权威指南 如果想要屏蔽浏览器对表单的默认验证行为,可以在表单元素上添加 novalidate 标记. 而按钮标签则完全忽略 hr e f 属性,并不 ...
- 【京东详情页】——原生js学习之匿名函数
一.引言 在js模块中,要给每一个功能封装一个匿名函数.为了更好的理解什么是匿名函数,为什么要用匿名函数,我做了一些查阅和学习. 二.匿名函数 什么是:在创建时,不被任何变量引用的函数. 为什么:节约 ...