Windows环境下一种可配置和集成的Hook系统及其方法转让专利

申请号 : CN201710777071.6

文献号 : CN107688747B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张捷晟曾九天韩兰胜田钰杰付才余水肖雄火田昭

申请人 : 武汉倚天剑科技有限公司

摘要 :

本发明公开了Windows环境下一种可配置和集成的Hook系统及其方法,涉及DLL注入技术、Hook技术和进程间通信技术领域。本系统是:应用程序子系统包括注入器单元和钩子单元;注入器单元包括注入模块和通信模块;钩子单元包括内联钩子模块、导入地址表钩子模块和向量化异常处理钩子模块;注入模块、钩子单元、已注入的钩子单元和通信模块依次交互。本方法是:①创建命名管道;②选择目标进程;③选择注入的动态链接库;④选择注入方式;⑤反馈注入信息;⑥配置Hook参数;⑦向已注入的钩子单元传递Hook参数;⑧完成Hook功能流程;⑨反馈Hook信息。本发明具备可配置性,Hook的相关过程参数可以由用户调配;具有易操作的特性;可以帮助拦截获取到足够多的有用信息。

权利要求 :

1.Windows环境下一种可配置和集成的Hook系统的Hook方法,所述的Hook系统包括目标进程子系统(200),目标进程子系统(200)包括已注入的钩子单元(210);

设置有应用程序子系统(100);

应用程序子系统(100)包括注入器单元(110)和钩子单元(120);

注入器单元(110)包括注入模块(111)和通信模块(112);

钩子单元(120)包括内联钩子模块(121)、导入地址表钩子模块(122)和向量化异常处理钩子模块(123);

其交互关系是:

注入模块(111)、钩子单元(120)、已注入的钩子单元(210)和通信模块(112)依次交互;

所述的注入模块(111)是指一段可以将动态链接库DLL注入到另一个进程的程序,包括选择目标进程(111A)、选择注入的动态链接库(111B)、选择注入方式(111C)和配置钩子函数(111D);

所述的通信模块(112)是一段可以进行信息传递和接收的程序,包括命名管道通信(112A),命名管道通信(112A)包括依次进行交互的创建管道、等待连接和进行输入输出I/O操作;

所述的钩子单元(120)包括彼此独立的内联钩子模块(121)、导入地址表钩子模块(122)和向量化异常处理钩子模块(123);

内联钩子模块(121)是指实现了内联钩子完整过程的DLL文件;

导入地址表钩子模块(122)是指实现了导入地址表钩子完整过程的DLL文件;

向量化异常处理钩子模块(123)是指实现了向量化异常处理钩子完整过程的DLL文件;

其特征在于Hook方法包括下列步骤:

①创建命名管道,等待连接(401)

通信模块首先创建命名管道,并进入等待连接的状态,用于与步骤⑤⑥⑦⑧⑨里的已注入的钩子单元进行通信;

②选择目标进程(402)

在选择目标进程中,以进程标识PID加上进程名的形式向用户列出当前进程,用户进行选择即可,这一步确定了要钩取的目标进程子系统;

③选择注入的动态链接库(403)

通过选择注入的动态链接库,用户自行指定待注入的动态链接库DLL文件;本系统的钩子单元封装了三个动态链接库,每一个动态链接库都实现了不同且完整的Hook功能,用户可选择任意一种;

④选择注入方式(404)

通过选择注入方式,用户在系统提供的三种注入方式里选择,实现将步骤③中用户所指定的动态链接库注入到步骤②中所确定的目标进程子系统;

⑤反馈注入信息(405)

注入完成后,已注入的钩子单元与通信模块进行通信,向通信模块反馈注入信息;

⑥配置Hook参数(406)

根据通信模块里的注入反馈信息,若注入成功,在配置钩子函数里配置已注入的钩子单元所需的Hook参数;

⑦向已注入的钩子单元传递Hook参数(407)通信模块向已注入的钩子单元传递配置钩子函数中的Hook参数;

⑧完成Hook功能流程(408)

已注入的钩子单元获取到Hook参数后,在目标进程子系统实现完整的Hook功能流程;

⑨反馈Hook信息(409)

