CN111367752A - 识别Android真机和模拟器的方法、装置及存储介质 - Google Patents
识别Android真机和模拟器的方法、装置及存储介质 Download PDFInfo
- Publication number
- CN111367752A CN111367752A CN201811603123.9A CN201811603123A CN111367752A CN 111367752 A CN111367752 A CN 111367752A CN 201811603123 A CN201811603123 A CN 201811603123A CN 111367752 A CN111367752 A CN 111367752A
- Authority
- CN
- China
- Prior art keywords
- identified machine
- simulator
- executing
- cpu
- judging
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3089—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
- G06F11/3093—Configuration details thereof, e.g. installation, enabling, spatial arrangement of the probes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/26—Functional testing
- G06F11/261—Functional testing by simulating additional hardware, e.g. fault simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/554—Detecting local intrusion or implementing counter-measures involving event detection and direct action
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种识别Android真机和模拟器的方法、装置及存储介质,该识别方法包括:在安装有Android操作系统的被识别机器上执行特定的CPU指令并设定特定的判断条件,如果满足该判断条件,则判断该被识别机器为模拟器。本发明克服了现有技术中在操作系统和系统底层框架修改特定的参数和函数,从而使应用层读取到虚假的参数或虚假的函数结果,进而造成识别真机和模拟器误判的问题。
Description
技术领域
本发明涉及Android应用软件领域,尤其是涉及一种识别Android真机和模拟器的方法、装置及存储介质。
背景技术
模拟器:能在电脑上模拟出非X_86平台的终端的运行环境,让用户在电脑上也能体验非X_86平台的游戏和应用,其在电脑上能模拟非X_86平台的操作系统,能安装、使用和卸载非X_86平台的应用软件,且具有简单、方便、成本低等的特征。常用的模拟器有Android模拟器。
so文件:linux系统中的共享动态链接库文件,类似于DLL文件。
Android APP开发者将APP推向市场一般需要进行渠道推广,在进行渠道推广时可能遇到不良渠道将APP安装到模拟器中,这些不良渠道通过操纵模拟器来模拟APP的启动、点击等,生成大量假的用户和其他统计数据传递给APP开发者,导致给APP开发者造成假象,继而给其带来实质性的经济损失。
现有技术中,一般通过如下技术方案在安装有Android系统的被识别机器上来识别真机和模拟器:
(1)判断CPU架构是否为X86来判断是否为模拟器,如果CPU架构为X86,则判断为模拟器;
(2)通过判断是否安装蓝牙设备来判断是否是模拟器,没有时判断为模拟器;
(3)读取ro.kernel.qemu系统属性值是否为1来判断是否为模拟器;
(4)读取/proc/tty/drivers文件,从中判断是否有goldfish驱动。
但是,现有技术可以通过定制刷机包或者在一些知名框架(如Xposed Framework)修改操作系统使得上述判断条件在模拟器环境下读出来的参数为真机的参数,导致无法根据上述判断条件来判断是否为真机还是模拟器。例如,可以使模拟器的APP读出来的ro.product.cpu.abi值为arm64-v8a,即非X86的CPU架构,也可以在模拟器上看起来安装有蓝牙设备等等。而且这些以假乱真的修改方式的门槛不高,不良渠道商花费代价少。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的一个目的是提供一种识别Android真机和模拟器的方法、装置及存储介质。
本发明所采用的技术方案是:
第一方面,本发明提供一种识别Android真机和模拟器的方法,该方法包括CPU指令执行和判断步骤:在安装有Android操作系统的被识别机器上执行特定的CPU指令并设定特定的判断条件,如果满足该判断条件,则判断该被识别机器为模拟器。
其中,该CPU指令执行和判断步骤具体包括:在该被识别机器上加载在X86 CPU编译生成的第一库文件,如果加载过程中未出现异常,则判断该被识别机器为模拟器;和/或在该被识别机器上执行该第一库文件中的测试函数指令,如果执行过程中未出现异常,则判断该被识别机器为模拟器;和/或获取在该被识别机器上执行该第一库文件中的测试函数指令的第一返回值,如果该第一返回值等于预设的第一数值,则判断该被识别机器为模拟器;和/或在该被识别机器上执行在X86 CPU编译生成的第一可执行程序文件,如果执行过程中未出现异常,则判断该被识别机器为模拟器;和/或获取在该被识别机器上执行该第一可执行程序文件的第二返回值,如果该第二返回值等于预设的第二数值,则判断该被识别机器为模拟器。
其中,该CPU指令执行和判断步骤之前还包括:读取该被识别机器的CPU类型,如果该CPU类型为X86类型,则判断该被识别机器为模拟器,否则,执行该CPU指令执行和判断步骤。
其中,该CPU指令执行和判断步骤具体包括:在该被识别机器上加载在该CPU类型的CPU编译生成的第二库文件,如果加载过程中出现异常,则判断该被识别机器为模拟器;和/或在该被识别机器上执行该第二库文件中的测试函数指令,如果执行过程中出现异常,则判断该被识别机器为模拟器;和/或获取在该被识别机器上执行该第二库文件中的测试函数指令的第三返回值,如果该第三返回值不等于预设的第三数值,则判断该被识别机器为模拟器;和/或在该被识别机器上执行在该CPU类型的CPU编译生成的第二可执行程序文件,如果执行过程中出现异常,则判断该被识别机器为模拟器;和/或获取在该被识别机器上执行该第二可执行程序文件的第四返回值,如果该第四返回值不等于预设的第四数值,则判断该被识别机器为模拟器。
其中,该CPU指令执行和判断步骤之前还包括步骤:生成对应不同CPU类型的库文件和可执行程序文件;该生成该库文件和该可执行程序文件的方法包括:编写一个函数,执行该函数的返回值等于该第一数值;将该函数转换成接口函数,并生成一个可执行程序,执行该可执行程序的返回值等于该第二数值,在不同的交叉编译环境下,将该接口函数和该可执行程序分别生成对应不同CPU类型的该库文件和该可执行程序文件。
第二方面,本发明提供一种识别Android真机和模拟器的装置,其中,该装置包括CPU指令执行和判断模块,用于在被识别机器上执行特定的CPU指令并设定特定的判断条件,如果满足该判断条件,则判断该被识别机器为模拟器。
其中,该CPU指令执行和判断模块包括:第一库文件加载和判断单元,用于在该被识别机器上加载在X86 CPU编译生成的第一库文件,如果加载过程中未出现异常,则判断该被识别机器为模拟器;和/或第一库文件函数执行和判断单元,用于在该被识别机器上执行该第一库文件中的测试函数指令,如果执行过程中出现异常,则判断该被识别机器为模拟器;和/或第一库文件返回值获取和判断单元,用于获取在该被识别机器上执行该第一库文件中的测试函数指令的第一返回值,如果该第一返回值不等于预设的第一数值,则判断该被识别机器为模拟器;和/或第一可执行程序文件执行和判断单元,用于在该被识别机器上执行在X86 CPU编译生成的第一可执行程序文件,如果执行过程中未出现异常,则判断该被识别机器为模拟器;和/或第一可执行程序文件返回值获取和判断单元,用于获取在该被识别机器上执行该第一可执行程序文件的第二返回值,如果该第二返回值不等于预设的第二数值,则判断该被识别机器为模拟器。
其中,该装置还包括CPU类型获取和判断模块,用于读取该被识别机器的CPU类型,如果该CPU类型为X86类型,则判断该被识别机器为模拟器。
其中,该CPU指令执行和判断模块还包括:第二库文件加载和判断单元,用于在该被识别机器上加载在该CPU类型的CPU编译生成的第二库文件,如果加载过程中出现异常,则判断该被识别机器为模拟器;和/或第二库文件函数执行和判断单元,用于在该被识别机器上执行该第二库文件中的测试函数指令,如果执行过程中出现异常,则判断该被识别机器为模拟器;和/或第二库文件返回值获取和判断单元,用于在该被识别机器上获取执行该第二库文件中的测试函数指令的返回值,如果该获取的返回值不等于该预设值,则判断该被识别机器为模拟器;和/或第二可执行程序文件执行和判断单元,用于在该被识别机器上执行在该CPU类型的CPU编译生成的第二可执行程序文件,如果执行过程中出现异常,则判断该被识别机器为模拟器;和/或第二可执行程序文件返回值获取和判断单元,用于在该被识别机器上执行该第二可执行程序文件,如果该执行该第二可执行程序文件的返回值不等于预设值,则判断该被识别机器为模拟器。
第三方面,本发明提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令用于使计算机执行如上述的方法。
本发明的有益效果是:
本发明在安装有Android操作系统的被识别机器上执行特定的CPU指令并设定特定的判断条件,如果满足该判断条件,则判断该被识别机器为模拟器,本发明克服了现有技术中在操作系统和系统底层框架修改特定的参数和函数,从而使应用层读取到虚假的参数或虚假的函数结果,进而造成识别真机和模拟器误判的问题。
进一步地,通过加载在X86 CPU编译生成的第一库文件和运行在X86 CPU上编译生成的第一可执行程序文件是否出现异常,以及运行程序的结果是否符合预期值来判断被识别机器是否为模拟器。被识别机器只能加载和执行当前CPU架构支持的库文件和可执行程序文件,因此在真机上无法加载该第一库文件和执行该第一可执行程序文件,从而判断被识别机器是否为真机或模拟器。
另外,通过读取CPU类型,加载在该CPU类型的CPU编译生成的第二库文件和运行在该CPU类型的CPU编译生成的第二可执行程序文件是否出现异常,以及运行程序的结果是否符合预期值来判断被识别机器是否为模拟器。如果被识别机器为真机,则能够成功加载该第二库文件和执行该第二可执行程序文件,进一步提高了该识别方法的可靠性。
附图说明
图1是本发明识别Android真机和模拟器的方法的一实施例的流程示意图;
图2是图1的步骤S11的一实施例的流程示意图;
图3是图1的步骤S11的另一实施例的流程示意图;
图4是本发明识别Android真机和模拟器的装置的一实施例的结构示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
以下以ARM CPU的被识别机器为例介绍本发明的实施例。
实施例一:
请参阅图1,图1是本发明识别Android真机和模拟器的方法的一实施例的流程示意图,图1的方法包括:
步骤S11:在安装有Android操作系统的被识别机器上执行特定的CPU指令并设定特定的判断条件,如果满足该判断条件,则判断该被识别机器为模拟器。
在步骤S11中,可以在被识别机器上加载特定CPU指令的库文件和执行特定CPU指令的可执行程序文件,通过加载该库文件和执行该可执行程序文件是否出现异常,以及执行该可执行程序文件的结果是否异常来判断被识别机器是否为模拟器。
请参阅图2,图2是图1的步骤S11的一实施例的流程示意图。如图2所示,步骤S11包括:
步骤S111:在该被识别机器上加载在X86 CPU编译生成的第一库文件,如果加载过程中未出现异常,则判断该被识别机器为模拟器;
其中,第一库文件为so文件,在该被识别机器上可采用System.load方法加载第一库文件。如果加载过程中出现异常,进入步骤S112。
步骤S112:在该被识别机器上执行该第一库文件中的测试函数指令,如果执行过程中未出现异常,则判断该被识别机器为模拟器;
其中,如果执行第一库文件的测试函数指令的过程中出现异常,则进入步骤S113。
步骤S113:获取在该被识别机器上执行该第一库文件中的测试函数指令的第一返回值,如果该第一返回值等于预设的第一数值,则判断该被识别机器为模拟器;
其中,如果该第一返回值不等于预设的第一数值,则进入步骤S114。
步骤S114:在该被识别机器上执行在X86 CPU编译生成的第一可执行程序文件,如果执行过程中未出现异常,则判断该被识别机器为模拟器;
其中,第一可执行程序文件为exec文件,如果执行过程中出现异常,进入步骤S115。
步骤S115:获取在该被识别机器上执行该第一可执行程序文件的第二返回值,如果该第二返回值等于预设的第二数值,则判断该被识别机器为模拟器。
其中,在被识别机器上可采用Runtime.exec(command)方法执行第一可执行程序文件。如果该第二返回值不等于预设的第二数值,则进入步骤S116。该预设的第二数值可以等于步骤S113中的预设的第一数值。
步骤S116:判断该识别机器为真机。
在图2的实施例中,也可以去掉上述S111至S155的5个步骤中的任意一个、两个或两个以上的判断步骤。
请参阅图3,图3是图1的步骤S11的另一实施例的流程示意图。如图3所示,步骤S11包括:
步骤S211:读取该被识别机器的CPU类型,如果该CPU类型为X86类型,则判断该被识别机器为模拟器;
其中,通过采用读取参数值ro.product.cpu.abi的方式来读取被识别机器的CPU类型,可以将读出来的字符串与字符串“X86”进行比较,如果比较结果一致,则判断该被识别机器为模拟器,或者通过识别读出来的字符串是否包含“X86”字符串,如果包含,则判断该被识别机器为模拟器。
步骤S212:在该被识别机器上加载在X86 CPU编译生成的第一库文件,如果加载过程中未出现异常,则判断该被识别机器为模拟器;
其中,步骤S212同步骤S111。
步骤S213:在该被识别机器上执行该第一库文件中的测试函数指令,如果执行过程中未出现异常,则判断该被识别机器为模拟器;
其中,步骤S213同步骤S112。
步骤S214:获取在该被识别机器上执行该第一库文件中的测试函数指令的第一返回值,如果该第一返回值等于预设的第一数值,则判断该被识别机器为模拟器;
其中,步骤S214同步骤S113。
步骤S215:在该被识别机器上执行在X86 CPU编译生成的第一可执行程序文件,如果执行过程中未出现异常,则判断该被识别机器为模拟器;
其中,步骤S215同步骤S114。
步骤S216:获取在该被识别机器上执行该第一可执行程序文件的第二返回值,如果该第二返回值等于预设的第二数值,则判断该被识别机器为模拟器;
其中,步骤S216同步骤S115。
步骤S217:在该被识别机器上加载在该CPU类型的CPU编译生成的第二库文件,如果加载过程中出现异常,则判断该被识别机器为模拟器;
其中,如果在步骤S211中读出来的CPU类型为ARM类型,则在被识别机器上加载的第二库文件为在ARM CPU编译生成的so文件。如果加载过程中不出现异常,则进入步骤S218。
步骤S218:在该被识别机器上执行该第二库文件中的测试函数指令,如果执行过程中出现异常,则判断该被识别机器为模拟器;
其中,如果执行过程中不出现异常,则进入步骤S219。
步骤S219:获取在该被识别机器上执行该第二库文件中的测试函数指令的第三返回值,如果该第三返回值不等于预设的第三数值,则判断该被识别机器为模拟器;
其中,第二库文件中的测试函数可以和第一库文件中的测试函数相同,此情况下第三数值等于第一数值。如果该第三返回值等于预设的第三数值,则进入步骤S220。
步骤S220:在该被识别机器上执行在该CPU类型的CPU编译生成的第二可执行程序文件,如果执行过程中出现异常,则判断该被识别机器为模拟器。
其中,如果在步骤S220中读出来的CPU类型为ARM类型,则在被识别机器上加载的第二库文件为在ARM CPU编译生成的可执行程序文件。如果执行过程中不出现异常,则进入步骤S221。
步骤S221:获取在该被识别机器上执行该第二可执行程序文件的第四返回值,如果该第四返回值不等于预设的第四数值,则判断该被识别机器为模拟器。
其中,第二可执行程序文件可以由第二库文件中的函数生成,此情况下第四返回值等于第三返回值。如果该第四返回值等于预设的第四数值,则进入步骤S222。
步骤S222:判断该识别机器为真机。
在图3的实施例中,也可以去掉上述S212至S221的10个步骤中的任意一个、两个或两个以上的判断步骤。图3的实施例与图2的实施例的区别在于:多出5个判断步骤S217至S221。通过这5个判断步骤进一步对被识别机器进行测试,以提高识别方法的可靠性。
图2或图3的实施例中,生成第一、二库文件和第一、二可执行程序文件的方法可采用如下方法:
(1)编写一个函数,执行该函数的返回值等于该第一数值;
其中,采用C或C++设计一个简单的测试函数,该测试函数返回特定数值,记为第一数值V0。
(2)将该函数转换成接口函数,并生成一个可执行程序,执行该可执行程序的返回值等于该第二数值,在不同的交叉编译环境下,将该接口函数和该可执行程序分别生成对应不同CPU类型的该库文件和该可执行程序文件。
其中,将步骤(1)的测试函数包装成JNI和生成一个linux系统下的可执行程序,在该可执行程序中将V0作为int main(int argc,char*argv[])的返回值。然后,在AndroidNDK的交叉编译环境下选择不同类型的CPU编译环境如x86、arm、mips等,将该JNI函数和该linux系统下的可执行程序生成不同CPU架构下的SO文件和可执行程序文件。
第一、二库文件和第一、二可执行程序文件的关系见如下表:
CPU架构 | 库文件 | 可执行程序文件 |
x86 | 第一库文件(eg:a_x86.so) | 第一可执行程序文件(eg:b_x86.exec) |
arm | 第二库文件(eg:a_arm.so) | 第二可执行程序文件(eg:b_arm.exec) |
这里说明的是,第一、二库文件和第一、二可执行程序文件中的函数的返回值也可以不相同。该第一、二库文件和该第一、二可执行程序文件通过应用软件或SDK软件或其他方式下载并安装到被识别机器的指定目录下。在其他实施例中,比如被识别机器的CPU为MIPS架构,则第二库文件和第二可执行程序文件为在MIPS平台编译生成的。
在本实施例中,在安装有Android操作系统的被识别机器上执行特定的CPU指令并设定特定的判断条件,如果满足该判断条件,则判断该被识别机器为模拟器,本发明克服了现有技术中在操作系统和系统底层框架修改特定的参数和函数,从而使应用层读取到虚假的参数或虚假的函数结果,进而造成识别真机和模拟器误判的问题。
进一步地,通过加载在X86 CPU编译生成的第一库文件和运行在X86 CPU上编译生成的第一可执行程序文件是否出现异常,以及运行程序的结果是否符合预期值来判断被识别机器是否为模拟器。被识别机器只能加载和执行当前CPU架构支持的库文件和可执行程序文件,因此在真机上无法加载该第一库文件和执行该第一可执行程序文件,从而判断被识别机器是否为真机或模拟器。
另外,通过读取CPU类型,加载在该CPU类型的CPU编译生成的第二库文件和运行在该CPU类型的CPU编译生成的第二可执行程序文件是否出现异常,以及运行程序的结果是否符合预期值来判断被识别机器是否为模拟器。如果被识别机器为真机,则能够成功加载该第二库文件和执行该第二可可执行程序文件,进一步提高了该识别方法的可靠性。
在本实施中,该识别方法可以通过自动化程序的方法实现,将该识别方法集成到一个Android的应用软件中,使用人员只需将该软件安装到被识别机器中,根据该软件的运行结果即可获知是否为真机或模拟器,方便普通人员使用。
实施例二:
请参阅图4,图4是本发明识别Android真机和模拟器的装置的一实施例的结构示意图。图4的装置包括CPU类型获取和判断模块41和CPU指令执行和判断模块42。CPU类型获取和判断模块41用于读取该被识别机器的CPU类型,如果该CPU类型为X86类型,则判断该被识别机器为模拟器。CPU指令执行和判断模块42用于在被识别机器上执行特定的CPU指令并设定特定的判断条件,如果满足所述判断条件,则判断所述被识别机器为模拟器。
CPU指令执行和判断模块42包括:第一库文件加载和判断单元421、第一库文件函数执行和判断单元422、第一库文件返回值获取和判断单元423、第一可执行程序文件执行和判断单元424、第一可执行程序文件返回值获取和判断单元425、第二库文件加载和判断单元426、第二库文件函数执行和判断单元427、第二库文件返回值获取和判断单元428、第二可执行程序文件执行和判断单元429以及第二可执行程序文件返回值获取和判断单元420。
第一库文件加载和判断单元421用于在该被识别机器上加载在X86 CPU编译生成的第一库文件,如果加载过程中未出现异常,则判断该被识别机器为模拟器。
第一库文件函数执行和判断单元422用于在该被识别机器上执行该第一库文件中的测试函数指令,如果执行过程中出现异常,则判断该被识别机器为模拟器。
第一库文件返回值获取和判断单元423用于获取在该被识别机器上执行该第一库文件中的测试函数指令的第一返回值,如果该第一返回值不等于预设的第一数值,则判断该被识别机器为模拟器;
第一可执行程序文件执行和判断单元424用于在该被识别机器上执行在X86 CPU编译生成的第一可执行程序文件,如果执行过程中未出现异常,则判断该被识别机器为模拟器;
第一可执行程序文件返回值获取和判断单元425用于获取在该被识别机器上执行该第一可执行程序文件的第二返回值,如果该第二返回值不等于预设的第二数值,则判断该被识别机器为模拟器。
第二库文件加载和判断单元426用于在该被识别机器上加载在该CPU类型的CPU编译生成的第二库文件,如果加载过程中出现异常,则判断该被识别机器为模拟器;
第二库文件函数执行和判断单元427用于在该被识别机器上执行该第二库文件中的测试函数指令,如果执行过程中出现异常,则判断该被识别机器为模拟器;
第二库文件返回值获取和判断单元428用于获取在该被识别机器上执行该第二库文件中的测试函数指令的第三返回值,如果该第三返回值不等于预设的第三数值,则判断该被识别机器为模拟器;
第二可执行程序文件执行和判断单元429用于在该被识别机器上执行在该CPU类型的CPU编译生成的第二可执行程序文件,如果执行过程中出现异常,则判断该被识别机器为模拟器;
第二可执行程序文件返回值获取和判断单元420用于获取在该被识别机器上执行该第二可执行程序文件的第四返回值,如果该第四返回值不等于预设的第四数值,则判断该被识别机器为模拟器。
此外,该装置还包括CPU指令文件生成单元(图未示),该CPU指令文件生成单元用于生成对应不同CPU类型的库文件和可执行程序文件,其生成库文件和可执行程序文件的方法在实施例一中已介绍。
具体地,上述各单元的工作方法和步骤在实施例一中已详细阐述,在此不再赘述。在其他实施例中,该装置也可只包括CPU类型获取和判断模块41和其他单元(420至429)中的一种或一种以上的单元,或只包括5种单元(421至425)中的一种或一种以上的单元。
实施例三:
本发明提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令用于使计算机执行如实施例一的方法。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
Claims (10)
1.一种识别Android真机和模拟器的方法,其特征在于,包括CPU指令执行和判断步骤:
在安装有Android操作系统的被识别机器上执行特定的CPU指令并设定特定的判断条件,如果满足所述判断条件,则判断所述被识别机器为模拟器。
2.根据权利要求1所述的方法,其特征在于,所述CPU指令执行和判断步骤具体包括:
在所述被识别机器上加载在X86 CPU编译生成的第一库文件,如果加载过程中未出现异常,则判断所述被识别机器为模拟器;
和/或
在所述被识别机器上执行所述第一库文件中的测试函数指令,如果执行过程中未出现异常,则判断所述被识别机器为模拟器;
和/或
获取在所述被识别机器上执行所述第一库文件中的测试函数指令的第一返回值,如果所述第一返回值等于预设的第一数值,则判断所述被识别机器为模拟器;
和/或
在所述被识别机器上执行在X86 CPU编译生成的第一可执行程序文件,如果执行过程中未出现异常,则判断所述被识别机器为模拟器;
和/或
获取在所述被识别机器上执行所述第一可执行程序文件的第二返回值,如果所述第二返回值等于预设的第二数值,则判断所述被识别机器为模拟器。
3.根据权利要求1所述的方法,其特征在于,所述CPU指令执行和判断步骤之前还包括:
读取所述被识别机器的CPU类型,如果所述CPU类型为X86类型,则判断所述被识别机器为模拟器,否则,执行所述CPU指令执行和判断步骤。
4.根据权利要求3所述的方法,其特征在于,所述CPU指令执行和判断步骤具体包括:
在所述被识别机器上加载在所述CPU类型的CPU编译生成的第二库文件,如果加载过程中出现异常,则判断所述被识别机器为模拟器;
和/或
在所述被识别机器上执行所述第二库文件中的测试函数指令,如果执行过程中出现异常,则判断所述被识别机器为模拟器;
和/或
获取在所述被识别机器上执行所述第二库文件中的测试函数指令的第三返回值,如果所述第三返回值不等于预设的第三数值,则判断所述被识别机器为模拟器;
和/或
在所述被识别机器上执行在所述CPU类型的CPU编译生成的第二可执行程序文件,如果执行过程中出现异常,则判断所述被识别机器为模拟器;
和/或
获取在所述被识别机器上执行所述第二可执行程序文件的第四返回值,如果所述第四返回值不等于预设的第四数值,则判断所述被识别机器为模拟器。
5.根据权利要求1至4任意一项所述的方法,其特征在于,所述CPU指令执行和判断步骤之前还包括步骤:生成对应不同CPU类型的库文件和可执行程序文件;
所述生成所述库文件和所述可执行程序文件的方法包括:
编写一个函数,执行所述函数的返回值等于所述第一数值;
将所述函数转换成接口函数,并生成一个可执行程序,执行所述可执行程序的返回值等于所述第二数值,在不同的交叉编译环境下,将所述接口函数和所述可执行程序分别生成对应不同CPU类型的所述库文件和所述可执行程序文件。
6.一种识别Android真机和模拟器的装置,其特征在于,包括:
CPU指令执行和判断模块,用于在被识别机器上执行特定的CPU指令并设定特定的判断条件,如果满足所述判断条件,则判断所述被识别机器为模拟器。
7.根据权利要求6所述的装置,其特征在于,所述CPU指令执行和判断模块包括:
第一库文件加载和判断单元,用于在所述被识别机器上加载在X86 CPU编译生成的第一库文件,如果加载过程中未出现异常,则判断所述被识别机器为模拟器;
和/或
第一库文件函数执行和判断单元,用于在所述被识别机器上执行所述第一库文件中的测试函数指令,如果执行过程中出现异常,则判断所述被识别机器为模拟器;
和/或
第一库文件返回值获取和判断单元,用于获取在所述被识别机器上执行所述第一库文件中的测试函数指令的第一返回值,如果所述第一返回值不等于预设的第一数值,则判断所述被识别机器为模拟器;
和/或
第一可执行程序文件执行和判断单元,用于在所述被识别机器上执行在X86 CPU编译生成的第一可执行程序文件,如果执行过程中未出现异常,则判断所述被识别机器为模拟器;
和/或
第一可执行程序文件返回值获取和判断单元,用于获取在所述被识别机器上执行所述第一可执行程序文件的第二返回值,如果所述第二返回值不等于预设的第二数值,则判断所述被识别机器为模拟器。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括:
CPU类型获取和判断模块,用于读取所述被识别机器的CPU类型,如果所述CPU类型为X86类型,则判断所述被识别机器为模拟器。
9.根据权利要求8所述的装置,其特征在于,所述CPU指令执行和判断模块还包括:
第二库文件加载和判断单元,用于在所述被识别机器上加载在所述CPU类型的CPU编译生成的第二库文件,如果加载过程中出现异常,则判断所述被识别机器为模拟器;
和/或
第二库文件函数执行和判断单元,用于在所述被识别机器上执行所述第二库文件中的测试函数指令,如果执行过程中出现异常,则判断所述被识别机器为模拟器;
和/或
第二库文件返回值获取和判断单元,用于在所述被识别机器上获取执行所述第二库文件中的测试函数指令的返回值,如果所述获取的返回值不等于所述预设值,则判断所述被识别机器为模拟器;
和/或
第二可执行程序文件执行和判断单元,用于在所述被识别机器上执行在所述CPU类型的CPU编译生成的第二可执行程序文件,如果执行过程中出现异常,则判断所述被识别机器为模拟器;
和/或
第二可执行程序文件返回值获取和判断单元,用于在所述被识别机器上执行所述第二可执行程序文件,如果所述执行所述第二可执行程序文件的返回值不等于预设值,则判断所述被识别机器为模拟器。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1至5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811603123.9A CN111367752B (zh) | 2018-12-26 | 2018-12-26 | 识别Android真机和模拟器的方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811603123.9A CN111367752B (zh) | 2018-12-26 | 2018-12-26 | 识别Android真机和模拟器的方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111367752A true CN111367752A (zh) | 2020-07-03 |
CN111367752B CN111367752B (zh) | 2023-08-01 |
Family
ID=71210150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811603123.9A Active CN111367752B (zh) | 2018-12-26 | 2018-12-26 | 识别Android真机和模拟器的方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111367752B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112100615A (zh) * | 2020-09-11 | 2020-12-18 | 北京明略昭辉科技有限公司 | 设备的识别方法及装置、存储介质、电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9058415B1 (en) * | 2013-03-15 | 2015-06-16 | Google Inc. | Counting events using hardware performance counters and annotated instructions |
CN105677311A (zh) * | 2014-11-21 | 2016-06-15 | 卓望数码技术(深圳)有限公司 | 一种函数调用关系的识别方法及装置 |
CN106201872A (zh) * | 2016-07-05 | 2016-12-07 | 北京鼎源科技有限公司 | 一种Android系统的运行环境检测方法 |
CN107678833A (zh) * | 2017-09-30 | 2018-02-09 | 北京梆梆安全科技有限公司 | 基于操作系统信息的模拟器检测方法及装置 |
-
2018
- 2018-12-26 CN CN201811603123.9A patent/CN111367752B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9058415B1 (en) * | 2013-03-15 | 2015-06-16 | Google Inc. | Counting events using hardware performance counters and annotated instructions |
CN105677311A (zh) * | 2014-11-21 | 2016-06-15 | 卓望数码技术(深圳)有限公司 | 一种函数调用关系的识别方法及装置 |
CN106201872A (zh) * | 2016-07-05 | 2016-12-07 | 北京鼎源科技有限公司 | 一种Android系统的运行环境检测方法 |
CN107678833A (zh) * | 2017-09-30 | 2018-02-09 | 北京梆梆安全科技有限公司 | 基于操作系统信息的模拟器检测方法及装置 |
Non-Patent Citations (3)
Title |
---|
IOS ANDROID: "Android模拟器检测方案优化", pages 1 - 7 * |
杨鹏;方勇;刘亮;浦伟;左政;: "基于CPU缓存操作模式差异的虚拟机检测方法" * |
杨鹏;方勇;刘亮;浦伟;左政;: "基于CPU缓存操作模式差异的虚拟机检测方法", 信息与电子工程, no. 06 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112100615A (zh) * | 2020-09-11 | 2020-12-18 | 北京明略昭辉科技有限公司 | 设备的识别方法及装置、存储介质、电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111367752B (zh) | 2023-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108304720B (zh) | 一种基于机器学习的安卓恶意程序检测方法 | |
US8726255B2 (en) | Recompiling with generic to specific replacement | |
CN110554965B (zh) | 自动化模糊测试方法及相关设备、计算机可读存储介质 | |
CN106020873B (zh) | 补丁包加载方法及装置 | |
US9645912B2 (en) | In-place function modification | |
US10303490B2 (en) | Apparatus and method for optimizing startup of embedded system | |
US8887141B2 (en) | Automatically modifying a native code module accessed from virtual machine bytecode to determine execution information | |
US20110258600A1 (en) | Using a dsl for calling apis to test software | |
KR20150024842A (ko) | 적응식 이식가능 라이브러리 | |
US9274930B2 (en) | Debugging system using static analysis | |
CN107729240B (zh) | 嵌入式软件堆栈溢出检测方法和装置 | |
CN111026601A (zh) | Java应用系统的监控方法、装置、电子设备及存储介质 | |
KR20080050118A (ko) | 임베디드용 소프트웨어의 오류 검출 방법 | |
US8769512B2 (en) | Adding instrumentation to a body of code to enable generation of code coverage data | |
CN109388946B (zh) | 恶意进程检测方法、装置、电子设备及存储介质 | |
Donaldson et al. | Test-case reduction and deduplication almost for free with transformation-based compiler testing | |
US7404107B2 (en) | Fault injection selection | |
JP6142705B2 (ja) | オブジェクト指向言語のための記号テストドライバの反復生成 | |
CN111045927A (zh) | 性能测试评估方法、装置、计算机设备及可读存储介质 | |
CN109614107B (zh) | 一种软件开发工具包的集成方法和装置 | |
CN111428233B (zh) | 一种嵌入式设备固件的安全性分析方法 | |
US9710358B2 (en) | Native backtracing | |
CN108897588B (zh) | 一种用于模块间通信的路由方法和路由装置 | |
CN111367752B (zh) | 识别Android真机和模拟器的方法、装置及存储介质 | |
US11593078B2 (en) | Reload ordering for executable code modules |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 518000 w601, Shenzhen Hong Kong industry university research base, 015 Gaoxin South 7th Road, high tech Zone community, Yuehai street, Nanshan District, Shenzhen City, Guangdong Province Applicant after: ASPIRE TECHNOLOGIES (SHENZHEN) LTD. Address before: 518000 south wing, 6th floor, west block, Shenzhen Hong Kong industry university research base building, South District, high tech Industrial Park, Nanshan District, Shenzhen City, Guangdong Province Applicant before: ASPIRE TECHNOLOGIES (SHENZHEN) LTD. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |