对调用DLL导出函数进行拦截跟踪的方法技术

技术编号:5547347 阅读:1629 留言:1更新日期:2012-04-11 18:40
本发明专利技术涉及一种对调用DLL导出函数进行拦截跟踪的方法,将原来的目标DLL改名;为改名后的DLL创建一个.def文件,再创建一个.def文件,这个.def文件的文件名是在原目标DLL文件名上加预定的后缀;创建一个与文件名带后缀的.def文件同名的DLL,称为“下位虚拟目标DLL”,这个DLL导入改名后的原目标DLL,其导出则取决于上述文件名带后缀的.def文件;创建一个与原目标DLL同名的DLL,称为“上位虚拟目标DLL”,这个DLL采用原目标DLL的.def文件,有着与原目标文件相同的导出函数集合。本发明专利技术有益的效果是:使程序员们可以按需要对特定DLL的导出函数所受调用进行拦截跟踪,用来记录这些导出函数在运行时受到调用的历史。本发明专利技术主要的用途是记录应用软件的运行踪迹,但也可用于其它目的。

【技术实现步骤摘要】

本专利技术涉及一种计算机拦截跟踪的方法,尤其是一种对调用DLL导出函数进行拦 截跟踪的方法,其显著的特点是使程序员能观察应用软件在运行过程中对一特定DLL的导 出函数的调用情况和历史记录。
技术介绍
因为种种原因,人们常常需要深入调查计算机应用软件在执行过程中某些方面的 内部活动,这些内部活动往往是从外部观察不到、或难以观察到的。这样的需要,最典型的 就是程序调试,但也不仅仅是程序调试。例如,假定我们知道某个软件在运行时要跟外界 通信,但是想要知道它究竟是跟谁通信,甚至怀疑它在起着木马的作用,那就需要调查一下 了。调查的方法之一是“抓包”,就是把它从网口上发出去IP包复制记录下来,再加以分析, 但是那实在并非易事。相比之下,如果我们能在计算机上观察到一个程序的运行踪 迹,知道 它在运行中以什么次序做了一些什么事,包括以谁为对象、做的是什么事、结果如何,那显 然比抓包更好,更何况有些活动根本就无包可抓,甚至从外部完全无法察觉。自己开发的软件都是有源代码的,开源软件也是有源代码的。对于有源代码的软 件,程序调试的有效手段之一是在程序中插上一些“运行日志(Log) ”语句,使程序在执行过 程中把一些日志信息记录在一个文件中,或者显示在屏幕上,这样就可以看到这个程序的 运行踪迹。可是,对于不提供源代码的软件,这个办法就无法使用了,因为没有源代码就无 法往程序中插日志语句。另一方面,事实上没有一种应用软件能事无巨细完全由自己实现所有的功能,都 需要调用由别的软件模块特别是DLL、即“动态连接库”提供的更为基本的功能。而DLL,也 是分层次的,一个DLL可以进一步调用由更低层DLL提供的更基本的功能,直至通过系统调 用进入操作系统内核。每一个DLL都“导出” 一组预先定义好的函数,称为“导出函数”,每 个导出函数实现一个功能,可以由上一层的软件加以调用。所谓“操作系统平台”,特别是 Windows平台,实际上就包含着许多由微软提供的DLL,这些DLL都是不提供源代码的,所以 也都不能通过插入日志语句的方法来查看程序执行的踪迹。所以,即使应用软件本身有源 代码,程序一进入这些DLL就没有办法了。要是应用软件本身也没有源代码,那就更没有办 法了。那么,如果既没有应用软件的源代码,更没有DLL的源代码,还有没有办法记录下 程序的运行踪迹呢?本专利技术所述的方法就是要解决这个问题。如上所述,没有一种应用软件能事无巨细完全由自己实现所有的功能,都需要调 用由别的软件模块特别是DLL提供的基本功能,Windows软件尤其如此,因为Windows软 件很少使用静态连接的库程序,而Windows软件恰好又是应用软件的主流。所以,对于 Windows应用软件,如果我们能在日志中记录下对于顶层DLL导出函数的调用,那就相当 于有了一份运行这个软件时的“大事记”。如果再记录下对下一层DLL导出函数的调用,那 就有了关于更深一层细节的历史记录。事实上,根据不同的目的和要求,一般并不需要记录下对所有DLL的所有导出函数的调用,而是有选择的记录,有时候可能只需要记录下对 某个特定DLL的某些导出函数的调用。在前面讲到的例子中,我们需要了解的只是应用软 件的网络操作,而Windows应用软件的所有网络操作都必定流经一个名为ws2_32. dll的 DLL (这一点可以通过工具观察,下面会讲到),只要把对于这个特定DLL的导出函数的调用 都记录下来,就可以了解其所有的网络操作。 所以,问题在于,对一个特定的DLL,如果其本身不提供源代码、而且其上层软件 (例如.exe应用软件,或别的DLL)也不提供源代码,那么怎样才能把对这个DLL的导出函 数的调用记录下来。这是一个很有实用意义、但又难以解决的问题。
技术实现思路
为深入调查计算机应用软件在执行过程中某些方面的内部活动,本专利技术提供了一 种对调用DLL导出函数进行拦截跟踪的方法,可以用来记录对特定DLL的导出函数在运行 时受到调用的历史。本专利技术解决其技术问题采用的技术方案这个方法的要点为 将原来的目标DLL改名。 为改名后的DLL创建一个.def文件,这个.def文件的内容与原目标DLL的.def 文件逻辑上相同,定义着相同的导出函数集合,并且每个导出函数的调用界面都和原来一 样。 再创建一个.def文件,这个.def文件的文件名是在原目标DLL文件名上加后 缀‘’,这个.def文件的内容与原目标DLL的.def文件逻辑上相同,但是每个导出函数的 函数名都是在原有的函数上加后缀‘_v’。 创建一个与文件名带后缀的.def文件同名的DLL,称为“下位虚拟目标DLL”,这 个DLL导入改名后的目标DLL,其导出则取决于上述文件名带后缀的.def文件,在这个DLL 的代码中每个导出函数的函数名都带后缀‘_v’,其实现都是以输入调用参数为输出调用参 数来调用对应的导入函数,即由改名后的原目标DLL所导出的对应函数,其函数名就是在 本导出函数的函数名中去掉后缀‘_v’。 再创建一个与原目标DLL同名的DLL,称为“上位虚拟目标DLL”。这个DLL采用 原目标DLL的.def文件,所以有着与原目标文件相同的导出函数集合,并且集合中的每个 导出函数的调用界面都与原目标DLL—样。这个DLL导入上述文件名带后缀或前缀的DLL。 在这个DLL的代码中,每个导出函数的函数名都与原目标DLL中的对应寒暑相同,其实现都 是一个Log语句(用来生成日志记录的打印语句)加上以输入调用参数为输出调用参数 来调用一个导入函数,这个导入函数的函数名就是在本导出函数的函数名中加上后缀或前圣双。这样,当上层软件模块在初始化时指明要求动态连接到原目标DLL时,实际连接 的是上位虚拟目标DLL,但是这个DLL又会要求动态连接到下位虚拟目标DLL。而下位虚拟 目标DLL,则又会要求动态连接到改名后的目标DLL。这些动态连接的过程都是由系统加以 完成的。经过这样的动态连接之后,当上层软件模块调用原目标DLL中的某个导出函数时, 实际受到调用的是上位虚拟目标DLL中的对应函数,这个函数又调用下位虚拟目标DLL中 的对应函数,然后才真正调用到原目标DLL中的那个函数。而Log语句,则插在上位虚拟目标DLL的导出函数中,当然也可以插在下位虚拟目标DLL的导出函数中。另一方面,插入的语句当然也可以不是Log语句、而是别的什么语句,例如调用由 另一个DLL导出的什么函数等等。所以,虽然本专利技术直接的目的是为了记录运行踪迹,但也 可用于其它目的,例如把DLL的某个导出函数所实现的功能替换成其它功能,或者对某些 参数加以替换或修改等等。本专利技术有益的效果是为这个问题的解决提供一种方法,使程序员们可以按需要 对特定DLL的导出函数所受调用进行拦截跟踪,用来记录这些导出函数在运行时受到调用 的历史。本专利技术主要的用途是记录应用软件的运行踪迹,但也可用于其它目的,例如把DLL 的导出函数替换成其它函数,或者对某些参数加以替换或修改等等。附图说明图1是应用软件和DLL的依赖关系示意图 图2以两个假想的没有源代码的软件模块A. exe和B. dll为例说明,在实施本方 法之前无法插入Log语句或别的语句的示意图。图3说明实施了本专利技术所述方法之后的情况示意图。具体实施本文档来自技高网
...

