一种未导出的函数地址和数据结构偏移的获取方法及装置的制造方法

文档序号:9787703阅读:539来源:国知局
一种未导出的函数地址和数据结构偏移的获取方法及装置的制造方法
【技术领域】
[0001]本发明涉及网络安全技术,特别涉及一种未导出的函数地址和数据结构偏移的获取方法及装置。
【背景技术】
[0002]基于虚拟机的软件监控技术是利用虚拟机技术,以实现在最底层对操作系统中的进程、线程、模块、文件、网络等行为进行监控。利用该技术,我们就可以针对各种对操作系统产生的危害可以进行分析处理了。但基于虚拟机的软件监控技术基本上要依赖于特定的操作系统,如特定的操作种类(Windows,Linux),特定的版本(Windows XP/7,Debian 7/8),特定的内核编译选项等等约束。
[0003]目前,基于虚拟机的软件监控技术一般有如下几种方式:纯用户态的软件监控技术、基于驱动程序的软件监控技术、基于代理程序和虚拟机结合的软件监控技术和纯虚拟机的软件监控技术。其中,纯虚拟机的软件监控技术对监控的目标程序完全透明,目标程序无法知道监控机制的存在,而且还可以做全系统监控,从用户态到内核态,所有进程、线程、指令等都能实现监控;而且,此技术完全在虚拟机层面来实现对内部的操作系统进行监控,不需要借助操作系统的任何代理程序即可完成监控而成为主要的监控方式,基于上述各种优点,使得纯虚拟机的软件监控技术成为目前监控的主要方式。但是,该利用纯虚拟机的软件监控技术进行监控时,必须要知道被监控操作系统的内部关键函数的位置和关键数据结构的定义,否则无法从操作系统外层来区分哪些数据是描述进程对象的,哪些数据是描述文件对象的。因此要实现这种监控技术,首先要明确被监控的操作系统的种类,版本等各种信息,通过操作系统的关键文件(例如内核文件),自动或者人工的分析出关键的函数位置和关键的数据结构定义。比如Windows系统,可以通过内核文件的I3DB文件,来获取关键函数和关键数据结构。这个可以使用程序自动化完成。如果是Linux系统,一般情况下,Linux系统的内核文件内部有一段符号信息。虽然这些符号信息可以定位某些关键函数(但并非所有),但符号信息中不包含数据结构的信息。Linux数据结构信息虽然在源代码里都有,但不同的版本很多都是有差异的,即便是同一个版本,不同的编译选项,也会造成数据结构的差异,对于这些差异,现有技术基本上只能是支持已知版本,已知编译选项的Linux系统的监控。对于未知版本,未知编译选项,只能靠人工逆向的方式来确定,这样很浪费人力和时间。

【发明内容】

