随着技术的不断发展,目前模拟器基本已经能够完成手机90%以上的功能。此外,由于在PC端工作,与传统手机相比,具有以下几点优势:

  • 更炫:支持大屏幕、提供更炫酷的视觉效果,从而能够天然的将一些移动端由于适配成客户端应用;

  • 易上手:支持鼠标、键盘、手柄、摄像头等众多硬件外设,将操作方式从手指运动中解放出来,发挥外设的优势;

  • 更强的性能:通过模拟器可自定义配置性能参数,发挥PC硬件性能优势,跑分数据远超手机,使得高配游戏运行不再卡顿;

  • 更好的操控性:通过虚拟按键功能,能够将任意点触操作、震动、摇摇等手机独有操作映射到键盘的自定义按键,更加简易、便捷;

  • 使用PC工具:利用PC端其他辅助工具完成对移动端应用的支持,如通过按键精灵完成自动挂机等操作,解放双手;

  • 模拟多人操作:通过模拟器多开功能,零成本体验同时多部手机、多个账户开小黑屋,实现刷单的快感;

  • 更便捷的虚拟定位功能:通过模拟器虚拟定位,让你轻松落脚五湖四海;

  • 再也不用担心电池电量、手机流量了…

问题

此外,Android模拟器鉴于自身技术瓶颈,也存在以下普遍问题:

  • 性能:运行时普遍需要占据较大的CPU、内存等资源,导致低配机运行不流畅。此外,即便是高配机,多开也很容易出现卡顿等现象;

  • 稳定性:模拟器技术本身的BUG导致的闪退、花屏、无响应等现象;

  • 兼容性

  • 硬件兼容性:主要表现为大部分模拟器对AMD架构PC的不支持;

  • 应用兼容性:比如部分模拟器尚不兼容ARM架构的APP,又或者某些应用对安卓内核、虚拟机的调用方式比较底层,当模拟器对这些接口支持的不好时,表现为该类程序无法在模拟器上运行;

  • PC系统兼容性:表现为模拟器主要适配Windows主流平台,而能在Mac下运行的很少,且过低、过高版本支持的不好(如XP之前版本、Win 10,市面上某些定制的平板系统等);

  • 安卓系统兼容性:目前模拟器上的Android系统仍然停留在4.x,部分达到5.1,使得部分对安卓版本有要求的应用或游戏在模拟器上运行体验不好。

底层关键技术

>>>>


虚拟化技术

模拟器是用软件来模拟硬件操作,这就需要用到虚拟化技术。广义的虚拟化,是指将网络、CPU、内存及存储等各种实体资源,予以抽象、转换后呈现出来,进而打破实体结构间不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。我们所熟知的虚拟机就是虚拟化技术中的一种,通常来说它们只是模拟了一套与Host主机相同架构、相同指令集的硬件平台,不涉及内存和CPU的虚拟化。所有的Android模拟器都在不同程度上运用了虚拟化技术,比如雷电、夜神,包括Bluestack模拟器是基于Virtualbox虚拟机,谷歌原生模拟器和红手指云模拟器则是应用了Qemu的虚拟化技术。

CPU虚拟化

目前,已知的所有ARM架构的模拟器都是基于Qemu虚拟机。Qemu采用的是纯软件模拟,在物理机的操作系统上创建一个模拟硬件的程序来仿真所有想要的硬件,然后在上面跑ARM运行时。在这种环境下,由于程序每次执行都需要将其翻译成宿主机(X86)的指令,导致性能非常低下,这也是原生模拟器不够流畅的原因之一。

ARM Translation

当下主流的Android模拟器都是X86架构,基于Virtualbox虚拟机。由于不需要做CPU虚拟化,少了一层指令集转换过程,因此在运行支持X86架构的app时,就和普通的虚拟机没有区别,速度也就明显提高了很多。 此外,针对ARM架构的兼容性问题,普遍采用的是半虚拟化,根据二进制翻译技术将ARM指令动态翻译成X86指令。黑产常用的模拟器目前市面上安卓模拟器软件种类繁多,有51、mumu、蓝叠、夜神、逍遥、海马玩、雷电等等。通过在黑产聚集论坛、QQ群等多个渠道进行调研,我们发现黑产当下常用的是夜神、雷电和逍遥模拟器。

