一种目标地址定位方法和系统的制作方法

文档序号:6426365阅读:127来源:国知局
专利名称:一种目标地址定位方法和系统的制作方法
技术领域
本发明涉及安全软件领域,尤其涉及ー种目标地址定位方法和系统。
背景技术
由于在设计理论上存在着一定的缺陷(例如缺乏完整性校验机制等),微软Windows 32位操作系统平台存在着大量的被篡改可能。安全软件在查杀恶意程序(计算机病毒)的过程中,需要查找、定位涉嫌中毒程序、函数的原始地址,之后再将其原始地址值与其现在的值对比,找出差异的地方,这些差异之处就是被病毒篡改的隐秘修改点,之后将隐秘修改点的值恢复为原始默认值,这是安全软件与病毒进行攻防的重要步骤。从上述安全软件杀毒的描述中可以知道原始地址定位技术是安全软件的关键技术之一。在现有原始地址定位技术中,可以归纳为“特征码扫描”定位法和“基于长度反汇 编引擎的特征码扫描”定位法两种,这两种方法的核心都在于定位的方法是从ニ进制代码段入手,根据某些特定的ニ进制字节流查找目标例程,之后从提取出的相对偏移累加上重定位信息最終得出原始地址。根据ニ进制字节流的方法依赖与特定的操作系统版本或编译器选项设置,新平台只要出现ー个比特的改变都将导致特征硬编码失效,因此,现有的原始地址定位技术跨平台能力弱、向后兼容性差。

发明内容
本发明所要解决的技术问题是提供ー种目标地址定位方法和系统,在获取目标驱动程序的原始地址后,将获取的目标驱动程序的原始地址与系统开机时加载的目标驱动程序的地址进行对比,井根据对比结果判定目标驱动程序的地址是否被篡改,如果判定目标驱动程序的地址被篡改,则找出篡改点;将篡改点恢复为原始默认值。为了解决上述问题,本发明公开了ー种目标地址定位方法,包括加载目标驱动程序到用户态内存空间;模拟目标驱动程序运行所需的參数和环境;目标驱动程序在用户态下运行,获取目标驱动程序的原始地址。进ー步的,还包括将获取的目标驱动程序的原始地址与系统开机时加载的目标驱动程序的地址进行对比,井根据对比结果判定目标驱动程序的地址是否被篡改。进ー步的,还包括如果判定目标驱动程序的地址被篡改,则找出篡改点;将篡改点恢复为原始默认值。进ー步的,还包括将I/O请求包直接发送到获取的目标驱动程序的原始地址。进ー步的,模拟目标驱动程序运行所需的參数和环境,包括伪造并遍历、替换目标驱动程序的所有导入函数;创建线程,伪造并初始化填充目标驱动程序对象结构及字符串指针;在线程中调用目标驱动程序的导出入口。进ー步的,获取目标驱动程序的原始地址,包括读取系统变量、例程地址数值;获取目标驱动程序地址重定位信息,计算得到目标驱动程序原始地址。进ー步的,获取目标驱动程序地址重定位信息,包括调用预设例程重置目标驱动程序重定位信息;读取所述重定位信息。进一步的,在获取目标驱动程序原始地址后,还包括从用户态内存空间卸载目标驱动程序。进一步的,在加载目标驱动程序到用户态内存空间之前,还包括发起初始化请求;获取互斥对象资源。进一步的,在获取目标驱动程序原始地址后,还包括释放内存和互斥对象资源。进一步的,还包括设置与目标驱动程序运行中错误信息相对应的错误码;调用预设例程获得目标驱动程序运行中详细的错误信息。本发明还公开了一种目标地址定位系统,包括加载装置,用于加载目标驱动程序到用户态内存空间;模拟装置,用于模拟目标驱动程序运行所需的参数和环境;获取装置,用于目标驱动程序在用户态下运行,获取目标驱动程序的原始地址。 进一步的,模拟装置包括导入模块,用于伪造并遍历、替换目标驱动程序的所有导入函数;创建模块,用于创建线程,伪造并初始化填充目标驱动程序对象结构及字符串指针;调用模块,用于在所述线程中调用目标驱动程序的导出入口。与现有技术相比,本发明具有以下优点本发明的目标地址定位方法,通过模拟目标驱动程序运行的内核环境和参数等相关信息,让目标驱动程序在用户态下运行,进而获取其实际的原始地址,解决了现有技术中依赖于二进制字节流查找原始地址而无法克服的硬编码的问题,其跨平台能力强、向后兼容性好。本发明方法中,让目标驱动程序在用户态运行,可以克服其在内核态运行可能出现的蓝屏或死机的问题,利于用户观察、判断系统运行状况,获取相关参数,找到恶意程序的隐秘篡改点。