[0004]本发明实施例提供了一种未导出的函数地址的获取方法及装置,用以实现未导出的函数地址的自动获取,以解决现有技术中靠人工获取未导出的函数地址所造成的人力浪费问题,同时提高系统支持效率。
[0005]本发明实施例提供了一种未导出的函数地址和数据结构偏移的获取方法,所述方法包括:
[0006]在从待监控系统的内核文件直接获取到的地址中选择合适的地址作为固定点;
[0007]从待监控系统的内核文件中找出与所述未导出的函数地址和/或数据结构偏移的函数存在访问关系的指定函数,并在所述固定点处将所述指定函数的地址设置为断点;
[0008]当待监控系统的内核执行到所述断点时,调用控制函数,通过所述控制函数找出与所述指定函数存在访问关系的所述未导出的函数地址和/或数据结构偏移的函数,获取所述未导出的函数地址和/或数据结构偏移的函数的数据属性;其中所述数据属性是所述未导出的函数地址和/或数据结构偏移的属性信息;
[0009]所述内核根据所述数据属性,确定所述未导出的函数地址和/或数据结构偏移。
[0010]本发明实施例提供的方法中,通过选择固定点,并在所述固定点上设置断点,当所述待监控系统的内核执行到所述断点时,调用控制函数,通过所述控制函数找出与所述指定函数存在访问关系的所述未导出的函数地址和/或数据结构偏移的函数,获取所述未导出的函数地址和/或数据结构偏移的函数的数据属性;其中所述数据属性是所述未导出的函数地址和/或数据结构偏移的属性信息;所述内核根据所述数据属性,确定所述未导出的函数地址和/或数据结构偏移。这样,不需要知道系统的版本和编译选项,也能够实现未导出的函数地址的自动获取,解决了现有技术中靠人工获取未导出的函数地址所造成的人力浪费问题。并且,通过该方法还可以大大提高实际运行的操作系统的支持效率,节省人力成本和时间。
[0011 ]较佳的,所述并在所述固定点处将所述指定函数的地址设置为断点,包括:
[0012]在所述固定点处将所述指定函数地址设置为代码执行断点和/或数据读写断点。
[0013]较佳的,所述数据读写断点为从所述断点位置开始到预设长度结束的内存区域中的区域性断点。
[0014]较佳的,所述方法具体包括:
[0015]在从待监控系统的内核文件直接获取到的地址中选择合适的地址作为固定点;
[0016]从待监控系统的内核文件中找出与所述未导出的函数地址的函数存在访问关系的指定函数,并在所述固定点处将所述指定函数的地址设置为码执行断点和/或数据读写断点;
[0017]当待监控系统的内核执行到所述码执行断点和/或数据读写断点时,调用所述控制函数,通过所述控制函数找出与所述指定函数存在访问关系的所述未导出的函数地址的函数,获取所述未导出的函数地址的函数的数据属性;
[0018]所述内核根据所述未导出的函数地址的函数的数据属性,确定所述未导出的函数地址;
[0019]从待监控系统的内核文件中找出与所述未导出的数据偏移结构的函数存在访问关系的指定函数,并在新的固定点上将该指定函数的地址设置为代码执行断点和/或数据读写断点;
[0020]当待监控系统的内核执行到所述代码执行断点和/或数据读写断点时,调用所述控制函数,通过所述控制函数找出与所述指定函数存在访问关系的所述未导出的数据结构偏移的函数,获取所述未导出的数据结构偏移的函数的数据属性;
[0021]所述内核根据所述未导出的数据结构偏移的函数的数据属性,确定所述未导出的数据结构偏移。
[0022]较佳的,在所述在新的固定点上设置代码执行断点和/或数据读写断点之前,所述方法还包括:将所述找出的未导出的函数地址作为新的固定点。
[0023]较佳的,所述方法还包括:采用传统断点调试技术或虚拟机技术实现代码执行断点和数据读写断点。
[0024]基于同一发明构思,本发明实施例还提供了一种未导出的函数地址和数据结构偏移的获取装置,所述装置包括:
[0025]设置模块,用于在从待监控系统的内核文件直接获取到的地址中选择合适的地址作为固定点;以及,从待监控系统的内核文件中找出与所述未导出的函数地址和/或数据结构偏移的函数存在访问关系的指定函数,并在所述固定点处将所述指定函数的地址设置为断点;
[0026]触发模块,用于当待监控系统的内核执行到所述断点时,调用控制函数,通过所述控制函数找出与所述指定函数存在访问关系的所述未导出的函数地址和/或数据结构偏移的函数,获取所述未导出的函数地址和/或数据结构偏移的函数的数据属性;其中所述数据属性是所述未导出的函数地址和/或数据结构偏移的属性信息;
[0027]获取模块,用于根据所述数据属性,确定所述未导出的函数地址和/或数据结构偏移。
[0028]本发明实施例中,通过置模块在系统中选择固定点,并在所述固定点上设置断点,当所述系统内核执行到所述断点时,调用控制函数,通过所述控制函数找出与所述指定函数存在访问关系的所述未导出的函数地址和/或数据结构偏移的函数,获取所述未导出的函数地址和/或数据结构偏移的函数的数据属性;其中所述数据属性是所述未导出的函数地址和/或数据结构偏移的属性信息;所述内核根据所述数据属性,确定所述未导出的函数地址和/或数据结构偏移。这样,不需要知道系统的版本和编译选项,也能够实现未导出的函数地址的自动获取,解决了现有技术中靠人工获取未导出的函数地址所造成的人力浪费问题。并且,通过该方法还可以大大提高实际运行的操作系统的支持效率,节省人力成本和时间。
[0029]较佳的,所述断点包括代码执行断点和/或数据读写断点;
[0030]其中所述数据读写断点是从设置数据读写断点初始位置起始到预设长度结束的内存区域中的区域性断点。
[0031]较佳的,所述触发模块,具体用于当待监控系统的内核执行到所述代码执行断点和/或数据读写断点时,调用所述控制函数,通过所述控制函数找出与所述指定函数存在访问关系的所述未导出的函数地址的函数,获取所述未导出的函数地址的函数的数据属性;以及,当待监控系统的内核执行到所述码执行断点和/或数据读写断点时,调用所述控制函数,通过所述控制函数找出与所述指定函数存在访问关系的所述未导出的数据结构偏移的函数,获取所述未导出的数据结构偏移的函数的数据属性;
[0032]所述获取模块,具体用于根据所述未导出的函数地址的函数的数据属性,确定所述未导出的函数地址;以及,根据所述未导出的数据结构偏移的函数的数据属性,确定所述未导出的数据结构偏移。
[0033]较佳的,所述设置模块还用于:将所述找出的未导出的函数地址作为新的固定点。【附图说明】
[0034]图1为本申请实施例提供的一种未导出的函数地址和/或数据结构偏移的获取方法流程示意图;
[0035]图2为本申请实施例提供的另一种未导出的函数地址和/或数据结构偏移的获取方法流程示意图;
[0036]图3为本申请实施例提供的利用静态匹配特征找出未导出的函数地址和/或数据结构偏移的方法流程示意图;
[0037]图4为本申请实施例提供的一种未导出的函数地址的获取装置的功能结构示意图。
【具体
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1