CN106021096B - 一种异常函数查找方法及装置 - Google Patents
一种异常函数查找方法及装置 Download PDFInfo
- Publication number
- CN106021096B CN106021096B CN201610302852.5A CN201610302852A CN106021096B CN 106021096 B CN106021096 B CN 106021096B CN 201610302852 A CN201610302852 A CN 201610302852A CN 106021096 B CN106021096 B CN 106021096B
- Authority
- CN
- China
- Prior art keywords
- function
- export
- export function
- address
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种异常函数查找方法及装置,其中,该方法包括:获取同一目录下的至少一个动态链接库DLL文件;分别加载所述至少一个DLL文件;获取所述至少一个DLL文件的关联数据,所述关联数据包括所述至少一个DLL文件对应的至少一个第一导出函数;根据所述至少一个第一导出函数,获取所述至少一个第一导出函数对应的函数地址;根据所述至少一个第一导出函数对应的函数地址,从所述至少一个第一导出函数中确定异常导出函数。实施本发明实施例,能够提高异常导出函数的查找效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种异常函数查找方法及装置。
背景技术
随着计算机技术的不断发展,用户设备的***版本越来越多,如Windows xp、Vista、Windows 7、Windows 10等等。在Windows***中,许多应用程序并不是一个完整的可执行文件,而是被分割成一些相对独立的DLL(Dynamic Link Library,动态链接库)文件,放置于***中。目前,每种***都具有一些公共的DLL文件,如ntdll.dll、shell32.dll、KERNEL32.dll等文件,每个DLL文件都具有自身的导出函数,用于将DLL文件加载给进程调用。由于当前***版本较多,不同***对应的公共DLL文件可能不尽相同,一些新版本***上新增的导出函数在旧版本***上不存在,如果在旧版本***上直接或间接使用新版本***上的函数时,就会导致程序崩溃。然而,当导致程序崩溃的异常导出函数过多时,通过一个个记录并查找出所有的异常导出函数将需要花费大量的时间,从而使得查找效率低下。
发明内容
本发明实施例公开了一种异常函数查找方法及装置,能够提高异常导出函数的查找效率。
本发明实施例第一方面公开了一种异常函数查找方法,包括:
获取至少一个动态链接库DLL文件,所述至少一个DLL文件位于同一目录下;
分别加载所述至少一个DLL文件;
获取所述至少一个DLL文件的关联数据,所述关联数据包括所述至少一个DLL文件对应的至少一个第一导出函数;
根据所述至少一个第一导出函数,获取所述至少一个第一导出函数对应的函数地址;
根据所述至少一个第一导出函数对应的函数地址,从所述至少一个第一导出函数中确定异常导出函数。
结合本发明实施例第一方面,在本发明实施例第一方面的第一种可能的实施方式中,所述根据所述至少一个第一导出函数对应的函数地址,从所述至少一个第一导出函数中确定异常导出函数,包括:
判断所述至少一个第一导出函数对应的函数地址中是否存在空地址;
当所述至少一个第一导出函数对应的函数地址中存在空地址时,将空地址所对应的导出函数确定为异常导出函数。
结合本发明实施例第一方面,在本发明实施例第一方面的第二种可能的实施方式中,所述方法还包括:
输出提示消息,所述提示消息用于展示所述异常导出函数。
结合本发明实施例第一方面或第一方面的第一种或第二种可能的实施方式,在本发明实施例第一方面的第三种可能的实施方式中,所述根据所述至少一个第一导出函数,获取所述至少一个第一导出函数对应的函数地址,包括:
根据所述至少一个第一导出函数的名称,利用预设算法获取所述至少一个第一导出函数对应的函数地址。
结合本发明实施例第一方面或第一方面的第一种或第二种可能的实施方式,在本发明实施例第一方面的第四种可能的实施方式中,所述关联数据还包括与所述至少一个DLL文件相关联的目标DLL文件对应的至少一个第二导出函数,所述方法还包括:
根据所述至少一个第二导出函数,获取所述至少一个第二导出函数对应的函数地址;
根据所述至少一个第二导出函数对应的函数地址,从所述至少一个第二导出函数中确定异常导出函数。
本发明实施例第二方面公开了一种异常函数查找装置,包括:
第一获取单元,用于获取至少一个动态链接库DLL文件,所述装置的可执行文件与所述至少一个DLL文件位于同一目录下;
加载单元,用于分别加载所述至少一个DLL文件;
第二获取单元,用于获取所述至少一个DLL文件的关联数据,所述关联数据包括所述至少一个DLL文件对应的至少一个第一导出函数;
第三获取单元,用于根据所述至少一个第一导出函数,获取所述至少一个第一导出函数对应的函数地址;
确定单元,用于根据所述至少一个第一导出函数对应的函数地址,从所述至少一个第一导出函数中确定异常导出函数。
结合本发明实施例第二方面,在本发明实施例第二方面的第一种可能的实施方式中,所述确定单元包括:
判断子单元,用于判断所述至少一个第一导出函数对应的函数地址中是否存在空地址;
确定子单元,用于当所述判断子单元判断出所述至少一个第一导出函数对应的函数地址中存在空地址时,将空地址所对应的导出函数确定为异常导出函数。
结合本发明实施例第二方面,在本发明实施例第二方面的第二种可能的实施方式中,所述装置还包括:
输出单元,用于输出提示消息,所述提示消息用于展示所述异常导出函数。
结合本发明实施例第二方面或第二方面的第一种或第二种可能的实施方式,在本发明实施例第二方面的第三种可能的实施方式中,所述第三获取单元具体用于根据所述至少一个第一导出函数的名称,利用预设算法获取所述至少一个第一导出函数对应的函数地址。
结合本发明实施例第二方面或第二方面的第一种或第二种可能的实施方式,在本发明实施例第二方面的第四种可能的实施方式中,所述关联数据还包括与所述至少一个DLL文件相关联的目标DLL文件对应的至少一个第二导出函数;
所述第三获取单元,还用于根据所述至少一个第二导出函数,获取所述至少一个第二导出函数对应的函数地址;
所述确定单元,还用于根据所述至少一个第二导出函数对应的函数地址,从所述至少一个第二导出函数中确定异常导出函数。
本发明实施例中,可以获取在同一目录下的至少一个动态链接库DLL文件,并分别加载上述至少一个DLL文件,可以获取上述至少一个DLL文件的关联数据,该关联数据可以包括上述至少一个DLL文件对应的至少一个第一导出函数,并根据上述至少一个第一导出函数获取对应的函数地址,可以根据获得的上述至少一个第一导出函数对应的函数地址,从上述至少一个第一导出函数中确定异常导出函数。可见,实施本发明实施例,能够一次性获取多个DLL文件使用的异常导出函数,从而有效地提高异常导出函数的查找效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例公开的一种异常函数查找方法的流程示意图;
图2是本发明实施例公开的另一种异常函数查找方法的流程示意图;
图3是本发明实施例公开的一种DLL文件加载运行的界面示意图;
图4是本发明实施例公开的一种异常函数查找装置的结构示意图;
图5是本发明实施例公开的另一种异常函数查找装置的结构示意图;
图6是本发明实施例公开的又一种异常函数查找装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种异常函数查找方法及装置,能够一次性获取多个DLL文件的异常导出函数,从而有效地提高异常导出函数的查找效率。以下分别进行详细说明。
请参阅图1,图1是本发明实施例公开的一种异常函数查找方法的流程示意图。如图1所示,该异常函数查找方法可以包括以下步骤:
101、获取至少一个动态链接库DLL文件。
本发明实施例中,异常函数查找装置可以同时获取多个DLL文件,且这多个DLL文件可以位于同一存储目录下。具体地,异常函数查找装置可以通过调用FindFirstFile函数和FindNextFile函数去遍历一个目录下的部分或全部的文件,以获得同一目录下的至少一个DLL文件。其中,FindFirstFile函数可以根据文件名到一个目录(如文件夹)中去搜索指定文件;FindNextFile函数可以用来遍历目录或文件,可以判断当前目录下是否有下一个目录或文件。
本发明实施例中,异常函数查找装置可以包括移动手机、电脑、个人数字助理(Personal Digital Assistant,PDA)、移动互联网设备(Mobile Internet Device,MID)、智能穿戴设备(如智能手表、智能手环等)等各类装置,本发明实施例不作限定。
102、分别加载上述至少一个DLL文件。
本发明实施例中,当获取到同一目录下的至少一个DLL文件后,可以分别对上述至少一个DLL文件进行加载,可以是对上述至少一个DLL文件中的文件进行逐一加载,也可以是对上述至少一个DLL文件中的文件进行同时加载,本发明实施例不作限定。
本发明实施例中,异常函数查找装置可以同时对多个DLL文件的导出函数进行检测,以检测出DLL文件所有直接或间接使用的异常导出函数。可以通过双击异常函数查找装置的可执行文件来运行程序并检测,此外,异常函数查找装置的可执行文件可以为后缀.exe文件,该可执行文件的保存路径与上述至少一个DLL文件的保存路径相同,即位于同一目录下。
具体地,异常函数查找装置分别加载上述至少一个DLL文件可以是在运行该可执行文件时通过调用LoadLibrary函数来分别加载上述至少一个DLL文件。其中,LoadLibrary函数用于载入指定的DLL文件,并将DLL文件映射到当前进程使用的地址空间(或内存),一旦载入,即可访问DLL文件内保存的数据资源。此外,可以调用FreeLibrary函数来释放加载的DLL文件。
103、获取上述至少一个DLL文件的关联数据,该关联数据包括上述至少一个DLL文件对应的至少一个第一导出函数。
本发明实施例中,当上述至少一个DLL文件分别被加载后,可以分别获取上述至少一个DLL文件的关联数据,该关联数据可以包括但不限于上述至少一个DLL文件对应的至少一个第一导出函数。上述至少一个DLL文件对应的至少一个第一导出函数可以为上述至少一个DLL文件直接使用的导出函数,第一导出函数可以是一个或多个,即每一个DLL文件对应的第一导出函数可以有一个或多个。
具体地,获取上述至少一个DLL文件的关联数据可以是通过调用ImageDirectoryEntryToData函数来获取一个结构数组(如PIMAGE_THUNK_DATA32),在该结构数组中可以保存有上述至少一个DLL文件对应的至少一个第一导出函数的信息(如名称)。此外,也可以获取另一个结构数组(如PIMAGE_IMPORT_DESCRIPTOR),可以用来保存上述至少一个DLL文件的数据。
104、根据上述至少一个第一导出函数,获取上述至少一个第一导出函数对应的函数地址。
本发明实施例中,当获取到上述至少一个第一导出函数后,可以分别获取上述至少一个第一导出函数对应的函数地址。具体地,可以是根据上述至少一个第一导出函数的名称来确定出每个第一导出函数的函数地址。
作为一种可选的实施方式,步骤104根据上述至少一个第一导出函数,获取上述至少一个第一导出函数对应的函数地址的具体实施方式可以包括以下步骤:
11)根据上述至少一个第一导出函数的名称,利用预设算法获取上述至少一个第一导出函数对应的函数地址;
在该实施方式中,预设算法可以是通过调用GetProcAddress函数来实现,GetProcAddress函数可以根据导出函数的名称动态获取该导出函数的地址。
105、根据上述至少一个第一导出函数对应的函数地址,从上述至少一个第一导出函数中确定异常导出函数。
本发明实施例中,当获取到上述至少一个第一导出函数对应的函数地址后,即可根据函数地址来判断是否存在异常导出函数,异常导出函数可以为导致运行的程序发生崩溃的导出函数。具体的,可以根据函数地址是否为空地址来确定出异常导出函数。
在图1所描述的方法中,可以获取在同一目录下的至少一个动态链接库DLL文件,并分别加载上述至少一个DLL文件,可以获取上述至少一个DLL文件的关联数据,该关联数据可以包括上述至少一个DLL文件对应的至少一个第一导出函数,并根据上述至少一个第一导出函数获取对应的函数地址,可以根据获得的上述至少一个第一导出函数对应的函数地址,从上述至少一个第一导出函数中确定异常导出函数。通过实施图1所描述的方法,能够一次性获取多个DLL文件使用到的异常导出函数,从而有效地提高异常导出函数的查找效率。
请参阅图2,图2是本发明实施例公开的另一种异常函数查找方法的流程示意图。如图2所示,该异常函数查找方法可以包括以下步骤:
201、获取至少一个动态链接库DLL文件。
本发明实施例中,异常函数查找装置中可以预先存储有可执行文件,该可执行文件可以用于同时对多个DLL文件的导出函数进行检测,以检测出DLL文件所有直接或间接使用的异常导出函数。在运行该可执行文件时,可以通过调用FindFirstFile函数和FindNextFile函数来获取至少一个DLL文件,其中,上述至少一个DLL文件位于同一目录下,且该可执行文件与上述至少一个DLL文件也位于同一目录下。
202、分别加载上述至少一个DLL文件。
本发明实施例中,在运行该可执行文件时,可以通过调用LoadLibrary函数来分别加载上述至少一个DLL文件。
203、获取上述至少一个DLL文件的关联数据,该关联数据包括上述至少一个DLL文件对应的至少一个第一导出函数。
204、根据上述至少一个第一导出函数,获取上述至少一个第一导出函数对应的函数地址。
本发明实施例中,可以通过调用GetProcAddress函数,利用上述至少一个第一导出函数的名称来获取对应的函数地址。
205、判断上述至少一个第一导出函数对应的函数地址中是否存在空地址,若是,则执行步骤206;若否,则结束本次操作。
206、将空地址所对应的导出函数确定为异常导出函数。
本发明实施例中,当获取到上述至少一个第一导出函数对应的函数地址时,可以判断这些函数地址中是否有空地址的存在,空地址即函数地址不存在,则可以认为空地址对应的导出函数并不存在,从而使用该导出函数时将会造成程序崩溃,因此,空地址所对应的导出函数可以确定为异常导出函数。
作为一种可选的实施方式,在执行完步骤206之后,图2所描述的方法还可以包括以下步骤:
21)输出提示消息,该提示消息用于展示上述确定出的异常导出函数。
在该实施方式中,可以以对话框、列表等形式展示检测出的异常导出函数,以使用户清楚的知道是哪些导出函数导致了程序的崩溃。也可以以语音播报的方式输出异常导出函数,该实施方式不作限定。
作为一种可选的实施方式,当上述至少一个DLL文件的关联数据还包括与所述至少一个DLL文件相关联的目标DLL文件对应的至少一个第二导出函数时,图2所描述的方法还可以包括以下步骤:
22)根据上述至少一个第二导出函数,获取上述至少一个第二导出函数对应的函数地址;
23)根据上述至少一个第二导出函数对应的函数地址,从上述至少一个第二导出函数中确定异常导出函数。
在该实施方式中,一个DLL文件可以自身独立,也可以依赖于一个或多个其他的DLL文件,上述至少一个DLL文件相关联的目标DLL文件即为每一个DLL文件分别依赖的其他DLL文件,每个目标DLL文件可以对应一个或多个第二导出函数,其中,第二导出函数为目标DLL文件直接使用的导出函数,为上述至少一个DLL文件间接使用的导出函数。其中,上述至少一个第二导出函数的信息以及目标DLL文件的数据也可以分别存储于通过调用ImageDirectoryEntryToData函数而获得的两个结构数组中。
在该实施方式中,在获得上述至少一个DLL文件直接使用的导出函数(即第一导出函数),并从直接使用的导出函数中确定出异常导出函数的同时,还可以获得上述至少一个DLL文件间接使用的导出函数(即第二导出函数),并从间接使用的导出函数中确定出异常导出函数。第二导出函数对应的函数地址的获取方法可以与第一导出函数对应的函数地址获取方法相同,具体地,通过调用GetProcAddress函数,利用上述至少一个第二导出函数的名称来获取对应的函数地址。此外,从第二导出函数中确定异常导出函数的方法可以与从第一导出函数中确定异常导出函数的方法相同,具体地,判断上述至少一个第二导出函数对应的函数地址中是否存在空地址,若存在,则将空地址所对应的导出函数确定为异常导出函数。
举例来说,请参阅图3,图3是本发明实施例公开的一种DLL文件加载运行的界面示意图。如图3所示,异常函数查找装置中包含有用于检测异常导出函数的可执行文件enumUnimport.exe,可以将该可执行文件看作是一测试工具enumUnimport,该测试工具可以对多个DLL文件同时进行异常导出函数的检测,这里以一个DLL文件kxereg.dl为例进行说明。kxereg.dl文件和测试工具enumUnimport位于同一目录下,如图3所示的release目录。运行测试工具enumUnimport,可以看到kxereg.dl文件还依赖使用了kernel32.dll、user32.dll、advapi32.dll、msucp80.dll等目标DLL文件,并在使用了advapi32.dll文件的RegDeleteKeyExW函数时程序发生了异常,即kxereg.dl文件间接调用了异常导出函数RegDeleteKeyExW函数,从而导致程序崩溃。
本发明实施例中,通过实施图2所描述的方法,能够一次性获取多个DLL文件直接或间接使用到的异常导出函数,从而有效地提高异常导出函数的查找效率。
请参阅图4,图4是本发明实施例公开的一种异常函数查找装置的结构示意图,可以用于执行本发明实施例公开的异常函数查找方法。如图4所示,该异常函数查找装置可以包括:
第一获取单元401,用于获取至少一个动态链接库DLL文件。
本发明实施例中,第一获取单元401可以同时获取多个DLL文件,具体地,可以通过调用FindFirstFile函数和FindNextFile函数去获取多个DLL文件。其中,上述至少一个DLL文件位于同一目录下,异常函数查找装置的可执行文件也与上述至少一个DLL文件位于同一目录下,该可执行文件可以用于同时对多个DLL文件的导出函数进行检测。
加载单元402,用于分别加载上述至少一个DLL文件。
本发明实施例中,加载单元402可以在运行该可执行文件时通过调用LoadLibrary函数来分别加载上述至少一个DLL文件。
第二获取单元403,用于获取上述至少一个DLL文件的关联数据,该关联数据包括上述至少一个DLL文件对应的至少一个第一导出函数。
本发明实施例中,上述至少一个DLL文件对应的至少一个第一导出函数可以为上述至少一个DLL文件直接使用的导出函数,每一个DLL文件对应的第一导出函数可以有一个或多个。
第三获取单元404,用于根据上述至少一个第一导出函数,获取上述至少一个第一导出函数对应的函数地址;
作为一种可选的实施方式,第三获取单元404可以具体用于根据上述至少一个第一导出函数的名称,利用预设算法获取上述至少一个第一导出函数对应的函数地址。具体地,第三获取单元404通过调用GetProcAddress函数根据上述至少一个第一导出函数的名称来获取上述至少一个第一导出函数对应的函数地址。
确定单元405,用于根据上述至少一个第一导出函数对应的函数地址,从上述至少一个第一导出函数中确定异常导出函数。
作为一种可选的实施方式,当上述至少一个DLL文件的关联数据还包括与所述至少一个DLL文件相关联的目标DLL文件对应的至少一个第二导出函数时,第三获取单元404,还用于根据上述至少一个第二导出函数,获取上述至少一个第二导出函数对应的函数地址;
确定单元405,还用于根据上述至少一个第二导出函数对应的函数地址,从上述至少一个第二导出函数中确定异常导出函数。
其中,上述至少一个DLL文件相关联的目标DLL文件即为每一个DLL文件分别依赖的其他DLL文件,每个目标DLL文件可以对应一个或多个第二导出函数,其中,第二导出函数为目标DLL文件直接使用的导出函数,且为上述至少一个DLL文件间接使用的导出函数。
请一并参阅图5,图5是本发明实施例公开的另一种异常函数查找装置的结构示意图,可以用于执行本发明实施例公开的异常函数查找方法。其中,图5所示的异常函数查找装置是在图4所示的异常函数查找装置的基础上进一步优化得到的。与图4所示的异常函数查找装置相比,图5所示的异常函数查找装置中确定单元405可以包括:
判断子单元4051,用于判断上述至少一个第一导出函数对应的函数地址中是否存在空地址;
确定子单元4052,用于当判断子单元4051判断出上述至少一个第一导出函数对应的函数地址中存在空地址时,将空地址所对应的导出函数确定为异常导出函数。
此外,判断子单元4051,还用于判断上述至少一个第二导出函数对应的函数地址中是否存在空地址;
确定子单元4052,还用于当判断子单元4051判断出上述至少一个第二导出函数对应的函数地址中存在空地址时,将空地址所对应的导出函数确定为异常导出函数。
作为一种可选的实施方式,图5所示的异常函数查找装置还可以包括:
输出单元406,用于输出提示消息,该提示消息用于展示异常导出函数。
本发明实施例中,通过实施图4和图5所示的异常函数查找装置,能够一次性获取多个DLL文件直接或间接使用到的异常导出函数,从而有效地提高异常导出函数的查找效率。
请参阅图6,图6是本发明实施例公开的又一种异常函数查找装置的结构示意图,可以用于执行本发明实施例公开的异常函数查找方法。如图6所示,该异常函数查找装置600可以包括:至少一个处理器601,至少一个输出装置602,存储器603等组件。其中,这些组件可以通过一条或多条总线604进行通信连接。本领域技术人员可以理解,图6中示出的异常函数查找装置的结构并不构成对本发明实施例的限定,它既可以是总线形结构,也可以是星型结构,还可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器601为异常函数查找装置的控制中心,利用各种接口和线路连接整个异常函数查找装置的各个部分,通过运行或执行存储在存储器603内的程序和/或模块,以及调用存储在存储器603内的数据,以执行异常函数查找装置的各种功能和处理数据。处理器601可以由集成电路(Integrated Circuit,简称IC)组成,例如可以由单颗封装的IC所组成,也可以由连接多颗相同功能或不同功能的封装IC而组成。举例来说,处理器601可以仅包括中央处理器(Central Processing Unit,简称CPU),也可以是CPU、数字信号处理器(digital signal processor,简称DSP)、图形处理器(Graphic Processing Unit,简称GPU)及各种控制芯片的组合。在本发明实施方式中,CPU可以是单运算核心,也可以包括多运算核心。
输出装置602可以包括显示屏、扬声器等,也可以包括有线接口、无线接口等。
存储器603可用于存储软件程序以及模块,处理器601和输出装置602通过调用存储在存储器603中的软件程序以及模块,从而执行异常函数查找装置的各项功能应用以及实现数据处理。存储器603主要包括程序存储区和数据存储区,其中,程序存储区可存储操作***、至少一个功能所需的应用程序等;数据存储区可存储根据异常函数查找装置的使用所创建的数据等。在本发明实施例中,操作***可以是Windows操作***(如xp、win7、win10等)、Android***或iOS***等等。
在图6所示的异常函数查找装置中,处理器601可以用于调用存储器603中存储的应用程序以执行以下操作:
获取至少一个动态链接库DLL文件,上述至少一个DLL文件位于同一目录下;
分别加载上述至少一个DLL文件;
获取上述至少一个DLL文件的关联数据,该关联数据包括上述至少一个DLL文件对应的至少一个第一导出函数;
根据上述至少一个第一导出函数,获取上述至少一个第一导出函数对应的函数地址;
根据上述至少一个第一导出函数对应的函数地址,从上述至少一个第一导出函数中确定异常导出函数。
作为一种可选的实施方式,处理器601根据上述至少一个第一导出函数对应的函数地址,从上述至少一个第一导出函数中确定异常导出函数的具体实施方式可以为:
判断上述至少一个第一导出函数对应的函数地址中是否存在空地址;
当上述至少一个第一导出函数对应的函数地址中存在空地址时,将空地址所对应的导出函数确定为异常导出函数。
作为一种可选的实施方式,处理器601还可以调用存储在存储器603中的应用程序,并执行以下操作:
触发输出装置602输出提示消息,该提示消息用于展示异常导出函数。
作为一种可选的实施方式,处理器601根据上述至少一个第一导出函数,获取上述至少一个第一导出函数对应的函数地址的具体实施方式可以为:
根据上述至少一个第一导出函数的名称,利用预设算法获取上述至少一个第一导出函数对应的函数地址。
作为一种可选的实施方式,上述至少一个DLL文件的关联数据还可以包括与上述至少一个DLL文件相关联的目标DLL文件对应的至少一个第二导出函数,处理器601还可以调用存储在存储器603中的应用程序,并执行以下操作:
根据上述至少一个第二导出函数,获取上述至少一个第二导出函数对应的函数地址;
根据上述至少一个第二导出函数对应的函数地址,从上述至少一个第二导出函数中确定异常导出函数。
具体地,本发明实施例中介绍的异常函数查找装置可以实施本发明结合图1或图2介绍的异常函数查找方法实施例中的部分或全部流程。
本发明实施例中,通过实施图6所示的异常函数查找装置,能够一次性获取多个DLL文件直接或间接使用到的异常导出函数,从而有效地提高异常导出函数的查找效率。
本发明所有实施例中的模块或子模块,可以通过通用集成电路,例如CPU,或通过ASIC(Application Specific Integrated Circuit,专用集成电路)来实现。
需要说明的是,对于前述的各个方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本申请,某一些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其他实施例的相关描述。
本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本发明实施例装置中的单元或子单元可以根据实际需要进行合并、划分和删减。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存取存储器(Random AccessMemory,简称RAM)等。
以上对本发明实施例公开的一种异常函数查找方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种异常函数查找方法,其特征在于,包括:
预先存储的可执行文件获取至少一个动态链接库DLL文件,所述可执行文件与所述至少一个动态链接库DLL文件位于同一目录下;
分别加载所述至少一个动态链接库DLL文件;
获取所述至少一个动态链接库DLL文件的关联数据,所述关联数据包括所述至少一个动态链接库DLL文件对应的至少一个第一导出函数;
根据所述至少一个第一导出函数,获取所述至少一个第一导出函数对应的函数地址;
根据所述至少一个第一导出函数对应的函数地址,从所述至少一个第一导出函数中确定异常导出函数。
2.根据权利要求1所述的方法,其特征在于,所述根据所述至少一个第一导出函数对应的函数地址,从所述至少一个第一导出函数中确定异常导出函数,包括:
判断所述至少一个第一导出函数对应的函数地址中是否存在空地址;
当所述至少一个第一导出函数对应的函数地址中存在空地址时,将空地址所对应的导出函数确定为异常导出函数。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
输出提示消息,所述提示消息用于展示所述异常导出函数。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述根据所述至少一个第一导出函数,获取所述至少一个第一导出函数对应的函数地址,包括:
根据所述至少一个第一导出函数的名称,利用预设算法获取所述至少一个第一导出函数对应的函数地址。
5.根据权利要求1-3中任一项所述的方法,其特征在于,所述关联数据还包括与所述至少一个动态链接库DLL文件相关联的目标动态链接库DLL文件对应的至少一个第二导出函数,所述方法还包括:
根据所述至少一个第二导出函数,获取所述至少一个第二导出函数对应的函数地址;
根据所述至少一个第二导出函数对应的函数地址,从所述至少一个第二导出函数中确定异常导出函数。
6.一种异常函数查找装置,其特征在于,包括:
第一获取单元,用于获取至少一个动态链接库DLL文件,所述装置的可执行文件与所述至少一个动态链接库DLL文件位于同一目录下;
加载单元,用于分别加载所述至少一个动态链接库DLL文件;
第二获取单元,用于获取所述至少一个动态链接库DLL文件的关联数据,所述关联数据包括所述至少一个动态链接库DLL文件对应的至少一个第一导出函数;
第三获取单元,用于根据所述至少一个第一导出函数,获取所述至少一个第一导出函数对应的函数地址;
确定单元,用于根据所述至少一个第一导出函数对应的函数地址,从所述至少一个第一导出函数中确定异常导出函数。
7.根据权利要求6所述的装置,其特征在于,所述确定单元包括:
判断子单元,用于判断所述至少一个第一导出函数对应的函数地址中是否存在空地址;
确定子单元,用于当所述判断子单元判断出所述至少一个第一导出函数对应的函数地址中存在空地址时,将空地址所对应的导出函数确定为异常导出函数。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括:
输出单元,用于输出提示消息,所述提示消息用于展示所述异常导出函数。
9.根据权利要求6-8中任一项所述的装置,其特征在于,所述第三获取单元具体用于根据所述至少一个第一导出函数的名称,利用预设算法获取所述至少一个第一导出函数对应的函数地址。
10.根据权利要求6-8中任一项所述的装置,其特征在于,所述关联数据还包括与所述至少一个动态链接库DLL文件相关联的目标动态链接库DLL文件对应的至少一个第二导出函数;
所述第三获取单元,还用于根据所述至少一个第二导出函数,获取所述至少一个第二导出函数对应的函数地址;
所述确定单元,还用于根据所述至少一个第二导出函数对应的函数地址,从所述至少一个第二导出函数中确定异常导出函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610302852.5A CN106021096B (zh) | 2016-05-09 | 2016-05-09 | 一种异常函数查找方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610302852.5A CN106021096B (zh) | 2016-05-09 | 2016-05-09 | 一种异常函数查找方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106021096A CN106021096A (zh) | 2016-10-12 |
CN106021096B true CN106021096B (zh) | 2018-12-21 |
Family
ID=57099669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610302852.5A Active CN106021096B (zh) | 2016-05-09 | 2016-05-09 | 一种异常函数查找方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106021096B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090126012A1 (en) * | 2007-11-14 | 2009-05-14 | Bank Of America Corporation | Risk Scoring System For The Prevention of Malware |
CN101615118A (zh) * | 2009-08-05 | 2009-12-30 | 腾讯科技(深圳)有限公司 | 导出原型的方法及装置 |
CN102004884A (zh) * | 2009-08-28 | 2011-04-06 | 华为技术有限公司 | 一种获取可执行文件输入表的方法及装置 |
CN105095763A (zh) * | 2015-08-10 | 2015-11-25 | 北京金山安全软件有限公司 | 漏洞防御方法及装置、电子设备 |
CN105487849A (zh) * | 2014-12-22 | 2016-04-13 | 哈尔滨安天科技股份有限公司 | 一种调用dll未知导出函数的方法及*** |
-
2016
- 2016-05-09 CN CN201610302852.5A patent/CN106021096B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090126012A1 (en) * | 2007-11-14 | 2009-05-14 | Bank Of America Corporation | Risk Scoring System For The Prevention of Malware |
CN101615118A (zh) * | 2009-08-05 | 2009-12-30 | 腾讯科技(深圳)有限公司 | 导出原型的方法及装置 |
CN102004884A (zh) * | 2009-08-28 | 2011-04-06 | 华为技术有限公司 | 一种获取可执行文件输入表的方法及装置 |
CN105487849A (zh) * | 2014-12-22 | 2016-04-13 | 哈尔滨安天科技股份有限公司 | 一种调用dll未知导出函数的方法及*** |
CN105095763A (zh) * | 2015-08-10 | 2015-11-25 | 北京金山安全软件有限公司 | 漏洞防御方法及装置、电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN106021096A (zh) | 2016-10-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107193750B (zh) | 一种脚本录制方法和装置 | |
CA2856268C (en) | Methods of detection of software exploitation | |
US20130219338A1 (en) | Automatic Magnification and Selection Confirmation | |
US8584123B2 (en) | Linking transactions | |
CN110287696B (zh) | 一种反弹shell进程的检测方法、装置和设备 | |
RU2010149889A (ru) | Конфигурируемое разделение для параллельных данных | |
CN110879742A (zh) | 虚拟机异步创建内部快照方法、装置及存储介质 | |
US10241895B2 (en) | Memory stack trace management tool | |
CN111027054A (zh) | 基于安卓***判断应用程序在多开环境中运行方法、*** | |
CN103714069A (zh) | 后台打开页面的方法和装置 | |
CN111949513A (zh) | 一种配置文件加载方法、装置、电子设备和可读存储装置 | |
CN107786463A (zh) | 一种网络数据的下载方法及装置和介质产品 | |
US20110087722A1 (en) | Stitching transactions | |
EP3646221A1 (en) | Accelerated code injection detection using operating system controlled memory attributes | |
CN108388386A (zh) | 一种信息处理方法、终端设备及计算机可读存储介质 | |
CN103309741B (zh) | 调用插件功能的方法和装置 | |
US20220229673A1 (en) | Lazy loading of code containers based on invoked actions in applications | |
CN106021096B (zh) | 一种异常函数查找方法及装置 | |
CN105207830A (zh) | 一种终端信息的检测方法、装置及终端 | |
CN110959153A (zh) | 使用灵活后处理的应用分析 | |
CN108268298B (zh) | 桌面图标的生成方法、装置、存储介质及电子设备 | |
CN107273745A (zh) | 一种动态链接库形式的恶意代码的动态分析方法 | |
US20110088042A1 (en) | Combining monitoring techniques | |
CN106201776A (zh) | 包配置文件的备份方法及终端 | |
CN112487414B (zh) | 一种进程命令行的获取方法、装置、设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20181130 Address after: Room 105-53811, No. 6 Baohua Road, Hengqin New District, Zhuhai City, Guangdong Province Applicant after: Zhuhai Leopard Technology Co.,Ltd. Address before: 100085 East District, Second Floor, 33 Xiaoying West Road, Haidian District, Beijing Applicant before: BEIJING KINGSOFT INTERNET SECURITY SOFTWARE Co.,Ltd. |