CN111290747B - 一种创建函数钩子的方法、系统、设备及介质 - Google Patents

一种创建函数钩子的方法、系统、设备及介质 Download PDF

Info

Publication number
CN111290747B
CN111290747B CN202010154310.4A CN202010154310A CN111290747B CN 111290747 B CN111290747 B CN 111290747B CN 202010154310 A CN202010154310 A CN 202010154310A CN 111290747 B CN111290747 B CN 111290747B
Authority
CN
China
Prior art keywords
function
template
hook
hash value
creating
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
Application number
CN202010154310.4A
Other languages
English (en)
Other versions
CN111290747A (zh
Inventor
韩春超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202010154310.4A priority Critical patent/CN111290747B/zh
Publication of CN111290747A publication Critical patent/CN111290747A/zh
Application granted granted Critical
Publication of CN111290747B publication Critical patent/CN111290747B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种创建函数钩子的方法、系统、设备和存储介质,方法包括以下步骤:基于函数的类别创建函数钩子模板库;响应于接收到创建函数钩子的请求,根据发出所述请求的函数的类别匹配所述函数钩子库中对应的模板;响应于匹配成功,获取所述模板中对应的内容并将所述内容传输到创建的函数体中;响应于数据传输完成,基于所述函数体中的内容执行哈希计算以得到新哈希值,并判断所述新哈希值与所述模板中的哈希值是否相同;以及响应于所述新哈希值与所述模板中的哈希值相同,基于所述函数体创建函数钩子。本发明提出的方案通过创建模版,将需要hook的函数的代码编写进行统一化和标准化,并且基于哈希值判断传输的数据是否存在遗漏,进一步增强了函数钩子创建的安全性。

Description

一种创建函数钩子的方法、系统、设备及介质
技术领域
本发明涉及函数领域,更具体地,特别是指一种创建函数钩子的方法、系统、计算机设备及可读介质。
背景技术
随着当今世界信息技术的高速发展,人们在享受着互联网带来的工作和生活便利的同时,也时时刻刻受到计算机病毒的威胁。计算机病毒代码编写技术从最简单的功能性破坏到采用多态、加壳等技术以避开杀毒软件的检测。基于行为的恶意软件检测及响应技术越来越受到各个厂商的青睐。这种基于行为监测的核心功能就是给每个系统函数增加hook(函数钩子),用以获取函数的调用信息。
在传统的基于行为的恶意软件检测及响应技术的开发过程中,针对某个需要hook的windows函数进行hook代码的编写,然后对代码进行编译。这种方式的好处在需要hook的函数极少的情况下,可以快速的完成开发工作,同时也有极高的开发灵活性,但是对于在基于行为的恶意软件分析及响应的技术开发过程中,如果是对每个函数都挨个进行编写hook的话,这将是一个很大的工作量,同时,对每个函数进行hook开发,无法在开发过程中对函数进行分类处理,代码的可阅读、可维护性也不高。所以用这种传统的方式增加为系统函数增加hook的方法不适用于基于行为恶意软件行为检测及响应技术。
发明内容
有鉴于此,本发明实施例的目的在于提出一种创建函数钩子的方法、系统、计算机设备及计算机可读存储介质,通过创建模版,将需要hook的函数的代码编写进行统一化和标准化,并且基于哈希值判断传输的数据是否存在遗漏,进一步增强了函数钩子创建的安全性。
基于上述目的,本发明实施例的一方面提供了一种创建函数钩子的方法,包括如下步骤:基于函数的类别创建函数钩子模板库;响应于接收到创建函数钩子的请求,根据发出所述请求的函数的类别匹配所述函数钩子库中对应的模板;响应于匹配成功,获取所述模板中对应的内容并将所述内容传输到创建的函数体中;响应于数据传输完成,基于所述函数体中的内容执行哈希计算以得到新哈希值,并判断所述新哈希值与所述模板中的哈希值是否相同;以及响应于所述新哈希值与所述模板中的哈希值相同,基于所述函数体创建函数钩子。
在一些实施方式中,所述获取所述模板中对应的内容并将所述内容传输到创建的函数体中包括:获取标识信息,并基于所述标识信息对所述内容进行对应的读写操作。
在一些实施方式中,所述获取所述模板中对应的内容并将所述内容传输到创建的函数体中还包括:获取模式信息,并基于所述模式信息确定所述函数钩子的监控模式。
在一些实施方式中,所述基于函数的类别创建函数钩子模板库包括:根据处理的顺序对函数的内容进行分块存储。
本发明实施例的另一方面,还提供了一种创建函数钩子的系统,包括:创建模块,配置用于基于函数的类别创建函数钩子模板库;匹配模块,配置用于响应于接收到创建函数钩子的请求,根据发出所述请求的函数的类别匹配所述函数钩子库中对应的模板;传输模块,配置用于响应于匹配成功,获取所述模板中对应的内容并将所述内容传输到创建的函数体中;判断模块,配置用于响应于数据传输完成,基于所述函数体中的内容执行哈希计算以得到新哈希值,并判断所述新哈希值与所述模板中的哈希值是否相同;以及执行模块,配置利用与响应于所述新哈希值与所述模板中的哈希值相同,基于所述函数体创建函数钩子。
在一些实施方式中,所述传输模块还配置用于:获取标识信息,并基于所述标识信息对所述内容进行对应的读写操作。
在一些实施方式中,所述传输模块还配置用于:获取模式信息,并基于所述模式信息确定所述函数钩子的监控模式。
在一些实施方式中,所述创建模块还配置用于:根据处理的顺序对函数的内容进行分块存储。
本发明实施例的又一方面,还提供了一种计算机设备,包括:至少一个处理器;以及存储器,所述存储器存储有可在所述处理器上运行的计算机指令,所述指令由所述处理器执行时实现如上方法的步骤。
本发明实施例的再一方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时实现如上方法步骤的计算机程序。
本发明具有以下有益技术效果:通过创建模版,将需要hook的函数的代码编写进行统一化和标准化,并且基于哈希值判断传输的数据是否存在遗漏,进一步增强了函数钩子创建的安全性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
图1为本发明提供的创建函数钩子的方法的实施例的示意图;
图2为本发明提供的创建函数钩子的方法的实施例的计算机设备结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
基于上述目的,本发明实施例的第一个方面,提出了一种创建函数钩子的方法的实施例。图1示出的是本发明提供的创建函数钩子的方法的实施例的示意图。如图1所示,本发明实施例包括如下步骤:
S1、基于函数的类别创建函数钩子模板库;
S2、响应于接收到创建函数钩子的请求,根据发出请求的函数的类别匹配函数钩子库中对应的模板;
S3、响应于匹配成功,获取模板中对应的内容并将内容传输到创建的函数体中;
S4、响应于数据传输完成,基于函数体中的内容执行哈希计算以得到新哈希值,并判断新哈希值与模板中的哈希值是否相同;以及
S5、响应于新哈希值与模板中的哈希值相同,基于函数体创建函数钩子。
reStructuredText是扩展名为.rst的纯文本文件,含义为“重新构建的文本”,也被简称为RST或reST,.rst文件是轻量级标记语言的一种,被设计为容易阅读和编写的纯文本,可以借助Docutils这样的程序进行文档处理。本发明实施例中通过对.rst中的内容进行读取和处理,可以实现将内容转为C语言代码,从而用于系统函数的函数钩子。
基于函数的类别创建函数钩子模板库。本实施例以Windows系统为例进行说明,windows系统下的hook模版主要包含有hook信息块、parameter块、flags块、Ensure块、Pre代码块和Post代码块等。这些文本内容或部分代码块,都存在.rst文件中,每个rst文件包含一个或多个signature(签名)。我们将一个signature称为一个函数的hook模板,一个rst文件称为一个hook模板文件。本实施例将windows下功能类似的函数的hook模板放在同一个hook模板文件下,如与系统进程有关的process模板文件,与注册表有关的register模板文件。
模板中的内容被分为多个块,每个块以块名称开始,后面紧跟着“::”。例如,Hook模板文件头信息块:一般一个.rst格式的hook模板文件包含一个hook信息头,将其放在文件最上层,其所属的属性都以“*”开始,其格式为:
Signature::
*Calling convention:WINAPI|LINUXAPI
*Category:函数分类
其中Calling convention为调用约定信息,如果需要hook的平台为windows,则为WINAPI,如果需要hook的平台为linux,则为LINUXAPI;Category为函数的分类,也即是模板文件的分类,如process,register等。
Hook函数头信息块:每个.rst格式hook模板文件中包含一个或多个要hook的函数信息,每个函数都有hook函数头信息块,其中包含了函数名称。
函数的Signature属性块:这块内容中包含了此函数所在的动态链接库、日志处理方式、模式、返回值、特殊性等信息,其属性都以“*”开始,其格式为:
Signature::
*Library:xxxx
*Logging:always|ignore
*Mode:exploit|dumptls
*Return value:BOOL|CHAR|INT|…
*Special:ture|false
其中Library标记了此函数所在的动态链接库,可以只写名称,将后缀去掉,如kernel.dll,可以直接写kernel;Logging指示此函数在运行的过程中,是否将后边的log(日志)模块中的日志信息传递出来或忽略;Mode指示此函数的模式,有expoilt和dumptls两种模式,Return Value为函数的返回值类型,可以是C语言支持的任意一种数据类型;Special是标记此函数是特殊函数,其对应的函数值可以根据需求进行设定,表明函数的重要性。
Hooks信息块:主要包含函数调用约定(在windows下则默认为winapi,表示hook的函数是一个windows函数)、函数的分类、函数所在动态链接库、函数的返回值、以及一个isSuccess字段,其中isSuccess字段用来表示函数在挂钩后,在加载的时候是否加载成功。
Parameters块:用来记录了函数的各个参数,其中包括包括了函数名称,函数参数列表。参数列表中的语法为:
*DataType VariableName
**DataType VariableName
**DataType VariableName variable_name
其中*标志这个参数返回值中不需要用来监控,**表示这个参数需要进行监控,DataType为具体的参数的类型,VariableName为原始参数名称,variable_name为参数的别名,方便阅读使用。
Flags块:在函数调用的时候,会用到大量的flags(标识),如果在挂钩的时候,只是简单的将flags的值,返回给监控模块,这样是很难用来对数据进行分析的,所以将函数flags可能用到的值,都会在此块中记录,在函数调用的时候,可以根据此函数值将可读性更强的方式返回。
Ensure块:主要是作为一个标记,标记这个函数参数必须做处理,并返回给监控模块。
Interesting块:这个用于确定在hook的过程中需要额外地进行传输的函数。
Logging块:主要记录需要记录到日志中去的内容。
在一些实施方式中,所述基于函数的类别创建函数钩子模板库包括:根据处理的顺序对函数的内容进行分块存储。Pre块:主要是C语言代码片段代码,可以将此段代码放在函数的最前边,优先处理此代码片段,此代码片段可以是一些函数预处理语句、原函数的信息转存等。Post块,主要是C语言片段,可以将此段代码放在函数的最后边,最后处理此代码片段,此代码片段可以是一些资源回收、原函数的信息恢复等信息。Middle块:函数在运行过程中的处理模块,这部分也是一些C语言的代码片段,这主要是为了监控在hook的过程中程序是否运行,程序运行中的重要日志输出及指令输出。
响应于接收到创建函数钩子的请求,根据发出请求的函数的类别匹配函数钩子库中对应的模板。可以根据发出请求的函数的类别来匹配函数钩子库中的对应的类别,再在对应的类别中依次遍历模板。将所有的.rst格式的hook模板文件放在同一个目录下,可以使用python语言的Docutils工具获取文件中的内容。遍历目录下的所有rst文件,并判断其是否为空,如果为空,或者没有hook模板文件头,则跳过此文件。如果有内容,并且其中的格式符合模板的格式,则使用Docutils工具读取其中的内容。将读取到的内容组成一个python字典类型的数据结构,以函数所属的动态链接库、函数名、函数的各个属性块进行分组,组成一个要生成C语言代码的原始数据。
响应于匹配成功,获取模板中对应的内容并将内容传输到创建的函数体中。开始使用原始数据生成C代码,备份原有函数,复制原有函数的内容,将其命名为Old_{hook.library}_{hook.apiname}的格式,如,原有的函数为CreateProcessInternalW,所属的dll(动态链接库)为kerne32,则备份的函数名为Old_kernel32_CreateProcessInternalW()。old函数与原有函数的参数值不变,返回值也不变。创建新的函数,也即是函数hook,可以将其命名为New_{hook.library}_{hook.apiname},其格式与备份函数大致类似,其参数值与原有的参数一致,返回值与原有的参数一致。创建新的函数的函数体,也就是New_{hook.library}_{hook.apiname},这类函数的函数体,增加函数执行前的代码也即是pre块中的代码片段。
在一些实施方式中,所述获取所述模板中对应的内容并将所述内容传输到创建的函数体中包括:获取标识信息,并基于所述标识信息对所述内容进行对应的读写操作。获取flags(标识)信息,并将flags信息和数据中内容进行对比,并返回flags的代表值,如0代表read(读),1代表write(写),如果在运行过程中flags值为1,则在返回1的基础上附带返回一个write字符串。
在一些实施方式中,所述获取所述模板中对应的内容并将所述内容传输到创建的函数体中还包括:获取模式信息,并基于所述模式信息确定所述函数钩子的监控模式。获得原始数据中的mode(模式),确定挂钩时监控的模式,如果存在mode,则执行mode对应的方式,如果不存在mode,则不处理。
响应于数据传输完成,基于函数体中的内容执行哈希计算以得到新哈希值,并判断新哈希值与模板中的哈希值是否相同。
响应于新哈希值与模板中的哈希值相同,基于函数体创建函数钩子。
需要特别指出的是,上述创建函数钩子的方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于创建函数钩子的方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在实施例之上。
基于上述目的,本发明实施例的第二个方面,提出了一种创建函数钩子的系统,包括:创建模块,配置用于基于函数的类别创建函数钩子模板库;匹配模块,配置用于响应于接收到创建函数钩子的请求,根据发出所述请求的函数的类别匹配所述函数钩子库中对应的模板;传输模块,配置用于响应于匹配成功,获取所述模板中对应的内容并将所述内容传输到创建的函数体中;判断模块,配置用于响应于数据传输完成,基于所述函数体中的内容执行哈希计算以得到新哈希值,并判断所述新哈希值与所述模板中的哈希值是否相同;以及执行模块,配置利用与响应于所述新哈希值与所述模板中的哈希值相同,基于所述函数体创建函数钩子。
在一些实施方式中,所述传输模块还配置用于:获取标识信息,并基于所述标识信息对所述内容进行对应的读写操作。
在一些实施方式中,所述传输模块还配置用于:获取模式信息,并基于所述模式信息确定所述函数钩子的监控模式。
在一些实施方式中,所述创建模块还配置用于:根据处理的顺序对函数的内容进行分块存储。
基于上述目的,本发明实施例的第三个方面,提出了一种计算机设备,包括:至少一个处理器;以及存储器,存储器存储有可在处理器上运行的计算机指令,指令由处理器执行以实现如下步骤:S1、基于函数的类别创建函数钩子模板库;S2、响应于接收到创建函数钩子的请求,根据发出请求的函数的类别匹配函数钩子库中对应的模板;S3、响应于匹配成功,获取模板中对应的内容并将内容传输到创建的函数体中;S4、响应于数据传输完成,基于函数体中的内容执行哈希计算以得到新哈希值,并判断新哈希值与模板中的哈希值是否相同;以及S5、响应于新哈希值与模板中的哈希值相同,基于函数体创建函数钩子。
在一些实施方式中,所述获取所述模板中对应的内容并将所述内容传输到创建的函数体中包括:获取标识信息,并基于所述标识信息对所述内容进行对应的读写操作。
在一些实施方式中,所述获取所述模板中对应的内容并将所述内容传输到创建的函数体中还包括:获取模式信息,并基于所述模式信息确定所述函数钩子的监控模式。
在一些实施方式中,所述基于函数的类别创建函数钩子模板库包括:根据处理的顺序对函数的内容进行分块存储。
如图2所示,为本发明提供的上述创建函数钩子的方法的一个实施例的计算机设备结构示意图。
以如图2所示的装置为例,在该装置中包括一个处理器301以及一个存储器302,并还可以包括:输入装置303和输出装置304。
处理器301、存储器302、输入装置303和输出装置304可以通过总线或者其他方式连接,图2中以通过总线连接为例。
存储器302作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的创建函数钩子的方法对应的程序指令/模块。处理器301通过运行存储在存储器302中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例的创建函数钩子的方法。
存储器302可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据创建函数钩子的方法的使用所创建的数据等。此外,存储器302可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器302可选包括相对于处理器301远程设置的存储器,这些远程存储器可以通过网络连接至本地模块。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置303可接收输入的用户名和密码等信息。输出装置304可包括显示屏等显示设备。
一个或者多个创建函数钩子的方法对应的程序指令/模块存储在存储器302中,当被处理器301执行时,执行上述任意方法实施例中的创建函数钩子的方法。
执行上述创建函数钩子的方法的计算机设备的任何一个实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。
本发明还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时执行如上方法的计算机程序。
最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,创建函数钩子的方法的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,程序的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。
此外,根据本发明实施例公开的方法还可以被实现为由处理器执行的计算机程序,该计算机程序可以存储在计算机可读存储介质中。在该计算机程序被处理器执行时,执行本发明实施例公开的方法中限定的上述功能。
此外,上述方法步骤以及系统单元也可以利用控制器以及用于存储使得控制器实现上述步骤或单元功能的计算机程序的计算机可读存储介质实现。
此外,应该明白的是,本文的计算机可读存储介质(例如,存储器)可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。作为例子而非限制性的,非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦写可编程ROM(EEPROM)或快闪存储器。易失性存储器可以包括随机存取存储器(RAM),该RAM可以充当外部高速缓存存储器。作为例子而非限制性的,RAM可以以多种形式获得,比如同步RAM(DRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据速率SDRAM(DDRSDRAM)、增强SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)、以及直接Rambus RAM(DRRAM)。所公开的方面的存储设备意在包括但不限于这些和其它合适类型的存储器。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。
结合这里的公开所描述的各种示例性逻辑块、模块和电路可以利用被设计成用于执行这里功能的下列部件来实现或执行:通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。通用处理器可以是微处理器,但是可替换地,处理器可以是任何传统处理器、控制器、微控制器或状态机。处理器也可以被实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器结合DSP和/或任何其它这种配置。
结合这里的公开所描述的方法或算法的步骤可以直接包含在硬件中、由处理器执行的软件模块中或这两者的组合中。软件模块可以驻留在RAM存储器、快闪存储器、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动盘、CD-ROM、或本领域已知的任何其它形式的存储介质中。示例性的存储介质被耦合到处理器,使得处理器能够从该存储介质中读取信息或向该存储介质写入信息。在一个替换方案中,存储介质可以与处理器集成在一起。处理器和存储介质可以驻留在ASIC中。ASIC可以驻留在用户终端中。在一个替换方案中,处理器和存储介质可以作为分立组件驻留在用户终端中。
在一个或多个示例性设计中,功能可以在硬件、软件、固件或其任意组合中实现。如果在软件中实现,则可以将功能作为一个或多个指令或代码存储在计算机可读介质上或通过计算机可读介质来传送。计算机可读介质包括计算机存储介质和通信介质,该通信介质包括有助于将计算机程序从一个位置传送到另一个位置的任何介质。存储介质可以是能够被通用或专用计算机访问的任何可用介质。作为例子而非限制性的,该计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储设备、磁盘存储设备或其它磁性存储设备,或者是可以用于携带或存储形式为指令或数据结构的所需程序代码并且能够被通用或专用计算机或者通用或专用处理器访问的任何其它介质。此外,任何连接都可以适当地称为计算机可读介质。例如,如果使用同轴线缆、光纤线缆、双绞线、数字用户线路(DSL)或诸如红外线、无线电和微波的无线技术来从网站、服务器或其它远程源发送软件,则上述同轴线缆、光纤线缆、双绞线、DSL或诸如红外线、无线电和微波的无线技术均包括在介质的定义。如这里所使用的,磁盘和光盘包括压缩盘(CD)、激光盘、光盘、数字多功能盘(DVD)、软盘、蓝光盘,其中磁盘通常磁性地再现数据,而光盘利用激光光学地再现数据。上述内容的组合也应当包括在计算机可读介质的范围内。
以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。
应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。
上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。

Claims (10)

1.一种创建函数钩子的方法,其特征在于,包括以下步骤:
基于函数的类别创建函数钩子模板库;
响应于接收到创建函数钩子的请求,根据发出所述请求的函数的类别匹配所述函数钩子模板库中对应的模板包括:
将所有模板对应的模板文件存放到同一目录下,遍历所述目录下的所有模板文件并获取所述所有模板文件的内容;
判断所述所有模板文件的内容是否为空,响应于对应的模板文件的内容不为空且满足所述发出所述请求的函数的类别,将所述内容组成一个字典类型的数据结构,并以发出所述请求的函数所属的动态链接库、函数名、函数的各个属性块进行分组,组成一个用于生成C语言代码的原始数据;
响应于匹配成功,获取所述模板中对应的内容并将所述内容传输到创建的函数体中;
响应于数据传输完成,基于所述函数体中的内容执行哈希计算以得到新哈希值,并判断所述新哈希值与所述模板中的哈希值是否相同;以及
响应于所述新哈希值与所述模板中的哈希值相同,基于所述函数体创建函数钩子。
2.根据权利要求1所述的方法,其特征在于,所述获取所述模板中对应的内容并将所述内容传输到创建的函数体中包括:
获取标识信息,并基于所述标识信息对所述内容进行对应的读写操作。
3.根据权利要求1所述的方法,其特征在于,所述获取所述模板中对应的内容并将所述内容传输到创建的函数体中还包括:
获取模式信息,并基于所述模式信息确定所述函数钩子的监控模式。
4.根据权利要求1所述的方法,其特征在于,所述基于函数的类别创建函数钩子模板库包括:
根据处理的顺序对函数的内容进行分块存储。
5.一种创建函数钩子的系统,其特征在于,包括:
创建模块,配置用于基于函数的类别创建函数钩子模板库;
匹配模块,配置用于响应于接收到创建函数钩子的请求,根据发出所述请求的函数的类别匹配所述函数钩子模板库中对应的模板包括:
将所有模板对应的模板文件存放到同一目录下,遍历所述目录下的所有模板文件并获取所述所有模板文件的内容;
判断所述所有模板文件的内容是否为空,响应于对应的模板文件的内容不为空且满足所述发出所述请求的函数的类别,将所述内容组成一个字典类型的数据结构,并以发出所述请求的函数所属的动态链接库、函数名、函数的各个属性块进行分组,组成一个用于生成C语言代码的原始数据;
传输模块,配置用于响应于匹配成功,获取所述模板中对应的内容并将所述内容传输到创建的函数体中;
判断模块,配置用于响应于数据传输完成,基于所述函数体中的内容执行哈希计算以得到新哈希值,并判断所述新哈希值与所述模板中的哈希值是否相同;以及
执行模块,配置利用与响应于所述新哈希值与所述模板中的哈希值相同,基于所述函数体创建函数钩子。
6.根据权利要求5所述的系统,其特征在于,所述传输模块还配置用于:
获取标识信息,并基于所述标识信息对所述内容进行对应的读写操作。
7.根据权利要求5所述的系统,其特征在于,所述传输模块还配置用于:
获取模式信息,并基于所述模式信息确定所述函数钩子的监控模式。
8.根据权利要求5所述的系统,其特征在于,所述创建模块还配置用于:
根据处理的顺序对函数的内容进行分块存储。
9.一种计算机设备,其特征在于,包括:
至少一个处理器;以及
存储器,所述存储器存储有可在所述处理器上运行的计算机指令,所述指令由所述处理器执行时实现权利要求1-4任意一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-4任意一项所述方法的步骤。
CN202010154310.4A 2020-03-07 2020-03-07 一种创建函数钩子的方法、系统、设备及介质 Active CN111290747B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010154310.4A CN111290747B (zh) 2020-03-07 2020-03-07 一种创建函数钩子的方法、系统、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010154310.4A CN111290747B (zh) 2020-03-07 2020-03-07 一种创建函数钩子的方法、系统、设备及介质

Publications (2)

Publication Number Publication Date
CN111290747A CN111290747A (zh) 2020-06-16
CN111290747B true CN111290747B (zh) 2022-06-24

Family

ID=71022597

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010154310.4A Active CN111290747B (zh) 2020-03-07 2020-03-07 一种创建函数钩子的方法、系统、设备及介质

Country Status (1)

Country Link
CN (1) CN111290747B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111539010B (zh) * 2020-06-16 2023-09-01 北京明朝万达科技股份有限公司 剪贴板控制方法、装置、电子设备及计算机可读存储介质
CN116010112B (zh) * 2023-03-27 2023-06-09 北京渲光科技有限公司 钩子函数的调用方法、装置、计算机设备及可读存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108536434B (zh) * 2018-01-09 2020-03-17 武汉斗鱼网络科技有限公司 一种基于高级程序设计语言实现钩子函数的方法及装置
CN108415739B (zh) * 2018-02-28 2020-04-14 腾讯科技(深圳)有限公司 一种动态链接库函数的钩挂方法、装置和存储介质
CN110750778A (zh) * 2019-09-29 2020-02-04 苏州浪潮智能科技有限公司 一种应用程序管控方法和装置

Also Published As

Publication number Publication date
CN111290747A (zh) 2020-06-16

Similar Documents

Publication Publication Date Title
CN102254111B (zh) 恶意网站检测方法及装置
CN104995630A (zh) 基于动态污点的安全性扫描
US8990559B2 (en) Automating the creation and maintenance of policy compliant environments
CN111290747B (zh) 一种创建函数钩子的方法、系统、设备及介质
CN109614203B (zh) 一种基于应用数据仿真的安卓应用云数据取证分析系统及方法
CN110071924B (zh) 基于终端的大数据分析方法及系统
CN113486350B (zh) 恶意软件的识别方法、装置、设备及存储介质
Chen et al. DroidCIA: A novel detection method of code injection attacks on HTML5-based mobile apps
JP6282217B2 (ja) 不正プログラム対策システムおよび不正プログラム対策方法
CN113157315A (zh) 一种软件不同版本的差异信息识别方法、装置、设备及介质
JP7314243B2 (ja) マルウェアの悪意ある行為フィーチャー情報を生成する方法
CN108133026B (zh) 一种多数据的处理方法、系统及存储介质
CN113129004A (zh) 交易安全性检测方法及装置
CN112379871A (zh) 一种数据处理的方法和装置
CN110442353B (zh) 一种安装包管理的方法、装置及电子设备
CN111723369A (zh) 一种ftp服务器的文件管理方法、设备以及介质
CN116700768B (zh) 一种应用的处理方法及相关装置
CN114417347A (zh) 应用程序的漏洞检测方法、装置、设备、存储介质和程序
CN114936368A (zh) 一种Java内存木马检测方法、终端设备及存储介质
CN109670337B (zh) 一种检测方法及装置
CN113504904A (zh) 用户定义函数实现方法、装置、计算机设备和存储介质
JP4937387B2 (ja) 自動書き換えプログラムおよび自動書き換え装置
CN113239408B (zh) 电子签章系统、方法、装置、设备及存储介质
CN107239703A (zh) 一种动态链接库缺失的可执行程序的动态分析方法
KR102178048B1 (ko) 개인정보 다운로드 탐지를 통한 데이터 모니터링 방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant