CN105487849A - 一种调用dll未知导出函数的方法及*** - Google Patents
一种调用dll未知导出函数的方法及*** Download PDFInfo
- Publication number
- CN105487849A CN105487849A CN201410801308.6A CN201410801308A CN105487849A CN 105487849 A CN105487849 A CN 105487849A CN 201410801308 A CN201410801308 A CN 201410801308A CN 105487849 A CN105487849 A CN 105487849A
- Authority
- CN
- China
- Prior art keywords
- dll
- function
- derivative function
- call
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供了一种调用DLL未知导出函数的方法及***,包括:加载DLL文件到内存;解析PE文件结构,获得DLL文件的导出函数信息;加载预设的函数参数集合;采用动态构造堆栈的方式,逐一调用DLL的导出函数。本发明利用动态构造堆栈的方式,给出充足的参数供导出函数使用,从而调用所有的导出函数。
Description
技术领域
本发明涉及计算机网络安全领域,特别涉及一种调用DLL未知导出函数的方法及***。
背景技术
现有的软件中,绝大部分的应用软件都不是由一个单独的可执行文件组成,而是需要调用由别的软件模块提供的各种功能,对于Windows下的软件主要是由DLL(即动态链接库)来完成这一功能,而DLL则主要是通过导出函数来提供相应的功能。现在也有很多的恶意软件将一些核心的功能封装在DLL中,通过各种技术实现隐藏自身的目的。我们在动态检测恶意软件的时候,通常是在一个虚拟机环境中将它运行起来,然后对整个***及网络进行监控,而DLL是不能独立运行的。一般使用DLL的导出函数时需要知道其函数声明,例如动态调用DLL导出函数的方法一般为:首先用typedef为目标函数定义函数指针类型,然后用GetProcAddress来获取函数指针,最后用函数指针进行调用。那么在不知道导出函数的函数声明时,像VisualStudio中自带的DependencyWalker等工具都可以查看DLL中的导出函数,但是仍然无法知道函数的参数,要进一步了解各函数的参数,需要用到调试器以及一定的汇编知识才可能一步步的了弄清楚导出函数的参数,这对于人工来说尚属于比较复杂的过程,要想实现自动化就更加困难。
发明内容
基于上述问题,本发明提出了一种调用DLL未知导出函数的方法,该方法能够通用使用,解决了未知函数参数未知,无法进行调用的问题。
一种调用DLL未知导出函数的方法,包括:
加载DLL文件到内存;
解析PE文件结构,获得DLL文件的导出函数信息;
加载预设的函数参数集合;
采用动态构造堆栈的方式,逐一调用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的导出函数。本发明利用动态构造堆栈的方式,给出充足的参数供导出函数使用,从而调用所有的导出函数。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明可用于众多通用或专用的计算***环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器***、基于微处理器的***、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何***或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。
Claims (4)
1.一种调用DLL未知导出函数的方法,其特征在于,包括:
加载DLL文件到内存;
解析PE文件结构,获得DLL文件的导出函数信息;
加载预设的函数参数集合;
采用动态构造堆栈的方式,逐一调用DLL的导出函数。
2.如权利要求1所述的方法,其特征在于,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为:
分配地址空间;
保存寄存器,并压入10个堆;
调用导出函数;
还原寄存器。
3.一种调用DLL未知导出函数的***,其特征在于,包括:
文件加载模块,用于加载DLL文件到内存;
解析模块,用于解析PE文件结构,获得DLL文件的导出函数信息;
参数加载模块,用于加载预设的函数参数集合;
函数调用模块,用于采用动态构造堆栈的方式,逐一调用DLL的导出函数。
4.如权利要求3所述的***,其特征在于,采用动态构造堆栈的方式,逐一调用DLL的导出函数具体为:
分配地址空间;
保存寄存器,并压入10个堆;
调用导出函数;
还原寄存器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410801308.6A CN105487849A (zh) | 2014-12-22 | 2014-12-22 | 一种调用dll未知导出函数的方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410801308.6A CN105487849A (zh) | 2014-12-22 | 2014-12-22 | 一种调用dll未知导出函数的方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105487849A true CN105487849A (zh) | 2016-04-13 |
Family
ID=55674850
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410801308.6A Pending CN105487849A (zh) | 2014-12-22 | 2014-12-22 | 一种调用dll未知导出函数的方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105487849A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106021096A (zh) * | 2016-05-09 | 2016-10-12 | 北京金山安全软件有限公司 | 一种异常函数查找方法及装置 |
CN107273745A (zh) * | 2017-04-21 | 2017-10-20 | 中国科学院软件研究所 | 一种动态链接库形式的恶意代码的动态分析方法 |
CN107704279A (zh) * | 2016-08-08 | 2018-02-16 | 腾讯科技(深圳)有限公司 | 一种数据加载方法以及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5960197A (en) * | 1996-05-09 | 1999-09-28 | Sun Microsystems, Inc. | Compiler dispatch function for object-oriented C |
CN101021804A (zh) * | 2007-03-13 | 2007-08-22 | 华为技术有限公司 | 调用动态库的方法、装置及动态库服务器 |
CN102236602A (zh) * | 2011-07-21 | 2011-11-09 | 南京大学 | 一种可视化软件测试设计平台 |
-
2014
- 2014-12-22 CN CN201410801308.6A patent/CN105487849A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5960197A (en) * | 1996-05-09 | 1999-09-28 | Sun Microsystems, Inc. | Compiler dispatch function for object-oriented C |
CN101021804A (zh) * | 2007-03-13 | 2007-08-22 | 华为技术有限公司 | 调用动态库的方法、装置及动态库服务器 |
CN102236602A (zh) * | 2011-07-21 | 2011-11-09 | 南京大学 | 一种可视化软件测试设计平台 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106021096A (zh) * | 2016-05-09 | 2016-10-12 | 北京金山安全软件有限公司 | 一种异常函数查找方法及装置 |
CN106021096B (zh) * | 2016-05-09 | 2018-12-21 | 珠海豹趣科技有限公司 | 一种异常函数查找方法及装置 |
CN107704279A (zh) * | 2016-08-08 | 2018-02-16 | 腾讯科技(深圳)有限公司 | 一种数据加载方法以及装置 |
CN107704279B (zh) * | 2016-08-08 | 2020-12-29 | 腾讯科技(深圳)有限公司 | 一种数据加载方法以及装置 |
CN107273745A (zh) * | 2017-04-21 | 2017-10-20 | 中国科学院软件研究所 | 一种动态链接库形式的恶意代码的动态分析方法 |
CN107273745B (zh) * | 2017-04-21 | 2020-08-21 | 中国科学院软件研究所 | 一种动态链接库形式的恶意代码的动态分析方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10042735B2 (en) | Selecting application wrapper logic components for wrapping a mobile application based on wrapper performance feedback from user electronic devices | |
US9141801B2 (en) | Apparatus and method for analyzing permission of application for mobile devices and detecting risk | |
US10140204B2 (en) | Automated dynamic test case generation | |
JP2011118901A (ja) | 外来情報を区分けすることにより仮想マシン・コードをメモリ最適化する方法、コンピュータ・プログラム、およびシステム | |
US9792102B2 (en) | Identifying issues prior to deploying software | |
US9411711B2 (en) | Adopting an existing automation script to a new framework | |
US9292652B2 (en) | Generic design rule checking (DRC) test case extraction | |
WO2017032265A1 (zh) | 一种应用推送方法、装置及服务设备 | |
US20160378447A1 (en) | Selecting application wrapper logic components based on features of a mobile application to be wrapped | |
US10452365B2 (en) | Co-existential wrapping system for mobile applications | |
US11182479B2 (en) | Call stack acquisition device, call stack acquisition method, and call stack acquisition program | |
CN105678160A (zh) | 用于提供对引导驱动程序的原始例程的访问的***和方法 | |
CN105487849A (zh) | 一种调用dll未知导出函数的方法及*** | |
CA2811617C (en) | Commit sensitive tests | |
CN113312618A (zh) | 程序漏洞检测方法、装置、电子设备及介质 | |
US10318731B2 (en) | Detection system and detection method | |
KR20190135337A (ko) | 메모리 오류를 검출하는 방법 및 시스템 | |
US8650546B2 (en) | Static analysis based on observed string values during execution of a computer-based software application | |
US20200310866A1 (en) | Methods and apparatus to protect open and closed operating systems | |
CN114297630A (zh) | 恶意数据的检测方法、装置、存储介质及处理器 | |
US9646157B1 (en) | Systems and methods for identifying repackaged files | |
CN111352791A (zh) | 一种***应用的检测方法、装置、终端设备及存储介质 | |
US10635811B2 (en) | System and method for automation of malware unpacking and analysis | |
CN104239112A (zh) | 一种设备驱动程序安装方法及装置 | |
US10255435B1 (en) | Systems and methods for establishing a reputation for related program files |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160413 |
|
WD01 | Invention patent application deemed withdrawn after publication |