一种基于符号的识别Android应用运行在模拟器中的方法技术

技术编号:24888375 阅读:21 留言:0更新日期:2020-07-14 18:15
一种基于符号的识别Android应用运行在模拟器中的方法,其特征在于包括以下步骤:(1)读取/proc/self/maps文件,解析maps文件中的每一行,根据maps格式解析出应用所加载的所有模块的信息;(2)根据所述模块的路径信息,筛选出so模块,过滤不搜索符号的模块;(3)根据所述so模块的信息以此从so模块的开始内存地址解析、遍历模块的符号;(4)将内存地址解析、遍历模块的符号与搜索的符号对比,如果符号名称相同,则认为在相应的模块中找到搜索的符号,认为运行环境是模拟器。本发明专利技术方法不读取磁盘文件(/proc/self/maps是虚拟文件系统,不是磁盘文件),都是在内存的读写操作,速度较快。本发明专利技术方法不通过API调用,不容易受到模拟器的欺骗。

【技术实现步骤摘要】
一种基于符号的识别Android应用运行在模拟器中的方法
本专利技术涉及一种基于符号的识别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),如果包本文档来自技高网...

【技术保护点】
1.一种基于符号的识别Android应用运行在模拟器中的方法,其特征在于包括以下步骤:/n(1)读取/proc/self/maps文件,解析maps文件中的每一行,根据maps格式解析出应用所加载的所有模块的信息;/n(2)根据所述模块的路径信息,筛选出so模块,过滤不搜索符号的模块;/n(3)根据所述so模块的信息以此从so模块的开始内存地址解析、遍历模块的符号;/n(4)将内存地址解析、遍历模块的符号与搜索的符号对比,如果符号名称相同,则认为在相应的模块中找到搜索的符号,认为运行环境是模拟器。/n

【技术特征摘要】
1.一种基于符号的识别Android应用运行在模拟器中的方法,其特征在于包括以下步骤:
(1)读取/proc/self/maps文件,解析maps文件中的每一行,根据maps格式解析出应用所加载的所有模块的信息;
(2)根据所述模块的路径信息,筛选出so模块,过滤不搜索符号的模块;
(3)根据所述so模块的信息以此从so模块的开始内存地址解析、遍历模块的符号;
(4)将内存地址解析、遍历模块的符号与搜索的符号对比,如果符号名称相同,则认为在相应的模块中找到搜索的符号,认为运行环境是模拟器。


2.根据权利要求1所述的一种基于符号的识别Android应用运行在模拟器中的方法,其特征在于:在所述...

【专利技术属性】
技术研发人员:郑晓峰
申请(专利权)人:杭州云缔盟科技有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1