图I为本发明方法实施例I的流程图;图2为本发明方法实施例I中步骤102的具体流程图;图3为本发明方法实施例I中步骤103的具体流程图;图4为本发明方法实施例2中为了获取错误信息的流程图;图5为本发明方法实施例3的流程图;图6为本发明系统实施例4中一种目标地址定位系统的结构示意图;图7为本发明系统实施例4中模拟装置的组成结构示意图。
具体实施例方式下面结合附图和实施例,对本发明的具体实施方式
作进一步详细描述。以下实例用于说明本发明,但不用来限制本发明的范围。Windows的内核往往是病毒篡改的目标,改了之后怎么办,现有的处理办法是通过技术手段让磁盘的内容映射到内核(磁盘中的内容是干净的代码),然后同内核现存的代码对比,差异的地方就是病毒的篡改点,杀毒的一个重要动作就是恢复这些篡改点的值为默认值。现有技术找到篡改点的办法是通过源代码进行对比,一个一个的比对,这样存在硬编码的问题,而所谓的反汇编办法也仅仅是代码对比的一种改进,核心还是不变化的。
本发明的方法是在用户态下模拟内核环境,让内核的一些驱动程序在用户态状态下运行,例如*. sys等驱动程序。这些驱动程序一旦运行的话通过分析、跟踪其调用函数等动作就可以得到驱动程序的原始地址。之后对比这些原始地址和当前地址的差异,找到篡改点。同时在用户态下模拟内核环境可以更好的观察这些驱动程序的运行,驱动程序的虚拟执行放在用户态实现的主要原因是为了尽量避免(放在内核态)可能导致的蓝屏问题。本发明的核心思想在于在用户态模拟目标驱动程序在内核态运行时所需的參数和环境,让目标驱动程序在用户态下运行,进而获取目标驱动程序的原始地址。实施例1,參考图1,示出了ー种目标地址定位方法,具体可以包括步骤101,加载目标驱动程序到用户态内存空间;步骤102,模拟目标驱动程序运行所需的參数和环境;
步骤103,目标驱动程序在用户态下运行,获取目标驱动程序的原始地址。在具体实施时,步骤102可以包括(參考图2)步骤1021,伪造并遍历、替换目标驱动程序的所有导入函数;步骤1022,创建线程,伪造并初始化填充目标驱动程序对象结构及字符串指针;步骤1023,在所述线程中调用目标驱动程序的导出入口。在具体实施上述实施例I步骤103获取目标驱动程序的原始地址时,可以包括(參考图3)步骤1031,读取系统变量、例程地址数值;步骤1032,获取目标驱动程序地址重定位信息,计算得到目标驱动程序原始地址。在步骤1032获取目标驱动程序地址重定位信息中,可以包括调用预设例程重置目标驱动程序重定位信息;读取所述重定位信息。在上述实施例I中,完成获取目标驱动程序的原始地址的动作之后,还可以从用户态内存空间卸载目标驱动程序。在上述实施例I中,在加载目标驱动程序到用户态内存空间之前,还可以包括发起初始化请求;获取互斥对象资源。如果在加载目标驱动程序到用户态内存空间之前増加了上述两个步骤,那么在实施例I中,获取目标驱动程序原始地址后,也对应的还可以设有释放内存和互斥对象资源的步骤。这里对应用本发明方法的360安全软件进一步的详细描述一下以对比文件系统驱动为例内存中有一份被系统开机时加载了的、不可信的、可能被木马篡改了的ntfs.sys驱动;另外,我们假定磁盘上的ntfs. sys是没有被篡改的、原始的、干净的驱动文件。此吋,映射并且重定位这份干净的ntfs. sys进内存就可以和之前那份做对比、找篡改点。在360安全卫士的环境下,安全软件会实时监控系统驱动的感染行为一不允许随意破坏系统文件,所以保证了磁盘ntfs. sys文件的可信。在本发明方法实施例2中,为了获取错误信息,还可以包括如下步骤,參考图4 步骤201,设置与目标驱动程序运行中错误信息相对应的错误码;步骤202,调用预设例程获得目标驱动程序运行中详细的错误信息。为了使得获得的错误信息同步,可以设置为内核同步调用返回用户态调用結果。如果调用失败,用户态接ロ可以设置相应的错误码,这样,调用者线程可以通过预设例程得到详细的错误信息。
在本发明方法实施例3中,以虚拟执行文件系统驱动(NTFS. SYS/FASTFAT. SYS)为例,流程图参考图5,详细实现步骤可以包括(I)调用者初始化时发起SetMiscParameters请求;(2) SetMiscParameters请求需等待/获取MemMutex互斥对象资源;(3) SetMiscParameters调用LoadPEFile例程加载目标驱动到用户态内存空间;调用ResetRelocData例程重置PE重定位信息;(4)如LoadPEFile例程初始化失败则返回对应的错误码;(5) SetMiscParameters创建线程CallFSDThread,线程的内部完成文件模拟执行过程。(6)线程CalIFSDThread调用WalkImportTable例程修复导入函数,导入函数集合 需要自己提前实现,这个集合要足够支撑目标驱动的正确运行;(7)以虚拟执行文件系统驱动为例,伪造输入参数_DRIVER_OBJECT、_UNIC0DE_STRING ;(8)在异常处理的保护下,线程CallFSDThread调用驱动的导出入口GsDriverEntry/DriverEntry,虚拟执行正式开始;(9)系统变量、例程地址等被执行填充,结合PE地址重定位信息,计算出实际的原始地址;(10)调用例程UnloadPEFile解除可执行文件镜像映射;(11)释放内存,释放互斥对象资源,文件模拟执行全过程结束。文件模拟执行操作的接口及主要函数描述初始化例程SetMiscParameters是整个文件模拟执行的逻辑入口,该例程会调用可执行镜像装载函数LoadPEFile完成模块加载工作。CalIFSDThread执行线程也是由这个函数封装创建的。LoadPEFiIe/UnIoadPEFiIe例程是一组基于文件穿透的PE操作库,它们会MapSectionOfModule映射模块并处理PE文件重定位信息。CallFSDThread执行线程是模拟执行的实现函数。在异常处理的保护下,目标驱动文件将在用户态“仿真”运行。在本发明方法实施例4中,就获取目标驱动程序的原始地址后的应用做了举例说明,在获取目标驱动程序后,可以包括将获取的目标驱动程序的原始地址与系统开机时加载的目标驱动程序的地址进行对比,并根据对比结果判定目标驱动程序的地址是否被篡改。当判定目标驱动程序的地址没有被篡改,则结束类似杀毒扫描的工作,如果判定目标驱动程序的地址已经被篡改,则可以将获取的目标驱动程序的原始地址与系统开机时加载的目标驱动程序的地址进行对比,找出篡改点;将篡改点恢复为原始默认值。经过上述两个步骤后,恢复了被恶意程序修改的篡改点,修补了安全隐患。在本发明方法实施例5中,给出了在获取目标驱动程序的原始地址后的又一个具体应用。基于“文件穿透”的原理,通过构建I/O请求包并向真实的、可信的文件系统处理函数处发送该I/o请求包,进而创建一条文件操作的可信通道,这是安全软件与恶意程序攻防中重要的操作步骤。“真实的、可信的”文件系统处理函数地址的获得就是基于“虚拟执行”定位的原始地址,因此在获取目标驱动程序的原始地址后,可以将I/o请求包直接发送到所述获取的目标驱动程序的原始地址。在实施例6中,本发明还公开了一种目标地址定位系统(参考图6)。实施例6, —种目标地址定位系统包括加载装置601,用于加载目标驱动程序到用户态内存空间;模拟装置602,用于模拟目标驱动程序运行所需的參数和环境;获取装置603,用于目标驱动程序在用户态下运行,获取目标驱动程序的原始地址。在加载装置601将目标驱动程序加载到用户态内存空间后,模拟装置602在用户态下模拟出目标驱动程序运行所需的參数和环境;在目标驱动程序运行过程中,所需要的一些系统变量和例程地址等数值被执行填充,累加目标驱动程序的重定位信息得出系统变量和例程地址的实际原始地址。在另ー个系统实施例7中,上述系统实施6中的模拟装置可以包括如下模块(參见图7)导入模块701,用于伪造并遍历、替换目标驱动程序的所有导入函数;创建模块702,用于创建线程,伪造并初始化填充目标驱动程序对象结构及字符串指针;
调用模块703,用于在所述线程中调用目标驱动程序的导出入口。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种目标地址定位方法,其特征在于,包括 加载目标驱动程序到用户态内存空间; 模拟目标驱动程序运行所需的参数和环境; 目标驱动程序在用户态下运行,获取目标驱动程序的原始地址。
2.根据权利要求I所述的方法,其特征在于,还包括 将获取的目标驱动程序的原始地址与系统开机时加载的目标驱动程序的地址进行对t匕,并根据对比结果判定目标驱动程序的地址是否被篡改。
3.根据权利要求2所述的方法,其特征在于,还包括 如果判定目标驱动程序的地址被篡改,则找出篡改点; 将篡改点恢复为原始默认值。
4.根据权利要求I所述的方法,其特征在于,还包括 将I/O请求包直接发送到所述获取的目标驱动程序的原始地址。
5.根据权利要求I所述的方法,其特征在于,所述模拟目标驱动程序运行所需的参数和环境,包括 伪造并遍历、替换目标驱动程序的所有导入函数; 创建线程,伪造并初始化填充目标驱动程序对象结构及字符串指针; 在所述线程中调用目标驱动程序的导出入口。
6.根据权利要求I所述的方法,其特征在于,所述获取目标驱动程序的原始地址,包括 读取系统变量、例程地址数值; 获取目标驱动程序地址重定位信息,计算得到目标驱动程序原始地址。
7.根据权利要求6所述的方法,其特征在于,获取目标驱动程序地址重定位信息,包括 调用预设例程重置目标驱动程序重定位信息; 读取所述重定位信息。
8.根据权利要求I所述的方法,其特征在于,在获取目标驱动程序原始地址后,还包括 从用户态内存空间卸载目标驱动程序。
9.根据权利要求I所述的方法,其特征在于,在加载目标驱动程序到用户态内存空间之前,还包括 发起初始化请求; 获取互斥对象资源。
10.根据根据权利要求9所述的方法,其特征在于,在获取目标驱动程序原始地址后,还包括 释放内存和互斥对象资源。
11.根据权利要求I所述的方法,其特征在于,还包括 设置与目标驱动程序运行中错误信息相对应的错误码; 调用预设例程获得目标驱动程序运行中详细的错误信息。
12.—种目标地址定位系统,其特征在于,包括加载装置,用于加载目标驱动程序到用户态内存空间;模拟装置,用于模拟目标驱动程序运行所需的参数和环境;获取装置,用于目标驱动程序在用户态下运行,获取目标驱动程序的原始地址。
13.根据权利要求12所述的系统,其特征在于,所述模拟装置包括导入模块,用于伪造并遍历、替换目标驱动程序的所有导入函数;创建模块,用于创建线程,伪造并初始化填充目标驱动程序对象结构及字符串指针;调用模块,用于在所述线程中调用目标驱动程序的导出入口。
全文摘要
本发明公开了一种目标地址定位方法,包括加载目标驱动程序到用户态内存空间;模拟目标驱动程序运行所需的参数和环境;目标驱动程序在用户态下运行,获取目标驱动程序的原始地址。本发明具有以下优点本发明的目标地址定位方法,通过模拟目标驱动程序运行的内核环境和参数等相关信息,让目标驱动程序在用户态下运行,进而获取其实际的原始地址,解决了现有技术中依赖于二进制字节流查找原始地址而无法克服的硬编码的问题,其跨平台能力强、向后兼容性好。
文档编号G06F21/00GK102831334SQ20111016106
公开日2012年12月19日 申请日期2011年6月15日 优先权日2011年6月15日
发明者潘剑锋, 王宇 申请人:奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1