内存改写检测方法及装置与流程

文档序号:14870288发布日期:2018-07-06 22:25阅读:387来源:国知局

本申请涉及电数字数据处理领域,尤其涉及内存改写检测方法及装置。



背景技术:

在软件开发和使用中,经常会出现应用程序内存数据被改写的情况。导致内存数据被改写的原因有很多,如内存越界或被其他进程恶意更改。内存被改写会严重影响程序的稳定性,其危险在于后果和症状的随机性,从而可能导致程序执行结果出现问题或者自身崩溃,并很难确定问题原因,在没有虚拟地址空间管理的操作系统中,甚至可能导致系统崩溃。因此,对关键性内存数据进行监测是十分必要的。



技术实现要素:

为了克服现有技术中存在的不足,本发明要解决的技术问题是提供一种内存改写检测方法及装置,其能快速、准确监测关键性内存数据,避免因内存数据被改写造成不必要的损失。

为解决上述技术问题,本发明的内存改写检测方法,包括:

获取一进程的不应被改写的内存区域的地址范围;

获得所述进程的跟踪权限;

逐字对所述内存区域中的数据进行读取;

将读取的数据压缩生成固定长度的数字摘要;

将新生成的数字摘要与所述内存区域的相应最原始数字摘要进行比较;

基于比较结果的一致性确定所述内存区域是否被改写。

作为本发明所述方法的改进,所述方法还包括:响应于确定所述内存区域被改写,使发生内存改写的进程退出运行。

作为本发明所述方法的另一种改进,所述方法还包括:利用私钥对生成的数字摘要进行加密生成签名。

作为本发明所述方法的进一步改进,调用ptrace接口函数获得所述进程的跟踪权限及逐字对所述内存区域中的数据进行读取。

作为本发明所述方法的另一进一步改进,所述获取一进程的不应被改写的内存区域的地址范围包括:解析所述进程的内存映像文件以获取不应被改写的内存区域的地址范围。

为解决上述技术问题,本发明的内存改写检测装置,包括:

地址范围获取模块,用于获取一进程的不应被改写的内存区域的地址范围;

跟踪权限获得模块,用于获得所述进程的跟踪权限;

数据读取模块,用于逐字对所述内存区域中的数据进行读取;

数字摘要生成模块,用于将读取的数据压缩生成固定长度的数字摘要;

比较模块,用于将新生成的数字摘要与所述内存区域的相应最原始数字摘要进行比较;

改写确定模块,用于基于比较结果的一致性确定所述内存区域是否被改写。

作为本发明所述装置的改进,所述装置还包括退出模块,用于响应于确定所述内存区域被改写,使发生内存改写的进程退出运行。

作为本发明所述装置的另一种改进,所述装置还包括签名模块,用于利用私钥对生成的数字摘要进行加密生成签名。

作为本发明所述装置的又一种改进,所述跟踪权限获得模块和所述数据读取模块通过调用ptrace接口函数实现。

作为本发明所述装置的再一种改进,所述地址范围获取模块包括解析子模块,用于解析所述进程的内存映像文件以获取不应被改写的内存区域的地址范围。

为解决上述技术问题,本发明的有形计算机可读介质,包括用于执行本发明的内存改写检测方法的计算机程序代码。

为解决上述技术问题,本发明提供一种装置,包括至少一个处理器;及至少一个存储器,含有计算机程序代码,所述至少一个存储器和所述计算机程序代码被配置为利用所述至少一个处理器使得所述装置执行本发明的内存改写检测方法的至少部分步骤。

按照本发明,通过解析进程对应的映像文件内容,得到所需监测的进程的内存空间的地址值;然后例如通过ptrace接口函数的内存读取功能读取内存空间的数据,可能同时利用签名算法对读取的数据进行加密签名,并防止签名被更改;然后通过校验签名可快速准确判断监控的内存区域数据是否发生改写。从而在内存区域关键数据发生改写时,可及时采取相应措施如使进程退出运行而避免引起不必要的损失。

结合附图阅读本发明实施方式的详细描述后,本发明的其它特点和优点将变得更加清楚。

附图说明

图1为根据本发明方法的一实施例的流程图。

图2为根据本发明装置的一实施例的结构示意图。

为清晰起见,这些附图均为示意性及简化的图,它们只给出了对于理解本发明所必要的细节,而省略其他细节。

具体实施方式

下面参照附图对本发明的实施方式和实施例进行详细说明。

通过下面给出的详细描述,本发明的适用范围将显而易见。然而,应当理解,在详细描述和具体例子表明本发明优选实施例的同时,它们仅为说明目的给出。

图1示出了根据本发明的内存改写检测方法的一实施例的流程图。