可以注意到,这些模拟器的共通点是都自带修改设备参数、多开、操作录制和虚拟定位等功能。

模拟器检测技术框架模拟器检测的本质就是要利用模拟器和真机之间的微小差异,从而判断当前设备是否为模拟器,具体检测技术框架整理如下:

>>>>


如何挖掘特征

结合前面梳理出的模拟器检测框架,后续在做相应的特征挖掘时,可直接根据该脑图做进一步的完善和加强。

特征项 细分点 描述<

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

/td>备注软件信息应用层系统库无线射频WIFIGPS…硬件信息底层硬件CPU电池设备参数硬件抽象层图形相机蓝牙输入存储传感器文件系统(重点关注Linux内核相关)检查/sys硬件驱动信息检查/dev设备节点特征检查/proc运行时的内核信息映射…

此外,基于文件系统差异的特征挖掘,具体可参考Android根目录文件结构进行操作,以下是几个重要的目录/文件的说明:

  • /mnt:挂载点目录

  • /etc:指向 /system/etc ,系统配置文件所在目录

  • /data:存放用户安装的应用以及各种数据

  • /system:Android系统目录文件夹

  • /dev:设备节点文件存放地

  • /sys:用于挂载 sysfs文件系统,在设备模型中,sysfs文件系统用来表示设备的结构,将设备的层次结构形象的反应到用户空间中

  • /proc:这是一个虚拟的文件系统,不占用实际存储空间。它以文件系统的方式为访问系统内核的操作提供接口,动态从系统内核中读出所需信息

  • init.rc:启动脚本

  • default.prop:系统属性配置文件

>>>>


对应的检测弱点

基于模拟器结构特征,利用任务调度检测模拟器

原理

模拟器与真机的本质区别在于运行载体,市面上已知的ARM模拟器都是基于qemu虚拟机。由于qemu在执行程序时实际上是将其翻译成宿主机的指令,比如将安卓的arm指令翻译成PC的x86指令。为了效率上的考虑,qemu在翻译执行arm指令时并没有实时更新模拟的pc寄存器值,只会在一段代码翻译执行完之后再更新,而真机中pc寄存器是一直在更新的。根据这一点,可以设计一段CPU任务调度程序来检测模拟器。

优缺点

优点:因为是基于qemu的二进制翻译技术来做特征检测,所以能够很好的识别这类Android模拟器。 缺点:

  • 需要自己设计反应离散程度的算法来统计任务调度的地址分布情况,想要实际应用到SDK有些困难

  • 会执行汇编代码,在不同的机器设备上需要考虑稳定性和兼容性等问题

利用cache特性检测Android模拟器

原理

由于绝大部分手机都是基于ARM架构,而模拟器几乎全部是运行在PC的X86架构上。因此,可以利用ARM与X86的底层缓存行为差异来判断是否为真机。 具体来说,ARM采用的是将指令存储与数据存储分开的哈佛架构,L1 Cache(一级缓存)被分成了平行的两块,即I-Cache(指令缓存)和D-Cache(数据缓存),而X86采用的是将指令存储和数据存储合并在一起的冯•诺伊曼结构,L1 Cache是连续的一块缓存。所以,如果我们通过读写地址指令的方式对一段可执行代码进行动态修改,那么在执行的时候,X86架构上的指令缓存会被同步修改,而对ARM架构而言,这种数据读写操作修改的只是D-Cache中的内容,此时I-Cache中的指令并不会被更新。

优缺点

优点:能够准确的识别arm和x86架构。 缺点:要执行汇编代码,在不同的机器设备上需要考虑稳定性和兼容性等问题。实测发现容易引起崩溃,需要配合多进程予以解决。

基于Android体系架构,应用层行为数据

这种检测方案本质上是对正常用户的行为模式进行统计分析,它也许不能有效的对真机和模拟器进行区分,但可以作为风险设备画像的一个参考维度。

