一种动态检测模拟器的方法、装置及终端制造方法及图纸

技术编号:21913852 阅读:36 留言:0更新日期:2019-08-21 12:23
一种动态检测模拟器的方法,该方法用于终端,涉及信息安全技术领域,包括:获取检测代码;调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区;调用系统文件读取函数,从系统内存中查找指定的系统模块,将指定的系统模块的代码拷贝到第一内存区;将检测代码插入指定的系统模块的代码中;调用内存拷贝函数Memcpy(),将检测代码从第一内存区中拷贝到第二内存区;执行存储于第二内存区的检测代码,得到检测结果;释放第一内存区和第二内存区;将检测结果发送给服务器,使服务器根据执行结果判定终端是否为模拟器。本公开还提供了一种动态检测模拟器的装置及终端。以上过程能有效隐藏检测代码,避免检测代码被黑客发现并破解。

A Method, Device and Terminal of Dynamic Detection Simulator

【技术实现步骤摘要】
一种动态检测模拟器的方法、装置及终端
本公开涉及信息安全
,尤其涉及一种动态检测模拟器的方法、装置及终端。
技术介绍
随着互联网的发展,安卓系统的应用程序(Application,简称APP)的应用愈加普遍。黑客常常通过模拟器在电脑上模拟安卓系统,以模拟终端APP的运行环境进行刷机、刷装机量、刷APP中各种抽奖福利数据等违法活动。为了使安卓系统的APP安全可靠,以保障APP用户及开发者的合法权益,需通过判断APP的运行环境是否为模拟器来判断APP是否遭到黑客入侵。目前已存在大量的检测模拟器的方法,但多数检测方法是将检测代码预先编写在APP中,这种方式让黑客很容易通过内存搜索等方式发现预置的检测代码,并针对预置的检测代码进行破解或直接绕过,导致依靠在APP中运行检测代码来检测终端是否为模拟器的效果并不理想。
技术实现思路
本公开的提供了一种动态检测模拟器的方法、装置及终端,将用于检测终端是否为模拟器的检测代码预置在服务器上,由服务器向终端发送检测代码,使终端在收到检测代码后,将检测代码分块并存入动态分配的存有系统代码的内存,以隐藏检测代码,防止检测代码被黑客发现,以保证检测代码的安全执行。本公开的一个方面提供了一种动态检测模拟器的方法,所述方法用于终端,方法包括:获取从服务器发送的检测代码;调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区;调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,调用内存拷贝函数Memcpy()将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满;将所述检测代码插入所述指定的系统模块的代码中;调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区;执行存储于所述第二内存区的所述检测代码,得到检测结果;释放所述第一内存区和第二内存区;将所述检测结果发送给所述服务器,使所述服务器根据所述执行结果判定所述终端是否为模拟器。可选地,调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,调用内存拷贝函数Memcpy()将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满包括:调用系统文件读取函数fopen(),读取系统内存布局信息,从所述系统内存布局信息中获取所述系统内存中所有系统模块的名称、在所述系统内存中的起始地址和大小;依次查询所述系统内存布局信息中所述所有系统模块的名称,直到查询到所述指定的系统模块;调用内存拷贝函数Memcpy(),以所述指定的系统模块的起始地址为起点,拷贝与所述第一内存区大小相同的所述指定的系统模块的代码,存入所述第一内存区。可选地,将所述检测代码插入所述指定的系统模块的代码中包括:在所述第一内存区中随机选取偏移地址,以所述偏移地址为起始地址,将所述检测代码插入所述第一内存中的所述指定的系统模块的代码中;其中,所述偏移地址与所述第一内存的末位地址之间的偏移量大于所述检测的大小。可选地,执行存储于所述第二内存区的所述检测代码包括:调用更新缓存函数clear_cache(),将系统缓存清空,并将所述第二内存中的检测代码更新到所述系统缓存中,以执行所述检测代码。可选地,将所述检测代码插入所述指定的系统模块的代码中还包括:向所述服务器发送请求,使所述服务器向所述终端发送所述终端的风险等级;根据所述风险等级,将所述检测代码拆分为多个代码块,其中,所述风险等级越高,将所述检测代码拆分为代码块的数量越多;分别为所述多个代码块在所述第一内存区中随机选取起始地址,将所述多个代码块分别插入所述指定的系统模块的代码中,并记录所述多个代码块的大小和在所述第一内存区中的起始地址。可选的,调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区包括:按照所述多个代码块在所述检测代码中的位置顺序,根据所述多个代码块的大小和在所述第一内存区中的起始地址,依次将所述多个代码块复制到所述第二内存区,使所述检测代码完整的拷贝到所述第二内存区中。可选的,方法还包括:向所述服务器发送终端信息,以使所述服务器向所述终端发送加密的检测代码;其中,所述终端信息包括所述终端账号、所述终端的系统版本号、所述终端的用户账号和一个随机数;获取从服务器发送的加密的检测代码,以及所述服务器生成加密的检测代码时,使用的哈希算法和加密算法的编码、服务器生成的随机数及时间戳信息;根据所述哈希算法的编码和所述加密算法的编码,分别从预置于所述终端的哈希算法库和集成加密算法库中查询所述服务器使用的哈希算法和加密算法;根据所述终端信息和所述服务器生成的随机数及时间戳信息,利用所述哈希算法生成密钥,基于所述密钥和所述加密算法,对所述加密的检测代码解密,获得检测代码。可选的,向所述服务器发送终端信息,以使所述服务器向所述终端发送加密的检测代码包括:所述服务器随机从预置于所述服务器的哈希算法库中选择一种哈希算法,并记录预置的所述哈希算法的编码;所述服务器生成一个随机数及时间戳信息,利用所述哈希算法,根据所述终端信息和所述随机数及时间戳信息生成密钥;所述服务器随机从预置于所述服务器的集成加密算法库中选择一种加密算法,并记录预置的所述加密算法的编码;所述服务器基于所述密钥和所述加密算法,将预置于所述服务器中的检测代码加密得到加密的检测代码;所述服务器将所述加密的检测代码、所述哈希算法的编码、所述加密算法的编码、所述随机数及时间戳信息分别发送给所述终端。本公开的另一个方面提供了以一种动态检测模拟器的装置,其特征在于,包括:第一处理模块,用于获取从服务器发送的检测代码;第二处理模块,用于调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区;第三处理模块,用于调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满;第四处理模块,用于将所述检测代码插入所述指定的系统模块的代码中;第五处理模块,用于调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区;第六处理模块,用于执行存储于所述第二内存区的所述检测代码,得到检测结果;第七处理模块,用于释放所述第一内存区和第二内存区;第八处理模块,用于将所述检测结果发送给所述服务器,使所述服务器根据所述执行结果判定所述终端是否为模拟器。本公开的另一个方面提供了一种终端,包括:存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现第二方面中的任一项所述的一种用于终端的检测方法中的各个步骤。在本公开实施例采用的上述至少一个技术方案能够达到以下有益效果:(1)申请大于检测代码大小的内存,先存放系统模块代码,再将检测代码插入该内存中系统模块代码中,该过程将检测代码有效的隐藏到了系统模块代码中,可防止黑客通过内存搜索查找到检测代码;(2)执行完毕检测代码后,立即清空存储和执行检测代码的内存,可减轻终端硬件环境的内存压力;(3)将检测代码预置在服务器中,由服务器将检测代码加密,并将检测代码发送给终端,服务器每次对检测代码加密使用的密钥和加密算法都不同,这种方法使检测代本文档来自技高网...

