一种调用DLL未知导出函数的方法及系统技术方案

技术编号:14505577 阅读:54 留言:0更新日期:2017-01-31 15:08
本发明专利技术提供了一种调用DLL未知导出函数的方法及系统,包括:加载DLL文件到内存;解析PE文件结构,获得DLL文件的导出函数信息;加载预设的函数参数集合;采用动态构造堆栈的方式,逐一调用DLL的导出函数。本发明专利技术利用动态构造堆栈的方式,给出充足的参数供导出函数使用,从而调用所有的导出函数。

【技术实现步骤摘要】

本专利技术涉及计算机网络安全领域,特别涉及一种调用DLL未知导出函数的方法及系统
技术介绍
现有的软件中,绝大部分的应用软件都不是由一个单独的可执行文件组成,而是需要调用由别的软件模块提供的各种功能,对于Windows下的软件主要是由DLL(即动态链接库)来完成这一功能,而DLL则主要是通过导出函数来提供相应的功能。现在也有很多的恶意软件将一些核心的功能封装在DLL中,通过各种技术实现隐藏自身的目的。我们在动态检测恶意软件的时候,通常是在一个虚拟机环境中将它运行起来,然后对整个系统及网络进行监控,而DLL是不能独立运行的。一般使用DLL的导出函数时需要知道其函数声明,例如动态调用DLL导出函数的方法一般为:首先用typedef为目标函数定义函数指针类型,然后用GetProcAddress来获取函数指针,最后用函数指针进行调用。那么在不知道导出函数的函数声明时,像VisualStudio中自带的DependencyWalker等工具都可以查看DLL中的导出函数,但是仍然无法知道函数的参数,要进一步了解各函数的参数,需要用到调试器以及一定的汇编知识才可能一步步的了弄清楚导出函数的参数,这对于人工来说尚属于比较复杂的过程,要想实现自动化就更加困难。
技术实现思路
基于上述问题,本专利技术提出了一种调用DLL未知导出函数的方法,该方法能够通用使用,解决了未知函数参数未知,无法进行调用的问题。一种调用DLL未知导出函数的方法,包括:加载DLL文件到内存;解析PE文件结构,获得DLL文件的导出函数信息;<br>加载预设的函数参数集合;采用动态构造堆栈的方式,逐一调用DLL的导出函数。所述的方法中,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为:分配地址空间;保存寄存器,并压入10个堆;调用导出函数;还原寄存器。一种调用DLL未知导出函数的系统,包括:文件加载模块,用于加载DLL文件到内存;解析模块,用于解析PE文件结构,获得DLL文件的导出函数信息;参数加载模块,用于加载预设的函数参数集合;函数调用模块,用于采用动态构造堆栈的方式,逐一调用DLL的导出函数。所述的系统中,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为:分配地址空间;保存寄存器,并压入10个堆;调用导出函数;还原寄存器。本专利技术主要是基于在恶意代码的动态检测方面,并不需要非常精确的去使用这些DLL的导出函数,而只是想知道这些函数的功能,及其作用,因此只是需要一种通用的调用方式,将这些导出函数正常调用,激发出其功能就可以。本专利技术的原理是动态构造堆栈,比较通用,而且易于程序实现。本专利技术的优势在于结合恶意代码动态检测系统,能够更多的调用DLL的导出函数,从而激发出更多的行为,最终达到更加全面准确的检测。在未使用此方法时,只能正常调用DLL的服务函数ServiceMain,而其他导出函数基本无法正常调用,所以大部分的DLL行为无法激发出来,导致DLL检测效果不理想,使用本专利技术中的方法,将能够大大提高对DLL的检测效果。本专利技术提供了一种调用DLL未知导出函数的方法及系统,包括:加载DLL文件到内存;解析PE文件结构,获得DLL文件的导出函数信息;加载预设的函数参数集合;采用动态构造堆栈的方式,逐一调用DLL的导出函数。本专利技术利用动态构造堆栈的方式,给出充足的参数供导出函数使用,从而调用所有的导出函数。附图说明为了更清楚地说明本专利技术或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术一种调用DLL未知导出函数的方法实施例流程图;图2为本专利技术一种调用DLL未知导出函数的系统实施例结构示意图。具体实施方式为了使本
的人员更好地理解本专利技术实施例中的技术方案,并使本专利技术的上述目的、特征和优点能够更加明显易懂,下面结合附图对本专利技术中技术方案作进一步详细的说明。本专利技术提出了一种调用DLL未知导出函数的方法,该方法能够通用使用,解决了未知函数参数未知,无法进行调用的问题。一种调用DLL未知导出函数的方法,如图1所示,包括:S101:加载DLL文件到内存;S102:解析PE文件结构,获得DLL文件的导出函数信息;如导出函数的个数及各函数的地址等;S103:加载预设的函数参数集合;S104:采用动态构造堆栈的方式,逐一调用DLL的导出函数。所述的方法中,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为:分配地址空间;保存寄存器,并压入10个堆;调用导出函数;还原寄存器。采用动态构造堆栈的方式给出足够的通用的函数栈,准备充足的参数来供导出函数使用,从而逐个调用各个导出函数,激发出更多的行为,达到更全面准确的检测。一种调用DLL未知导出函数的系统,如图2所示,包括:文件加载模块201,用于加载DLL文件到内存;解析模块202,用于解析PE文件结构,获得DLL文件的导出函数信息;参数加载模块203,用于加载预设的函数参数集合;函数调用模块204,用于采用动态构造堆栈的方式,逐一调用DLL的导出函数。所述的系统中,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为:分配地址空间;保存寄存器,并压入10个堆;调用导出函数;还原寄存器。本专利技术主要是基于在恶意代码的动态检测方面,并不需要非常精确的去使用这些DLL的导出函数,而只是想知道这些函数的功能,及其作用,因此只是需要一种通用的调用方式,将这些导出函数正常调用,激发出其功能就可以。本专利技术的原理是动态构造堆栈,比较通用,而且易于程序实现。本专利技术的优势在于结合恶意代码动态检测系统,能够更多的调用DLL的导出函数,从而激发出更多的行为,最终达到更加全面准确的检测。在未使用此方法时,只能正常调用DLL的服务函数ServiceMain,而其他导出函数基本无法正常调用,所以大部分的DLL行为无法激发出来,导致DLL检测效果不理想,使用本专利技术中的方法,将能够大大提高对DLL的检测效果。本专利技术提供了一种调用DLL未知导出函数的方法及系统,包括:加载DLL文件到内存;解析PE文件结构,获得DLL文件的导出函数信息;加载预设的函数参数集合;采用动态构造堆栈的方式,逐一调用DLL的导出函数。本专利技术利用动态构造堆栈的方式,给出充足的参数供导出函数使用,从而调用所有的导出函数。通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本专利技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本专利技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式本文档来自技高网
...

【技术保护点】
一种调用DLL未知导出函数的方法,其特征在于,包括:加载DLL文件到内存;解析PE文件结构,获得DLL文件的导出函数信息;加载预设的函数参数集合;采用动态构造堆栈的方式,逐一调用DLL的导出函数。

【技术特征摘要】
1.一种调用DLL未知导出函数的方法,其特征在于,包括:
加载DLL文件到内存;
解析PE文件结构,获得DLL文件的导出函数信息;
加载预设的函数参数集合;
采用动态构造堆栈的方式,逐一调用DLL的导出函数。
2.如权利要求1所述的方法,其特征在于,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为:
分配地址空间;
保存寄存器,并压入10个堆;
调用导出函数;
还原寄存器。
3.一种调用DLL未知导出函数的系统,...

【专利技术属性】
技术研发人员:周龙康学斌肖新光
申请(专利权)人:哈尔滨安天科技股份有限公司
类型:发明
国别省市:黑龙江;23

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

1