一种调用dll未知导出函数的方法及系统的制作方法

文档序号:9727127阅读:207来源:国知局
一种调用dll未知导出函数的方法及系统的制作方法
【技术领域】
[0001]本发明涉及计算机网络安全领域,特别涉及一种调用DLL未知导出函数的方法及系统。
【背景技术】
[0002]现有的软件中,绝大部分的应用软件都不是由一个单独的可执行文件组成,而是需要调用由别的软件模块提供的各种功能,对于Windows下的软件主要是由DLL(即动态链接库)来完成这一功能,而DLL则主要是通过导出函数来提供相应的功能。现在也有很多的恶意软件将一些核心的功能封装在DLL中,通过各种技术实现隐藏自身的目的。我们在动态检测恶意软件的时候,通常是在一个虚拟机环境中将它运行起来,然后对整个系统及网络进行监控,而DLL是不能独立运行的。一般使用DLL的导出函数时需要知道其函数声明,例如动态调用DLL导出函数的方法一般为:首先用typedef为目标函数定义函数指针类型,然后用GetProcAddress来获取函数指针,最后用函数指针进行调用。那么在不知道导出函数的函数声明时,像Visual Stud1中自带的Dependency Walker等工具都可以查看DLL中的导出函数,但是仍然无法知道函数的参数,要进一步了解各函数的参数,需要用到调试器以及一定的汇编知识才可能一步步的了弄清楚导出函数的参数,这对于人工来说尚属于比较复杂的过程,要想实现自动化就更加困难。

【发明内容】