Android模拟器检测体系梳理,kotlin入门相关推荐

  1. Android模拟器检测体系梳理

    转自:https://www.wireghost.cn/2018/05/10/Android模拟器检测体系梳理/ 模拟器作为一种虚拟机,配合改机工具,能够以较低成本实现设备多开,因此而备受黑灰产的青睐 ...

  2. Android模拟器检测体系梳理,android驱动开发入门

    安卓系统兼容性:目前模拟器上的Android系统仍然停留在4.x,部分达到5.1,使得部分对安卓版本有要求的应用或游戏在模拟器上运行体验不好. 底层关键技术 >>>> 虚拟化技 ...

  3. android模拟器检测方案优化,逍遥模拟器优化方案 - 新手引导 - 逍遥安卓论坛 - Powered by Discuz!...

    本帖最后由 心芝雨 于 2016-11-15 15:47 编辑 模拟器优化电脑要开启vt(虚拟化技术) 切换到 独立显卡 (双显卡的) 模拟器设置2个cpu 2024内存(电脑需要4核心和4g内存的可 ...

  4. 检测Android模拟器的方法和代码实现

    专自:https://bbs.pediy.com/thread-225717.htm 刚刚看了一些关于Detect Android Emulator的开源项目/文章/论文, 我看的这些其实都是13年1 ...

  5. Kotlin入门(1)搭建Kotlin开发环境

    Kotlin做为一门编程语言,已经出现好几年了,但此前在国内并不闻名.自从5月份谷歌宣布它成为Android的官方开发语言之后,Kotlin猛然窜红了,虽说短期内Kotlin无法取代Java,但对于一 ...

  6. 安卓逆向_20 --- 模拟器检测、反调试检测、ELF动态调试、__libc_init 下断

    From( 模拟器检测实战分析 ):https://www.bilibili.com/video/BV1UE411A7rW?p=65 怎样过 app 的模拟器检测:https://bbs.pediy. ...

  7. 利用cache特性检测Android模拟器

    Author:leonnewton 0x00 序 目前对Android模拟器的检测,主要是从特定的系统值来进行区分的.例如,getDeviceId().getLine1Number()这类函数,还有a ...

  8. Kotlin入门(19)Android的基础布局

    线性布局 线性布局LinearLayout是最常用的布局,顾名思义,它下面的子视图像是用一根线串了起来,所以其内部视图的排列是有顺序的,要么从上到下垂直排列,要么从左到右水平排列.排列顺序只能指定一维 ...

  9. android 模拟器目录,Android 获取APP 文件目录 模拟器检测

    1. 获取app 目录 context.getFilesDir() Android 6.0的分身应用为了能与原应用区分开来,会更改手机的UserId,默认手机的UserId为0. 获取到的App应用位 ...

最新文章

  1. Base64实现图片的编码和解码
  2. xml字符串转对象xml文件转对象
  3. Unity3D专访——真正的面试
  4. Hive _分桶及抽样查询
  5. linux arm uart应用程序,ARM Linux S3C2440 之UART分析
  6. Mr.J--学习五子棋的艰苦之路
  7. 亚马逊AWS免费套餐EC2安装centos连接登录并创建root
  8. APP中某个页面巨卡
  9. Linux中防火墙端口查看,开启与关闭
  10. Tensor看这一篇就够了!
  11. 7.4通过CRaSH管理Spring Boot和定义远程命令
  12. oracle文件名乱码,如何rename datafile name中存在乱码的数据文件
  13. Keil MDK使用方法
  14. 中医笔记2-入定、打坐
  15. 连接局域网打印机显示无法连接服务器,网络打印机拒绝访问无法连接处理方法汇总...
  16. 如何修改Recovery的字符串资源
  17. 《郭论—捡史》郭德纲/著 读后得
  18. Fiddler之自动修改数据包(Free HTTP插件)
  19. mysql批量添加空行_MySQL加入空行
  20. 哼唱识别(query by humming)

热门文章

  1. 台湾国立大学郭彦甫Matlab教程笔记(6)user define function
  2. WebService(腾讯QQ在线状态 WEB 服务)
  3. new/delete与malloc/free的区别
  4. 大数据-------元数据管理
  5. matlab图像雅可比行列式,函数矩阵与行列式(雅可比(Jacobi)矩阵与行列式)雅克...-雅可比矩阵-数学-詹底巧同学...
  6. 有道笔记在Ubuntu上的安装
  7. VB连接Sql Server,Oracle,SyBase,Access数据库操作实例
  8. 如何用计算机做板报,怎么用Word制作电子板报
  9. 分享申请IDP账号的过程,包含duns申请的分享
  10. linux ps-l命令详解,ps命令实用方法.ps -l ps -L详解