已注入的钩子单元向通信模块反馈Hook信息。

说明书 :

Windows环境下一种可配置和集成的Hook系统及其方法

技术领域

[0001] 本发明涉及DLL注入技术、Hook技术和进程间通信技术领域,尤其涉及Windows环境下一种可配置和集成的Hook系统及其方法。

背景技术

[0002] Hook技术作为一种底层、细致的安全技术,从安全防御角度来看,如今常见的安全卫士和电脑管家等应用产品,均在操作系统的内核底层挂钩了许多的内核钩子,监控许多内核函数的调用,与Hook技术的应用有着不可分割的关系。
[0003] 而从攻击的角度来看,Hook技术修改执行流,强制执行自定义函数过程的特点,被许多恶意软件(如木马,外挂等)所利用。
[0004] 但是Hook技术使用时需要多种其它技术作为支撑,比如DLL注入技术、进程间通信技术等,这些技术、流程非常繁琐,普通技术人员很难掌握。由此设计开发一款方便的、适合安全人员使用的Hook工具属技术首创且十分必要。

发明内容

[0005] 本发明的目的在于屏蔽Hook技术使用时繁琐的细节,提供Windows环境下一种可配置和集成的Hook系统及其方法,使不熟悉Hook技术的人也能轻松使用Hook技术。
[0006] 本发明的目的是这样实现的:
[0007] 通过将DLL注入模块、Hook单元、通信模块集成,并将Hook参数设置成可配置化;同时,在设计实现时提供简单易操作的界面,进一步减少用户的操作难度;用户首先选择需要注入的目标进程,再选择注入的DLL,本系统集成了三种Hook方式,可以根据需要选择对应的Hook方式,而不需要用户自己开发,提高了效率。接着用户可以选择注入方式,本平台集成了三种DLL注入方式,同样可以根据用户需要进行选择;接着根据选择的注入方式配置Hook参数;通信模块会反馈注入的信息和Hook的信息。
[0008] 具体地说:
[0009] 一、Windows环境下一种可配置和集成的Hook系统(简称系统)
[0010] 本系统包括工作对象——目标进程子系统,目标进程子系统包括已注入的钩子单元;
[0011] 设置有应用程序子系统;
[0012] 应用程序子系统包括注入器单元和钩子单元;
[0013] 注入器单元包括注入模块和通信模块;
[0014] 钩子单元包括内联钩子模块、导入地址表钩子模块和向量化异常处理钩子模块;
[0015] 其交互关系是:
[0016] 注入模块、钩子单元、已注入的钩子单元和通信模块依次交互。
[0017] 二、Windows环境下一种可配置和集成的Hook方法(简称方法)
[0018] 本方法包括下列步骤:
[0019] ①创建命名管道;
[0020] ②选择目标进程;
[0021] ③选择注入的动态链接库;
[0022] ④选择注入方式;
[0023] ⑤反馈注入信息;
[0024] ⑥配置Hook参数;
[0025] ⑦向已注入的钩子单元传递Hook参数;
[0026] ⑧完成Hook功能流程;
[0027] ⑨反馈Hook信息。
[0028] 本发明具有下列优点和积极效果:
[0029] ①具有多种Hook方式,直接使用不需要开发;
[0030] ②具有多种DLL注入方式,不需要用户开发;
[0031] ③图形界面简易,直观地观察到Hook和DLL注入的反馈信息。
[0032] ④具备可配置性,Hook的相关过程参数可以由用户调配;
[0033] ⑤具有易操作的特性,用户不需要清楚Hook技术的内部细节即可进行操作;
[0034] ⑥可以使开发或维护人员监控获取到目标软件功能之外的许多信息,这些信息或可作为应用本身功能稳定输出,也可作为判断应用核心功能点是否遭遇攻击以及做出进一步的攻击阻断的依据;
[0035] ⑦面对一个无源码,封装完成且有调试保护的软件,可以帮助拦截获取到足够多的有用信息。

附图说明

