本发明涉及一种基于符号的识别android应用运行在模拟器中的方法。

背景技术:

很多的移动应用都会使用一种基于lbs的地理围栏的技术(如移动打卡),某些用户为了突破这种围栏的限制,将移动应用运行在模拟器中,通过模拟器欺骗移动应用,从而突破围栏的限制。这个时候往往需要有能力来判断移动应用是否运行在模拟器中。

当前的android应用(移动应用的一种)具有非常多的方法来判断应用是否运行于模拟器中,如imei、cpu信息、电池信息、build信息(包括fingerprint、model、manufacturer、brand、device、product等)等信息。

现有方法的一个特点是都是通过系统提供的api获取,大部分模拟器可修改这些api的返回值,因此,这些方法都很难准确判断应用是否运行于模拟器中。

技术实现要素:

本发明的目的在于针对现有技术的不足,提供一种基于符号的识别android应用运行在模拟器中的方法。

为了解决上述技术问题,采用如下技术方案:

一种基于符号的识别android应用运行在模拟器中的方法,其特征在于包括以下步骤:

(1)读取/proc/self/maps文件,解析maps文件中的每一行,根据maps格式解析出应用所加载的所有模块的信息;

(2)根据所述模块的路径信息,筛选出so模块,过滤不搜索符号的模块;

(3)根据所述so模块的信息以此从so模块的开始内存地址解析、遍历模块的符号;

(4)将内存地址解析、遍历模块的符号与搜索的符号对比,如果符号名称相同,则认为在相应的模块中找到搜索的符号,认为运行环境是模拟器。

进一步,在所述步骤(2)中,在筛选出so模块,过滤不搜索符号的模块之前,先判断所述模块的信息的数据的格式是否符合maps文件的格式,如果符合maps文件的格式,则开始过滤不搜索符号的模块,如果不符合maps文件的格式,返回步骤(1)。

进一步,在所述步骤(2)中,所述筛选出so模块,过滤不搜索符号的模块的方法如下:从maps格式解析出应用所加载的所有模块的信息中,先筛选出含有带有so模块代码对应的内存段,然后从所述内存段对应的so模块是否是需要查找符号的模块,如果是需要查找符号的模块,进行步骤(3),所述不是需要查找符号的模块,返回步骤(1)。

名词解释:

lbs:基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如gsm网、cdma网)或外部定位方式(如gps)获取移动终端用户的位置信息(地理坐标,或大地坐标),在地理信息系统(外语缩写:gis、外语全称:geographicinformationsystem)平台的支持下,为用户提供相应服务的一种增值业务。

android模拟器:一个可以运行在电脑上的虚拟设备,android模拟器可以让你不需使用物理设备即可预览、开发和测试android应用程序,也可运行实际的应用。

模块:so模块,是指动态加载到内存中的一个so文件实体。

符号:程序源代码中的标识符,包括函数名称、变量名称等。

符号表:用于存储符号的一种数据结构,通过其可遍历模块中的所有符号。

由于采用上述技术方案,具有以下有益效果:

本发明为一种基于符号的识别android应用运行在模拟器中的方法,本发明通过对比现有模拟器与真机之间现实的差异,通过非api的方法准确判断android应用是否运行于模拟器中。具有优点如下:

本发明方法不读取磁盘文件(/proc/self/maps是虚拟文件系统,不是磁盘文件),都是在内存的读写操作,速度较快。

本发明方法不通过api调用,不容易受到模拟器的欺骗。

附图说明

下面结合附图对本发明作进一步说明:

图1为本发明一种基于符号的识别android应用运行在模拟器中的方法的流程示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明了,下面通过附图及实施例,对本发明进行进一步详细说明。但是应该理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。

请参阅图1,一种基于符号的识别android应用运行在模拟器中的方法,其特征在于包括以下步骤:

读取/proc/self/maps文件,解析maps文件中的每一行,根据maps格式解析出应用所加载的所有模块的信息;