【技术保护点】
1.一种动态检测模拟器的方法,所述方法用于终端,其特征在于,方法包括:获取从服务器发送的检测代码;调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区;调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,调用内存拷贝函数Memcpy()将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满;将所述检测代码插入所述指定的系统模块的代码中;调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区;执行存储于所述第二内存区的所述检测代码,得到检测结果;释放所述第一内存区和第二内存区;将所述检测结果发送给所述服务器,使所述服务器根据所述执行结果判定所述终端是否为模拟器。

【技术特征摘要】
1.一种动态检测模拟器的方法,所述方法用于终端,其特征在于,方法包括:获取从服务器发送的检测代码;调用内存分配函数mmap(),从系统内存中分配出第一内存区和第二内存区;调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,调用内存拷贝函数Memcpy()将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满;将所述检测代码插入所述指定的系统模块的代码中;调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区;执行存储于所述第二内存区的所述检测代码,得到检测结果;释放所述第一内存区和第二内存区;将所述检测结果发送给所述服务器,使所述服务器根据所述执行结果判定所述终端是否为模拟器。2.根据权利要求1所述的方法,其特征在于,所述调用系统文件读取函数fopen(),从所述系统内存中查找指定的系统模块,调用内存拷贝函数Memcpy()将所述指定的系统模块的代码拷贝到所述第一内存区,使所述第一内存区存满包括:调用系统文件读取函数fopen(),读取系统内存布局信息,从所述系统内存布局信息中获取所述系统内存中所有系统模块的名称、在所述系统内存中的起始地址和大小;依次查询所述系统内存布局信息中所述所有系统模块的名称,直到查询到所述指定的系统模块;调用内存拷贝函数Memcpy(),以所述指定的系统模块的起始地址为起点,拷贝与所述第一内存区大小相同的所述指定的系统模块的代码,存入所述第一内存区。3.根据权利要求1所述的方法,其特征在于,所述将所述检测代码插入所述指定的系统模块的代码中包括:在所述第一内存区中随机选取偏移地址,以所述偏移地址为起始地址,将所述检测代码插入所述第一内存中的所述指定的系统模块的代码中;其中,所述偏移地址与所述第一内存的末位地址之间的偏移量大于所述检测的大小。4.根据权利要求1所述的方法,其特征在于,所述执行存储于所述第二内存区的所述检测代码包括:调用更新缓存函数clear_cache(),将系统缓存清空,并将所述第二内存中的检测代码更新到所述系统缓存中,以执行所述检测代码。5.根据权利要求4所述的方法,其特征在于,所述将所述检测代码插入所述指定的系统模块的代码中还包括:向所述服务器发送请求,使所述服务器向所述终端发送所述终端的风险等级;根据所述风险等级,将所述检测代码拆分为多个代码块,其中,所述风险等级越高,将所述检测代码拆分为代码块的数量越多;分别为所述多个代码块在所述第一内存区中随机选取起始地址,将所述多个代码块分别插入所述指定的系统模块的代码中,并记录所述多个代码块的大小和在所述第一内存区中的起始地址。6.根据权利要求5所述的方法,其特征在于,所述调用内存拷贝函数Memcpy(),将所述检测代码从所述第一内存区中拷贝到所述第二内存区包括:按照所述多个代码块在所述检测代码中的位置顺序,...

【专利技术属性】
技术研发人员:周志刚
申请(专利权)人:武汉瓯越网视有限公司
类型:发明
国别省市:湖北,42

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

1