在步骤s102,根据linux环境下所需监控进程的pid,解析该进程对应的proc目录下进程的maps文件,得到进程不应被改写的内存区域的地址范围,例如程序代码段、被加载的共享库的代码段等段的内存区域的起始地址和终止地址。

在步骤s104,调用ptrace接口函数,设置其request参数值为ptrace_attach及pid参数值为所需监控进程的pid,从而获得进程的跟踪权限。

在步骤s106,循环调用ptrace接口函数,给定对应pid参数值,设置其request参数值为ptrace_peekdata/ptrace_peektext,设置并依次增加addr参数值,逐字对内存中的数据进行读取。

在步骤s108,利用签名算法将读取的数据压缩生成固定长度的数字摘要,并利用私钥对数字摘要进行加密生成签名。签名算法例如为md5、rsa算法或者任何其它适当的算法。在实施例中,可利用前述的任何一种算法对读取的内存数据生成签名。在另一实施例中,也可利用两种算法相结合生成签名。例如首先利用md5算法对读取到的内存数据生成数字摘要,然后利用rsa算法使用私钥对生成的数字摘要进行加密,从而生成签名,进一步防止数字摘要被改写。

在进程刚启动时执行步骤s102到s108,得到最原始数字摘要因而得到最原始的签名。可将最原始的签名追加至所监测进程的原可执行文件的末尾或者另外单独存放,以供后续比较时使用。

在步骤s110,取出最原始的签名,利用公钥对其进行解密,得到最原始数字摘要。

在步骤s112,将新生成的数字摘要与最原始数字摘要进行对比,根据对比的一致性确定监测的内存中的数据是否被改写。如果新生成的数字摘要与最原始数字摘要的对比结果一致,则所监测的内存区域未被改写,处理可返回到步骤s102,进行下一周期的监测。如果新生成的数字摘要与最原始数字摘要的对比结果不一致,则所监测的内存区域已被改写,则处理进行到步骤s114。

在步骤s114,调用ptrace接口函数,设置request参数值为ptrace_kill,并设置pid,使发生内存改写的进程退出执行,从而避免内存关键数据的改写导致不必要的损失。

图2示出了根据本发明的内存改写检测装置的一实施例的结构示意图。该实施例的装置包括:地址范围获取模块202,用于获取一进程的不应被改写的内存区域的地址范围;跟踪权限获得模块204,用于通过调用ptrace接口函数获得所述进程的跟踪权限;数据读取模块206,用于通过循环调用ptrace接口函数逐字对所述内存区域中的数据进行读取;数字摘要生成模块208,用于将读取的数据压缩生成固定长度的数字摘要;比较模块210,用于将新生成的数字摘要与所述内存区域的相应最原始数字摘要进行比较;改写确定模块212,用于基于比较结果的一致性确定所述内存区域是否被改写。在实施例中,地址范围获取模块202可包括解析子模块,用于解析所述进程的内存映像文件以获取不应被改写的内存区域的地址范围。

根据本发明装置的一种实施方式,所述装置还包括退出模块,用于响应于确定所述内存区域被改写,使发生内存改写的进程退出运行。

根据本发明装置的另一种实施方式,所述装置还包括签名模块,用于利用私钥对生成的数字摘要进行加密生成签名。

在此所述的多个不同实施例或者其特定特征、结构或特性可在本发明的一个或多个实施方式中适当组合。另外,在某些情形下,只要适当,流程图中和/或流水处理描述的步骤顺序可修改,并不必须精确按照所描述的顺序执行。另外,本发明的多个不同方面可使用软件、硬件、固件或者其组合和/或执行所述功能的其它计算机实施的模块或装置进行实施。本发明的软件实施可包括保存在计算机可读介质中并由一个或多个处理器执行的可执行代码。计算机可读介质可包括计算机硬盘驱动器、rom、ram、闪存、便携计算机存储介质如cd-rom、dvd-rom、闪盘驱动器和/或例如具有通用串行总线(usb)接口的其它装置,和/或任何其它适当的有形或非短暂计算机可读介质或可执行代码可保存于其上并由处理器执行的计算机存储器。本发明可结合任何适当的操作系统使用。

除非明确指出,在此所用的单数形式“一”、“该”均包括复数含义(即具有“至少一”的意思)。应当进一步理解,说明书中使用的术语“具有”、“包括”和/或“包含”表明存在所述的特征、步骤、操作、元件和/或部件,但不排除存在或增加一个或多个其他特征、步骤、操作、元件、部件和/或其组合。如在此所用的术语“和/或”包括一个或多个列举的相关项目的任何及所有组合。

前面说明了本发明的一些优选实施例,但是应当强调的是,本发明不局限于这些实施例,而是可以本发明主题范围内的其它方式实现。本领域技术人员可以在本发明技术构思的启发和不脱离本发明内容的基础上对本发明作出各种变型和修改,这些变形或修改仍落入本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1