maps文件是linux系统的内存映射表文件,每一行表示内存中的一段内存,包括内存段的开始和结束地址,内存权限(有执行权限的是代码段)以及映射到该内存段的文件(如果有的话),通过maps文件可以得到进程所有代码段的地址范围以及映射到此代码段的so模块的信息。

(2)根据所述模块的路径信息,筛选出so模块,过滤不搜索符号的模块;

(3)根据所述so模块的信息以此从so模块的开始内存地址解析、遍历模块的符号;

所述符号的格式为elf格式。

(4)将内存地址解析、遍历模块的符号与搜索的符号对比,如果符号名称相同,则认为在相应的模块中找到搜索的符号,认为运行环境是模拟器。

其中,比对的符号具体包括如下:

/system/lib/libandroid_runtime.so

模块的microvirt.gles.renderer

和ttvm.gles.renderer

/system/lib/libart.so

模块的microvirt.gles

/system/lib/libc.so

模块的init.nox.rc、init.svc.vbox86-setup、microvirt

具体的,在所述步骤(2)中,在筛选出so模块,过滤不搜索符号的模块之前,先判断所述模块的信息的数据的格式是否符合maps文件的格式,如果符合maps文件的格式,则开始过滤不搜索符号的模块,如果不符合maps文件的格式,返回步骤(1)。

具体的,在所述步骤(2)中,所述筛选出so模块,过滤不搜索符号的模块的方法如下:从maps格式解析出应用所加载的所有模块的信息中,先筛选出含有带有so模块代码对应的内存段,然后从所述内存段对应的so模块是否是需要查找符号的模块,如果是需要查找符号的模块,进行步骤(3),所述不是需要查找符号的模块,返回步骤(1)。

so模块代码对应的内存段是指:一个有代码的so模块在加载到系统中的时候都会将其代码数据映射到一个内存段(也就是该段内存存放代码数据)。

本发明通过对比现有模拟器与真机之间现实的差异,通过非api的方法准确判断android应用是否运行于模拟器中。该方法不依赖于系统api,通过解析某个特定模块(如/system/lib/egl目录下的所有so文件),遍历该模块中的所有符号,并检查其中是否包含特定的符号(如goldfish_get_egl_tls),如果包含,则可以确认应用的运行环境是模拟器。

以上,仅为本发明较佳的具体实施方式;但本发明的保护范围并不局限于此。任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其改进构思加以等同替换或改变,都应涵盖在本发明的保护范围内。