【技术保护点】
一种对调用DLL导出函数进行拦截跟踪的方法,其特征是:1)将原来的目标DLL改名;2)为改名后的DLL创建一个.def文件,这个.def文件的内容与原目标DLL的.def文件逻辑上相同,定义着相同的导出函数集合,并且每个导出函数的调用界面都和原来一样;3)再创建一个.def文件,这个.def文件的文件名是在原目标DLL文件名上加预定的后缀,这个.def文件的内容与原目标DLL的.def文件逻辑上相同,但是每个导出函数的函数名都在原有的函数名上加预定的后缀;4)创建一个与文件名带后缀的.def文件同名的DLL,称为“下位虚拟目标DLL”,这个DLL导入改名后的原目标DLL,其导出则取决于上述文件名带后缀的.def文件,在这个DLL的代码中每个导出函数的函数名都带预定的后缀,其实现都是以输入调用参数为输出调用参数来调用对应的导入函数,即由改名后的原目标DLL所导出的对应函数,其函数名就是在本导出函数的函数名中去掉后缀;5)创建一个与原目标DLL同名的DLL,称为“上位虚拟目标DLL”,这个DLL采用原目标DLL的.def文件,有着与原目标文件相同的导出函数集合,并且集合中的每个导出函数的调用界面都与原目标DLL一样,这个DLL导入上述下位虚拟目标DLL,在这个DLL的代码中,每个导出函数的函数名都与原目标DLL中的对应函数相同,其基本实现是以输入调用参数为输出调用参数调用由上述下位虚拟目标DLL导出的对应函数。...

【技术特征摘要】

【专利技术属性】
技术研发人员:金涛王承志毛德操
申请(专利权)人:浙大网新科技股份有限公司
类型:发明
国别省市:86[]

网友询问留言 已有1条评论
  • 来自[未知地区] 2011年10月16日 22:50
    我擦,谁知道调用的参数有几个呢?
    0
1