CN102722679A - Windows操作系统中防止消息挂钩方法 - Google Patents
Windows操作系统中防止消息挂钩方法 Download PDFInfo
- Publication number
- CN102722679A CN102722679A CN2012101847533A CN201210184753A CN102722679A CN 102722679 A CN102722679 A CN 102722679A CN 2012101847533 A CN2012101847533 A CN 2012101847533A CN 201210184753 A CN201210184753 A CN 201210184753A CN 102722679 A CN102722679 A CN 102722679A
- Authority
- CN
- China
- Prior art keywords
- hook
- function
- address
- function address
- ssdtshadow
- 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
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开的一种Windows操作系统中防止消息挂钩方法。本发明通过对Windows操作环境下内核系统服务描述影子表进行修改,替换系统函数并对系统调用进行过滤,防止恶意软件通过消息挂钩操作对消息进行截获,提高了Windows操作环境下进程运行的安全性。
Description
技术领域
本发明属于计算机领域,更进一步涉及一种Windows操作系统中防止消息挂钩方法。本发明通过对计算机的Windows操作环境下内核系统服务描述影子表进行修改,替换系统函数并对系统调用进行过滤,防止恶意软件通过消息挂钩操作对消息进行截获,提高了Windows操作环境下进程运行的安全性。
背景技术
消息挂钩是一种Windows消息处理方法,应用程序可以通过挂钩函数以监视指定窗口的消息,并且所监视的窗口可以是由其他进程所创建的。当消息到达后,挂钩函数可以在目标窗口处理之前处理它。消息挂钩方法允许应用程序截获处理Window消息或系统特定事件。消息挂钩实际上是一个处理消息的程序段,通过SetWindowsHookEx系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,挂钩函数就先捕获该消息,即挂钩函数优先得到消息处理控制权。挂钩函数可以处理该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。通过消息挂钩,可以监视特定进程或系统的鼠标、键盘的操作,还能监视任意窗口的消息记录,从而对程序运行时的安全性造成威胁。
目前,已经有一些防止消息挂钩方法。例如,段钢著《加密与解密》(电子工业出版社,2008年第三版,第13章第4节)中公开一种通过修改可执行文件镜像导入地址IAT防止消息挂钩方法。在此方法中,通过找到可执行文件镜像的IAT表,在此表中修改SetWindowsHookEx函数的导出地址,使进程在执行消息挂钩操作时所调用的函数不是系统的消息挂钩地址,而是修改后的挂钩函数,达到了防止消息挂钩的目的。但是,该方法存在的不足是,修改IAT表需要修改可执行文件镜像,并且对每一个需要保护的进程都需要修改其对应的IAT表,导致在防挂钩过程中对IAT表的修改过程较为繁琐,并且该方法无法过滤系统级消息挂钩。
发明内容
本发明的目的在于克服上述已有技术的不足,提出一种Windows操作系统中防止消息挂钩方法。本发明可以防止恶意软件通过调用SetWindowsHookEx系统函数对进程或者系统进行挂钩从而截获Windows消息或系统特定事件。
本发明的具体步骤如下:
(1)设置初始信息:用户在计算机屏幕初始界面所列出进程中选择与被保护进程对应的进程号。
(2)读取挂钩函数地址
2a)从中央处理器CPU段寄存器所指向内存中根据偏移量读取系统服务描述符影子SSDTShadow表基地址;
2b)从系统服务描述符影子SSDTShadow表中根据偏移量定位挂钩函数地址;
2c)将挂钩函数地址作为原始挂钩函数地址保存。
(3)覆盖挂钩函数地址:使用过滤函数地址覆盖挂钩函数地址。
(4)截获挂钩操作:Windows系统调用过滤函数,在过滤函数中获得被挂钩进程的进程号。
(5)判断是否允许挂钩:将被挂钩进程号与步骤1a)中设置的保护进程号进行对比,如果相同,则禁止挂钩操作,否则,调用步骤2c)保存的原始挂钩函数。
本发明与现有技术相比具有以下优点:
第一,由于本发明采用了修改系统服务描述符影子SSDTShadow表的方式,在整个操作系统只需对SSDTShadow表修改一次,克服了现有技术需要对每个进程的IAT表进行修改的不足,使得本发明修改过程简单,降低了对进程的影响,提高了进程的稳定性。
第二,由于本发明采用了修改系统服务描述符影子SSDTShadow表的方式,使计算机中所有消息挂钩操作都将被拦截,克服了现有技术无法对系统级消息挂钩操作进行过滤的不足,使得本发明扩大了对消息挂钩操作过滤的范围。
附图说明
图1是本发明的流程图;
图2是本发明的防挂钩仿真图。
具体实施方式
下面结合附图1对本发明作进一步的描述:
步骤1,设置初始信息
在计算机屏幕初始界面上将系统中所有正在运行的进程根据进程名与进程号列出,用户通过进程名对应的进程号设置被保护进程。
步骤2,读取挂钩函数地址
中央处理器CPU段寄存器指向一个线程的TEB结构,在TEB结构中偏移量为0x204处保存这个线程系统服务描述符影子SSDTShadow表基地址,这张表记录了Win32k.sys驱动所有导出函数的地址,而我们要过滤的挂钩函数SetWindowsHookEx也是位于Win32k.sys驱动中的。
SetWindowsHookEx的地址位于系统服务描述符影子SSDTShadow表中偏移量为549处,由此可以得到原始函数地址。将挂钩函数地址作为原始挂钩函数地址保存,在允许挂钩的时候调用。
步骤3,覆盖挂钩函数地址
由于系统在调用Win32k.sys驱动中的函数时会在系统服务描述符影子SSDTShadow表中查询其地址,所以可以通过修改系统服务描述符影子SSDTShadow表过滤挂钩函数。创建一个过滤函数,这个替换函数应与挂钩函数SetWindowsHookEx声明相同。在系统服务描述符影子SSDTShadow表中使用过滤函数地址覆盖挂钩函数地址,这样系统将调用过滤函数而不是原始挂钩函数,从而达到过滤挂钩目的。
步骤4,截获挂钩操作
Windows系统调用过滤函数,在过滤函数中获得被挂钩进程的进程号。
步骤5,判断是否允许挂钩
将被挂钩进程号与步骤1中设置的保护进程号进行对比,如果相同,则禁止挂钩操作,否则,调用步骤2保存的原始挂钩函数进行挂钩,并将执行后的返回值返回系统。
下面结合附图2对本发明的效果作进一步描述:
附图2的仿真在Windows XP平台下进行,用来仿真本发明的防挂钩效果。本仿真在使用本发明前后分别调用SetWindowsHookEx函数,根据调用效果进行说明。附图2为信息输出记录,第一列表示信息序号,第二列表示输出时间,第三列为输出信息内容。
(1)首先启动被保护进程,进程的进程号PID为2100。
(2)此时并未启动防挂钩保护,在此条件下对被保护进程调用SetWindowsHookEx函数,调用结果为成功,如图2中序号0信息所示。
(3)将进程号PID为2100的进程设置为保护进程,并启动防挂钩保护,如图2中序号1信息所示。
(4)在此时对被保护进程调用SetWindowsHookEx函数,本发明检测到调用,判断进程号为2100后,禁止进行挂钩操作,如图2中序号2信息。
(5)挂钩函数调用结果为失败,如图2中序号3信息。
通过仿真可看出,本发明能够防止消息挂钩,从而实现了对进程的保护。
Claims (3)
1.一种Windows操作系统中防止消息挂钩方法,具体实现的步骤是:
(1)设置初始信息:用户在计算机屏幕初始界面所列出进程中选择与被保护进程对应的进程号;
(2)读取挂钩函数地址
2a)从中央处理器CPU段寄存器所指向内存中根据偏移量读取系统服务描述符影子SSDTShadow表基地址;
2b)从系统服务描述符影子SSDTShadow表中根据偏移量定位挂钩函数地址;
2c)将挂钩函数地址作为原始挂钩函数地址保存;
(3)覆盖挂钩函数地址:使用过滤函数地址覆盖挂钩函数地址;
(4)截获挂钩操作:Windows系统调用过滤函数,在过滤函数中获得被挂钩进程的进程号;
(5)判断是否允许挂钩:将被挂钩进程号与步骤1a)中设置的保护进程号进行对比,如果相同,则禁止挂钩操作,否则,调用步骤2c)保存的原始挂钩函数。
2.根据权利要求1所述的Windows操作系统中防止消息挂钩方法,其特征在于,步骤2a)中所述的系统服务描述符影子SSDTShadow表基地址在内存中的偏移量为0x204。
3.根据权利要求1所述的Windows操作系统中防止消息挂钩方法,其特征在于,步骤2b)中所述的挂钩函数地址在系统服务描述符影子SSDTShadow表中的偏移量为549。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012101847533A CN102722679A (zh) | 2012-06-06 | 2012-06-06 | Windows操作系统中防止消息挂钩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012101847533A CN102722679A (zh) | 2012-06-06 | 2012-06-06 | Windows操作系统中防止消息挂钩方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102722679A true CN102722679A (zh) | 2012-10-10 |
Family
ID=46948433
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012101847533A Pending CN102722679A (zh) | 2012-06-06 | 2012-06-06 | Windows操作系统中防止消息挂钩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102722679A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080022099A1 (en) * | 2006-07-18 | 2008-01-24 | Lenovo (Singapore) Pte. Ltd | Information transfer |
CN101582047A (zh) * | 2008-05-12 | 2009-11-18 | 龙海 | 一种Windows下系统服务Rootkits检测与恢复方法 |
CN102214287A (zh) * | 2011-06-09 | 2011-10-12 | 北京思创银联科技股份有限公司 | Windows系统注册表保护方法 |
-
2012
- 2012-06-06 CN CN2012101847533A patent/CN102722679A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080022099A1 (en) * | 2006-07-18 | 2008-01-24 | Lenovo (Singapore) Pte. Ltd | Information transfer |
CN101582047A (zh) * | 2008-05-12 | 2009-11-18 | 龙海 | 一种Windows下系统服务Rootkits检测与恢复方法 |
CN102214287A (zh) * | 2011-06-09 | 2011-10-12 | 北京思创银联科技股份有限公司 | Windows系统注册表保护方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107480527B (zh) | 勒索软件的防范方法及系统 | |
CA2856268C (en) | Methods of detection of software exploitation | |
US8561176B1 (en) | System, method and computer program product for monitoring and/or analyzing at least one aspect of an invocation of an interface | |
EP2902937B1 (en) | Method, apparatus, and system for triggering virtual machine introspection | |
CN103577757A (zh) | 病毒防御方法和装置 | |
CN101013461A (zh) | 基于程序行为分析的计算机防护方法 | |
CN103679032A (zh) | 防御恶意软件的方法和装置 | |
CN102508702B (zh) | 一种基于aop技术进行拦截来处理业务通用逻辑的方法 | |
CN104008337A (zh) | 一种基于Linux系统的主动防御方法及装置 | |
EP3455773A1 (en) | Inferential exploit attempt detection | |
CN105320884A (zh) | 虚拟机的安全防护方法及系统 | |
CN105426751A (zh) | 一种防止篡改系统时间的方法及装置 | |
CN105117649A (zh) | 一种用于虚拟机的防病毒方法与系统 | |
CN106203102A (zh) | 一种全网终端的病毒查杀方法及装置 | |
CN105956461A (zh) | 一种拦截驱动加载的方法及终端 | |
CN103353930B (zh) | 一种防范感染式病毒感染的方法和装置 | |
CN111062032A (zh) | 异常检测方法和系统及计算机可读存储介质 | |
CN108737373B (zh) | 一种针对大型网络设备隐匿技术的安全取证方法 | |
US8707433B1 (en) | Fake exception handler detection | |
CN113176926A (zh) | 一种基于虚拟机自省技术的api动态监控方法及系统 | |
CN112395593B (zh) | 指令执行序列的监测方法及装置、存储介质、计算机设备 | |
CN102722679A (zh) | Windows操作系统中防止消息挂钩方法 | |
CN106557693A (zh) | 一种恶意Hook行为检测方法及系统 | |
CN102722678A (zh) | 一种虚拟桌面可执行程序保护机制 | |
WO2019104894A1 (zh) | 电子装置、Web应用开发中异常处理方法及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C05 | Deemed withdrawal (patent law before 1993) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20121010 |