[0003]基于上述问题,本发明提出了一种调用DLL未知导出函数的方法,该方法能够通用使用,解决了未知函数参数未知,无法进行调用的问题。
[0004]—种调用DLL未知导出函数的方法,包括:
加载DLL文件到内存;
解析PE文件结构,获得DLL文件的导出函数信息;
加载预设的函数参数集合;
采用动态构造堆栈的方式,逐一调用DLL的导出函数。
[0005]所述的方法中,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为: 分配地址空间;
保存寄存器,并压入10个堆;
调用导出函数;
还原寄存器。
[0006]—种调用DLL未知导出函数的系统,包括:
文件加载模块,用于加载DLL文件到内存;
解析模块,用于解析PE文件结构,获得DLL文件的导出函数信息;
参数加载模块,用于加载预设的函数参数集合;
函数调用模块,用于采用动态构造堆栈的方式,逐一调用DLL的导出函数。
[0007]所述的系统中,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为: 分配地址空间;
保存寄存器,并压入10个堆;
调用导出函数;
还原寄存器。
[0008]本发明主要是基于在恶意代码的动态检测方面,并不需要非常精确的去使用这些DLL的导出函数,而只是想知道这些函数的功能,及其作用,因此只是需要一种通用的调用方式,将这些导出函数正常调用,激发出其功能就可以。本发明的原理是动态构造堆栈,比较通用,而且易于程序实现。
[0009]本发明的优势在于结合恶意代码动态检测系统,能够更多的调用DLL的导出函数,从而激发出更多的行为,最终达到更加全面准确的检测。在未使用此方法时,只能正常调用DLL的服务函数ServiceMain,而其他导出函数基本无法正常调用,所以大部分的DLL行为无法激发出来,导致DLL检测效果不理想,使用本发明中的方法,将能够大大提高对DLL的检测效果。
[0010]本发明提供了一种调用DLL未知导出函数的方法及系统,包括:加载DLL文件到内存;解析PE文件结构,获得DLL文件的导出函数信息;加载预设的函数参数集合;采用动态构造堆栈的方式,逐一调用DLL的导出函数。本发明利用动态构造堆栈的方式,给出充足的参数供导出函数使用,从而调用所有的导出函数。
【附图说明】
[0011]为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0012]图1为本发明一种调用DLL未知导出函数的方法实施例流程图;
图2为本发明一种调用DLL未知导出函数的系统实施例结构示意图。
【具体实施方式】
[0013]为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明中技术方案作进一步详细的说明。
[0014]本发明提出了一种调用DLL未知导出函数的方法,该方法能够通用使用,解决了未知函数参数未知,无法进行调用的问题。
[0015]—种调用DLL未知导出函数的方法,如图1所示,包括:
5101:加载DLL文件到内存;
5102:解析PE文件结构,获得DLL文件的导出函数信息;如导出函数的个数及各函数的地址等;
5103:加载预设的函数参数集合;
5104:采用动态构造堆栈的方式,逐一调用DLL的导出函数。
[0016]所述的方法中,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为: 分配地址空间;
保存寄存器,并压入10个堆;
调用导出函数;
还原寄存器。
[0017]采用动态构造堆栈的方式给出足够的通用的函数栈,准备充足的参数来供导出函数使用,从而逐个调用各个导出函数,激发出更多的行为,达到更全面准确的检测。
[0018]—种调用DLL未知导出函数的系统,如图2所示,包括:
文件加载模块201,用于加载DLL文件到内存;
解析模块202,用于解析PE文件结构,获得DLL文件的导出函数信息;
参数加载模块203,用于加载预设的函数参数集合;
函数调用模块204,用于采用动态构造堆栈的方式,逐一调用DLL的导出函数。
[0019]所述的系统中,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为: 分配地址空间;
保存寄存器,并压入10个堆;
调用导出函数;
还原寄存器。
[0020]本发明主要是基于在恶意代码的动态检测方面,并不需要非常精确的去使用这些DLL的导出函数,而只是想知道这些函数的功能,及其作用,因此只是需要一种通用的调用方式,将这些导出函数正常调用,激发出其功能就可以。本发明的原理是动态构造堆栈,比较通用,而且易于程序实现。
[0021]本发明的优势在于结合恶意代码动态检测系统,能够更多的调用DLL的导出函数,从而激发出更多的行为,最终达到更加全面准确的检测。在未使用此方法时,只能正常调用DLL的服务函数ServiceMain,而其他导出函数基本无法正常调用,所以大部分的DLL行为无法激发出来,导致DLL检测效果不理想,使用本发明中的方法,将能够大大提高对DLL的检测效果。
[0022]本发明提供了一种调用DLL未知导出函数的方法及系统,包括:加载DLL文件到内存;解析PE文件结构,获得DLL文件的导出函数信息;加载预设的函数参数集合;采用动态构造堆栈的方式,逐一调用DLL的导出函数。本发明利用动态构造堆栈的方式,给出充足的参数供导出函数使用,从而调用所有的导出函数。
[0023]通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
[0024]本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0025]本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
[0026]本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0027]虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。
【主权项】
1.一种调用DLL未知导出函数的方法,其特征在于,包括: 加载DLL文件到内存; 解析PE文件结构,获得DLL文件的导出函数信息; 加载预设的函数参数集合; 采用动态构造堆栈的方式,逐一调用DLL的导出函数。2.如权利要求1所述的方法,其特征在于,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为: 分配地址空间; 保存寄存器,并压入10个堆; 调用导出函数; 还原寄存器。3.一种调用DLL未知导出函数的系统,其特征在于,包括: 文件加载模块,用于加载DLL文件到内存; 解析模块,用于解析PE文件结构,获得DLL文件的导出函数信息; 参数加载模块,用于加载预设的函数参数集合; 函数调用模块,用于采用动态构造堆栈的方式,逐一调用DLL的导出函数。4.如权利要求3所述的系统,其特征在于,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为: 分配地址空间; 保存寄存器,并压入10个堆; 调用导出函数; 还原寄存器。
【专利摘要】本发明提供了一种调用DLL未知导出函数的方法及系统,包括:加载DLL文件到内存;解析PE文件结构,获得DLL文件的导出函数信息;加载预设的函数参数集合;采用动态构造堆栈的方式,逐一调用DLL的导出函数。本发明利用动态构造堆栈的方式,给出充足的参数供导出函数使用,从而调用所有的导出函数。
【IPC分类】G06F9/44
【公开号】CN105487849
【申请号】CN201410801308
【发明人】周龙, 康学斌, 肖新光
【申请人】哈尔滨安天科技股份有限公司
【公开日】2016年4月13日
【申请日】2014年12月22日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1