android 模拟器识别,一种基于符号的识别Android应用运行在模拟器中的方法与流程...相关推荐

  1. 快速谱峭度matlab,一种基于快速谱峭度分析的泵潜在空化故障检测方法与流程

    本发明属于信号处理领域,尤其涉及一种基于快速谱峭度分析泵的实时状态并且检测其潜在空化故障的方法. 背景技术: 高性能离心泵在当今社会上广泛应用和需求巨大.由于工作在高压高速等复杂条件下,离心泵的空化故 ...

  2. python椭圆形骨料_一种基于python再生混凝土三维随机球形骨料模型的构建方法与流程...

    本发明涉及建筑技术领域,尤其涉一种基于python再生混凝土三维随机球形骨料模型的构建方法. 背景技术: 再生混凝土是指利用再生粗骨料部分或者全部代替天然骨料配置而成的混凝土,再生混凝土技术的开发和利 ...

  3. 飞机机电管理计算机故障措施,一种基于故障树的飞机机电系统健康管理装置及管理方法与流程...

    本发明属于航空机电系统健康管理技术,涉及一种基于故障树的飞机机电系统健康管理装置及管理方法. 背景技术: 飞机机电系统包含燃油子系统.环控子系统.液压子系统.供电子系统.起落架子系统等,分布于飞机各个 ...

  4. matlab和creo仿真,一种基于Creo和Matlab的复杂空间焊缝曲线的重构方法与流程

    本发明涉及一种基于Creo和Matlab的复杂空间焊缝曲线的重构方法,属于计算机图形学技术领域. 背景技术: 在工业生产中,经常遇到各种类型的曲线,如轴的截面圆轮廓曲线.螺纹的螺旋线.齿轮轮齿的齿廓曲 ...

  5. 超材料 s参数反演 matlab,一种基于改进K‑K算法的超材料电磁参数反演方法与流程...

    本发明属于测试技术领域,具体涉及一种基于改进K-K算法的超材料电磁参数的反演方法. 背景技术: 超材料是一种新型的人工材料,对电磁波具有独特的物理特性,比如负折射率.负电磁参数等,这些独特的物理特性使 ...

  6. 一种基于深度学习的目标检测提取视频图像关键帧的方法

    摘要:针对传统的关键帧提取方法误差率高.实时性差等问题,提出了一种基于深度学习的目标检测提取视频图像关键帧的方法,分类提取列车头部.尾部及车身所在关键帧.在关键帧提取过程中,重点研究了基于SIFT特征 ...

  7. 一种基于后间隔偏最小二乘的梯度下降助力谱建模方法

    一种基于后间隔偏最小二乘的梯度下降助力谱建模方法 外文链接:https://pan.baidu.com/s/1MU_e2GCz7vDq0_z1dkFq6Q 摘要 升压回归技术应用在近红外光谱,全光谱的 ...

  8. gis快速接地开关_一种基于扫描电镜和能谱仪的GIS放电异物来源分析方法

    扫描电镜(SEM)及其附带的能谱仪(EDS)可以用来进行金属的组织形貌观察和微区成分分析.扫描电镜具有景深大.图像立体等优点,图像放大倍数范围为8~300000倍,试验人员可以通过调节扫描电镜的相关参 ...

  9. 计算机系统设计 片上系统 pdf,一种基于过程级编程模型的可重构片上系统设计方法.pdf...

    一种基于过程级编程模型的可重构片上系统设计方法.pdf ISSN 11一1777/TP 计算机研究与发展 1000-1239/CN of Researchand Journal Development ...

最新文章

  1. Python3 range()函数
  2. 基于Fork/Join框架实现对大型浮点数数组排序(归并算法和插入排序算法)
  3. boost::adaptors::ref_unwrapped相关的测试程序)
  4. 代码设计的基础原则_设计原则:良好设计的基础
  5. 历史上最有影响力的10款开源项目
  6. typora插入代码设置_一篇文章教会你如何在Markdown文档中插入数学公式
  7. 中国IT人,你们是否从没想过开发一款伟大的产品?
  8. 2.2 流程控制-for序列 2.3 流程控制-for字典 2.4 循环退出 2.5 流程控制-while
  9. 《设计模式沉思录》—第2章2.4节访问权限
  10. HTML iframe标签下 子页面调用父页面js 容易产生的跨域调用问题 Uncaught DOMException
  11. VBS表白代码以及一些注意事项
  12. 【wpa_supplicant】入门 eloop 机制
  13. 告诉我图样图森破的两道简单C++笔试题
  14. JZOJ_2499_东风谷早苗 (Standard IO)
  15. docker的安装和部署
  16. JSP的 页面访问执行流程
  17. win10远程连接服务器出现“这可能是由于credssp加密……”的原因及解决办法,win10家庭版无法找到gpedit.msc或者组策略或安全组策略
  18. 我上了一节小学AI课,发现四年级的小朋友不仅懂AI,还学会了写代码运行
  19. 物联网卡解决智能安防系统监控难题,开启全新安防时代
  20. ZLIB 压缩的数据格式规范

热门文章

  1. SDUT 2401 最大矩形面积
  2. Web环境从Apache转Nginx后页面报404错误
  3. 当 position:sticky 遇到 bootstrap 浮动布局时候的踩坑记录
  4. [摘抄] Bezier曲线、B样条和NURBS
  5. Oracle11g数据库在win7系统上的安装教程
  6. DefaultHashOperations multiget的一个坑
  7. Swift:在Safari中打开App
  8. 走过13,展望14----希望是个好东西
  9. 【指标导出】指标原始数据导出流程
  10. DSS转发中sdp文件的简化