[0036] 图1是本系统的结构方框图;
[0037] 图2是注入模块111的结构方框图;
[0038] 图3是通信模块112的结构方框图;
[0039] 图4是本方法的工作流程图。
[0040] 图中:
[0041] 100—应用程序子系统
[0042] 110—注入器单元,
[0043] 111—注入模块,
[0044] 111A—选择目标进程,
[0045] 111B—选择注入的动态链接库,
[0046] 111C—选择注入方式,
[0047] 111D—配置钩子函数,
[0048] 112—通信模块,
[0049] 112A—命名管道通信,
[0050] 120—钩子单元,
[0051] 121—内联钩子模块,
[0052] 122—导入地址表钩子模块,
[0053] 123—向量化异常处理钩子模块;
[0054] 200—目标进程子系统,
[0055] 210—已注入的钩子单元。
[0056] 英译汉
[0057] 1、DLL:Dynamic Link Library或者Dynamic-link library,动态链接库,是微软公司在微软视窗操作系统中实现共享函数库概念的一种实作方式;DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件;这些库函数的扩展名是DLL、OCX(包含ActiveX控制的库)或者DRV(旧式的系统驱动程序);函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数;DLL还有助于共享数据和资源;多个应用程序可同时访问内存中单个DLL副本的内容;DLL是一个包含可由多个程序同时使用的代码和数据的库。
[0058] 2、Hook:钩子,是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的;当消息到达后,在目标窗口处理函数之前处理它;钩子机制允许应用程序截获处理window消息或特定事件;钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统;每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权;这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

具体实施方式

[0059] 下面结合附图和实施例详细说明:
[0060] 一、系统
[0061] 1、总体
[0062] 如图1,本系统包括工作对象——目标进程子系统200,目标进程子系统200包括已注入的钩子单元210;
[0063] 设置有应用程序子系统100;
[0064] 应用程序子系统100包括注入器单元110和钩子单元120;
[0065] 注入器单元110包括注入模块111和通信模块112;
[0066] 钩子单元120包括内联钩子模块121、导入地址表钩子模块122和向量化异常处理钩子模块123;
[0067] 其交互关系是:
[0068] 注入模块111、钩子单元120、已注入的钩子单元210和通信模块112依次交互。
[0069] 工作机理:
[0070] 用户首先在注入模块111中确定需要注入的目标进程子系统200,并选择钩子单元120中的某一模块;在注入模块111里选择了注入的方式后,注入模块111将进行注入操作,操作完成后被选择的钩子模块将成为已注入的钩子单元210;此时已注入的钩子单元210还不能正常运行,要用户在注入模块111配置了Hook参数后,由通信模块112向已注入的钩子单元210传递Hook参数,方可完成Hook功能;在注入操作和Hook功能完成后,已注入的钩子单元210会向通信模块112反馈信息,提示用户操作是否成功。
[0071] 2、功能单元及其模块
[0072] 1)注入器单元110
[0073] 注入器单元110包括注入模块111和通信模块112。
[0074] (1)注入模块111
[0075] 注入模块111是指一段可以将动态链接库DLL注入到另一个进程的程序,其功能是将钩子单元110中的某一模块注入到目标进程子系统200里,并且还可以配置Hook参数。
[0076] 如图2,注入模块111包括选择目标进程111A、选择注入的动态链接库111B、选择注入方式111C和配置钩子函数111D;
[0077] 选择目标进程111A提供给用户选择的目标进程以进程标识PID+进程名显示,用户可自行选择;
[0078] 选择注入的动态链接库111B让用户指定待注入的DLL文件;
[0079] 选择注入方式111C提供了三种注入方式,分别是远程线程注入、异步过程调用注入、消息钩子注入;在用户选择了目标进程以及待注入DLL文件(文件完整路径)时,可利用该模块执行注入操作。
[0080] 配置钩子函数111D对内联钩子模块121的Hook地址,导入地址表钩子模块122的目标库,目标函数进行配置。
[0081] (2)通信模块112
[0082] 通信模块112是一段可以进行信息传递和接收的程序,其功能是向已注入的钩子单元210传递Hook参数,以及接收已注入的钩子单元210传递过来的注入信息和Hook信息。
[0083] 如图3,通信模块112包括命名管道通信112A。
[0084] 命名管道通信112A包括依次进行交互的创建管道、等待连接和进行输入输出I/O操作;通信模块112创建管道之后,被设定为管道的服务器,等待连接;已注入的钩子单元210作为管道的客户端,已注入的钩子单元210在刚被注入时,就会通过管道请求连接通信模块112,成功连接后即可进行后续的输入输出I/O操作。
[0085] 工作机理:
[0086] 注入器单元110的完整功能需要注入模块111和通信模块112协同完成;
[0087] 注入模块111中,用户依次通过选择目标进程111A、选择注入的动态链接库111B、选择注入方式111C完成DLL文件的注入工作后,此DLL文件将成为已注入的钩子单元210;已注入的钩子单元210会向通信模块112反馈注入信息,帮助用户判断注入操作是否成功;如果注入操作成功,接着通过配置钩子函数111D配置Hook参数,此参数由通信模块112传递给已注入的钩子单元210,已注入的钩子单元210接收到Hook参数后,方可完成Hook功能;Hook功能完成后,已注入的钩子单元210会向通信模块112反馈Hook信息,帮助用户判断Hook功能是否正常完成以及得到相应的Hook结果。
[0088] 2)钩子单元120
[0089] 钩子单元120包括彼此独立的内联钩子模块121、导入地址表钩子模块122和向量化异常处理钩子模块123。
[0090] (1)内联钩子模块121
[0091] 内联钩子模块121是指实现了内联钩子完整过程的DLL文件,其功能是实现挂钩目标内存地址,以及反馈程序每次运行经过Hook点时所有通用寄存器的值至注入器中。
[0092] (2)导入地址表钩子模块122
[0093] 导入地址表钩子模块122是指实现了导入地址表钩子完整过程的DLL文件,其功能是实现在IAT表中替换目标函数的地址,以实现新Hook函数功能。
[0094] (3)向量化异常处理钩子模块123
[0095] 向量化异常处理钩子模块123是指实现了向量化异常处理钩子完整过程的DLL文件,其功能是实现注册异常处理函数,设置异常点的功能。
[0096] 工作机理:
[0097] 钩子单元120由三个彼此独立的、实现了相应Hook功能的DLL文件组成,这些DLL文件在选择注入的动态链接库111B中供用户选择,用户每一次可选择一种DLL文件进行注入;它们无法独立运行,需要注入模块111将其注入至目标进程子系统200,并由通信模块112向其传递参数后,才能实现完整功能。
[0098] 二、方法
[0099] 如图4,本方法包括下列步骤:
[0100] ①创建命名管道,等待连接-401
[0101] 通信模块112首先创建命名管道,并进入等待连接的状态,用于与后续步骤里的已注入的钩子单元210进行通信;
[0102] ②选择目标进程-402
[0103] 在选择目标进程111A中,以进程标识PID加上进程名的形式向用户列出当前进程,用户进行选择即可,这一步确定了要钩取的目标进程子系统200;
[0104] ③选择注入的动态链接库-403
[0105] 通过选择注入的动态链接库111B,用户自行指定待注入的动态链接库DLL文件;本系统的钩子单元120封装了三个动态链接库,每一个动态链接库都实现了不同且完整的Hook功能,用户可选择任意一种;
[0106] ④选择注入方式-404
[0107] 通过选择注入方式111C,用户在系统提供的三种注入方式里选择,实现将步骤③中用户所指定的动态链接库注入到步骤②中所确定的目标进程子系统200;
[0108] ⑤反馈注入信息-405
[0109] 注入完成后,已注入的钩子单元210与通信模块112进行通信,向通信模块112反馈注入信息;
[0110] ⑥配置Hook参数-406
[0111] 根据通信模块112里的注入反馈信息,若注入成功,在配置钩子函数111D里配置已注入的钩子单元210所需的Hook参数;
[0112] ⑦向已注入的钩子单元传递Hook参数-407
[0113] 通信模块112向已注入的钩子单元210传递配置钩子函数111D中的Hook参数;
[0114] ⑧完成Hook功能流程-408
[0115] 已注入的钩子单元210获取到Hook参数后,在目标进程子系统200实现完整的Hook功能流程;
[0116] ⑨反馈Hook信息-409
[0117] 已注入的钩子单元210向通信模块112反馈Hook信息。