CN102799493A - 一种对具有自我保护的目标进程实现拦截的方法 - Google Patents

一种对具有自我保护的目标进程实现拦截的方法 Download PDF

Info

Publication number
CN102799493A
CN102799493A CN2012102062681A CN201210206268A CN102799493A CN 102799493 A CN102799493 A CN 102799493A CN 2012102062681 A CN2012102062681 A CN 2012102062681A CN 201210206268 A CN201210206268 A CN 201210206268A CN 102799493 A CN102799493 A CN 102799493A
Authority
CN
China
Prior art keywords
target process
code
system service
calling system
imitative
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
Application number
CN2012102062681A
Other languages
English (en)
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.)
SHADOWIN TECHNOLOGIES Inc
BEIJING SHADOWIN TECHNOLOGIES Co Ltd
Original Assignee
SHADOWIN TECHNOLOGIES Inc
BEIJING SHADOWIN TECHNOLOGIES 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 SHADOWIN TECHNOLOGIES Inc, BEIJING SHADOWIN TECHNOLOGIES Co Ltd filed Critical SHADOWIN TECHNOLOGIES Inc
Priority to CN2012102062681A priority Critical patent/CN102799493A/zh
Publication of CN102799493A publication Critical patent/CN102799493A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开一种对具有自我保护的目标进程实现拦截的方法,包括如下步骤:将目标进程调入内存中进行调试并查找其中所有的调用系统服务指令;对每一个确定的调用系统服务指令的指向代码,建立格式不同但同样执行原功能的映射代码;建立仿目标进程文件,并在调式过程中将目标进程的代码按原顺序拷贝到仿目标进程文件中,同时用映射代码替换对应指令的指向代码;对仿目标进程文件进行编译形成可执行的仿目标进程,当系统调用目标进程时用仿目标进程进行替换执行,此时对仿目标进程进行拦截也就实现了目标进程的拦截。本发明在目标进程和仿目标进程之间建立对应关系,利用仿目标进程替换目标进程的执行,从而实现能够应用API HOOK进行拦截的目的。

Description

一种对具有自我保护的目标进程实现拦截的方法
技术领域
本发明涉及计算机领域,具体涉及一种避开具有自我保护的进程屏蔽HOOK拦截的方法。 
背景技术
Windows操作系统是建立在事件驱动机制之上的,系统各部分之间也都是通过消息的相互传递而实现沟通的,但在通常情况下,应用程序只能处理来自进程内部的消息或是从其他进程发过来的消息,如果需要对在进程外传递的消息进行拦截处理就必须采取一种被称为HOOK(钩子)的技术。HOOK是Windows操作系统中非常重要的一种系统接口,用它可以轻松截获并处理在其他应用程序之间传递的消息,并由此完成一些普通应用程序难以实现的特殊功能。 
在Windows操作系统里面,API是指由操作系统提供功能的、由应用程序调用的函数。这些函数在Windows操作系统里面有上千个之多,分布于不同的DLL文件里面或者EXE文件里面。应用程序通过调用这些函数来获得一些功能的支持。 
API HOOK技术是一种用于改变API执行结果的技术,Microsoft自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等,可以通过API HOOK改变一个系统API的原有功能,基本的方法就是通过HOOK“接触”到需要修改的API函数入口点,然后改变它的地址并指向新的自定义的函数。API HOOK并不属于MSDN上介绍的13类HOOK中的任何一种,所以说,API HOOK并不是什么特别不同的HOOK,它也需要通过基本的HOOK提高自己的权限,跨越不同进程间访问的限制,达到修改API函数地址的目的。对于自身进程空间下使用到的API函数地址的修改,是不需要用到API HOOK技术就可以实现的。 
鉴于很多计算机病毒(如灰鸽子后门程序等)采用Win32 API HOOK技术来达到隐藏自身的目的,因此,许多进程为了达到自我保护的目的进行了对API HOOK的检测,一但检测到API HOOK的拦截就进行屏蔽,这样虽然能减少一些恶意的修改,但往往也屏蔽了一些并无恶意的拦截行为。 
发明内容
为解决现有技术中具有自我保护功能的进程对所有API HOOK的拦截都进行屏蔽的问题,本发明提供一种针对目标进程新建一个功能相同的仿目标进程,并在仿目标进程中改变目标进程中调用系统服务指令的指向地址来实现拦截目的的方法,具体方案如下: 
本发明针对自我保护程序识别目标进程中特定调用系统服务指令的指向代码,进而屏蔽对此指令进行拦截的现象,替换了目标进程中调用系统服务指令的指向代码中指向系统服务函数调用号或函数地址的偏移量的代码,从而避开了目标进程的自我保护程序的检查,进而实现了通过API HOOK拦截目标进程的目的。本发明在目标进程和仿目标进程之间建立对应关系,当系统调用目标进程时,本方法即将对目标进程的调用改为调用仿目标进程,由于仿目标进程所有功能与目标进程一致,仅是利用指向代码的不同来避开自我保护程序,因此最终的执行效果完全与目标进程一致,而且在对仿目标进程进行拦截时,由于指向代码的不同,不在自我保护程序的屏蔽范围内,因此避开了自我保护程序的屏蔽,能够实现API HOOK的拦截。本方法适合于WINDOWS系统下的所有操作。 
附图说明
图1本发明的步骤流程图。 
图2本发明的执行步骤流程图。 
图3本发明中对目标进程的代码匹配过程示意图。 
具体实施方式
下面结合附图和具体实施例进一步说明本发明实施例的技术方案。如图1所示,本发明包括如下步骤: 
101、将目标进程调入内存中进行调试并查找其中的调用系统服务指令; 
本方法在内存中建立一个虚拟环境,然后将目标进程调入内存中的虚拟环境中,对目标进程进行反汇编并得到反汇编代码。在反汇编代码中进行匹配,匹配的目的是查找出目标进程中所有调用系统服务指令,具体的匹配指令由用户自行定义,定义的标准是依据目标进程的自我保护程序进行屏蔽的指令,常规是call、jmp、jz、jnz这样的调用指令或者跳转指令,建立一张上述调用指令和跳转指令构成的匹配表,对目标进程中代码内的相同指令进行一一匹配,一旦匹配到相应指令,则在当前位置处设置断点,并对获得的当前指令指向的操作数目的指向地址进行分行分析,分析的结果包括两种情况,1、直接指向具体的调用系统服务函 数的调用号或系统服务函数地址的偏移量,对于这种情况,需要对此调用号和偏移量进行进一步确定,校验是否是属于目标进程自我保护程序要屏蔽的指令,如果是,则转到102的重建步骤,否则继续向下匹配。2、跳转到下一级程序(子程序),对于这种情况,则进入下一级程序继续进行匹配,如再次匹配到相应指令,则在此指令处重新设置断点并取消前一个断点,并对此指令的指向地址进行分析,同样此指向地址还存在上述两种情况,继续按同样的步骤执行,直至遍历完目标进程的所有代码。由于每级程序的末尾都设置有回转指令,本方法在遇到回转指令时即跳出当前程序而转到设置的断点处继续向下匹配。匹配出的指令及其指向代码暂存在虚拟环境的存储器中。 
102、对每一个确定的调用系统服务指令的指向代码,建立格式不同但同样执行原功能的映射代码; 
对于在101中匹配到的调用系统服务指令且其指向代码属于自我保护程序对API HOOK拦截进行屏蔽的目标,根据此指向代码的格式建立一个映射代码,映射代码的实际功能还是调用此指向代码原调用的函数号或偏移量,但是映射代码的编排方式与指向代码的编排方式不一样,这样在执行此指令时自我保护程序就识别不出此代码的形式,从而达到欺骗自我保护程序的目的,进而在API HOOK在拦截此指令时,自我保护程序就不会进行屏蔽。另外一种欺骗自我保护程序的方法是采用再次跳转的方式,即用跳转指令或调用指令替换指向代码的原内容,而跳转指令或调用指令再次跳转后的内容,即是原指向代码的内容,这种方法是将目标进程中的被屏蔽指令进行剥离,达到避免屏蔽的目的。 
103、建立仿目标进程文件,并在调式过程中将目标进程的代码按原顺序拷贝到仿目标进程文件中,同时用映射代码替换对应指令的指向代码; 
在对目标进程进行调试的同时建立一个仿目标进程文件,仿目标进程文件中没有内容,在对目标进程的代码进行匹配时,对匹配后不符合条件的目标进程代码按顺序完全拷贝到仿目标进程文件中,对匹配后符合条件的调用系统服务指令后的指向代码用相应的映射代码替换。新建立的仿目标进程文件代码内容与目标进程代码内容大部分一样,仅是对属于自我保护程序屏蔽的调用系统服务指令的指向代码用对应的映射代码进行了替换。 
104、对仿目标进程文件进行编译形成可执行的仿目标进程,当系统调用目标进程时用仿目标进程进行替换执行,此时对仿目标进程进行拦截也就实现了目标进程的拦截。 
目标进程文件的代码匹配完成后,仿目标进程文件的也同时建立完成,对仿目标进程文件进行编译得到可执行的仿目标进程。当系统调用目标进程时,本方法截获调用命令而代之仿目标进程执行,对于执行的仿目标进程再利用API HOOK进行拦截,即可绕过自我保护程序 的屏蔽,执行完毕后,再将结果返回给系统。从而达到避开具有自我保护的目标进程对拦截进行屏蔽的最终目的。 
以下根据附图2所示,对本发明的方法流程做出说明; 
调入目标进程10到内存中,对目标进程进行反汇编11,对得到的代码按顺序进行系统服务指令匹配12,当匹配到的指令时在指令处设置断点13,并对指令进行分析14,确定是否是目标进程的屏蔽指令,如不是则继续查找17,如果是,则找到指令对应的指向代码并分析指向代码15,根据指向代码的内容建立映射代码16,然后继续查找17,当找到下一个匹配指令时同样再建立对应的映射代码,直至所有的目标进程代码匹配完毕,然后结否18。其中在分析指向代码15时,如果指向代码的目的是跳转或调用到下级程序时,则进入下级程序30进行匹配31,当找到匹配指令时,设置断点32并取消前面的设置断点13,分析33匹配指令是否是目标进程屏蔽的指令,然后根据是或否继续向下分析,直至遍历完所有的子程序。在调入目标进程10的同时建立仿目标进程文件20,根据匹配11的匹配顺序,同时拷贝目标进程代码21到仿目标进程文件中,当遇到被目标进程屏蔽的指令时,用映射代码替换该指令的指向代码22,依据上述方式完成整个仿目标进程文件的建立,再对建立后的仿目标进程文件进行编译形成仿目标进程23,当系统调用目标进程时由仿目标进程进行替换执行,再用APIHOOK执行拦截26,即可实现对目标进程进行拦截的目的。 
如图3所示,本发明中对目标进程代码的内容分析包括下面的处理步骤:进行仿目标进程代码重建过程分为两种情况:首先将最上层的代码进行拷贝(即图3中所有的反汇编代码),根据获取的系统服务函数的调用号或者系统服务函数地址的偏移量的指令内容,在匹配到jmp、call、jz、jnz等指令时,对其操作数地址(指向代码)进行查看,如果不是指向函数功能号或者偏移量,则将操作数目标地址的代码拷贝到仿目标进程中(即图3中的操作数地址A),然后进入操作数目标地址递归进行进一步查看匹配代码(即图3中的操作数地址B),要对每一级下层都采用同样的查看方式,并将未涉及到函数功能号或者偏移量的操作数目标地址的代码直接进行拷贝,如果操作数地址是指向函数功能号或者偏移量(即图3中操作数地址A里的系统服务函数),只需根据函数功能号或者偏移量建立相应的映射代码,并用映射代码替换指向函数功能号或者偏移量的指向代码,直到将目标代码完全匹配结束,由此重建的仿目标进程的代码与目标进程的代码功能相同,形成一个与目标进程指向系统服务函数地址相同的仿目标进程。 
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照所述实施例对本发明进行了具体的说明,本领域的普通技术人员应当理解:其依然可以对所 述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。 

Claims (8)

1.一种对具有自我保护的目标进程实现拦截的方法,其特征在于,包括如下步骤:
步骤1、将目标进程调入内存中进行调试并查找其中所有的调用系统服务指令;
步骤2、对每一个确定的调用系统服务指令的指向代码,建立格式不同但同样执行原功能的映射代码;
步骤3、建立仿目标进程文件,并在调式过程中将目标进程的代码按原顺序拷贝到仿目标进程文件中,同时用映射代码替换对应指令的指向代码;
步骤4、对仿目标进程文件进行编译形成可执行的仿目标进程,当系统调用目标进程时用仿目标进程进行替换执行,此时对仿目标进程进行拦截也就实现了目标进程的拦截。
2.如权利要求1所述的方法,其特征在于,所述步骤1中的调试过程为:
步骤21、首先对目标进程在内存中的所有代码进行反汇编;
步骤22、然后根据要查找的调用系统服务指令的名称在反汇编后的代码中进行匹配,查找出所有符合条件的调用系统服务指令;
步骤23、获取调用系统服务指令所指向的调用系统服务函数的调用号或系统服务函数地址的偏移量的指向代码。
3.如权利要求2所述的方法,其特征在于,所述步骤22中,匹配采用遍历的方式相对所有的代码,具体步骤如下:
步骤31、当匹配到某个符合的调用系统服务指令时,在此处设置断点;
步骤32、对此调用系统服务指令的指向代码进行分析,进一步确定指向代码的内容是否属于目标进程实施了屏蔽的调用号或偏移量;
步骤321、如当前调用号或偏移量是屏蔽对象,则跳转到步骤2进行重建;
步骤322、如当前调用号或偏移量不是屏蔽对象,则继续向下匹配。
4.如权利要求3所述的方法,其特征在于,所述步骤32中,如当前调用系统服务指令跳转的目的是进入下一级程序,则进入下一级程序的代码继续进行匹配,直至遇到当前程序末尾的回转指令时才跳转回断点处继续向下匹配。
5.如权利要求2所述的方法,其特征在于,所述步骤22中,每匹配到一个新的调用系统服务指令时,则取消前面设置的断点,重新在当前位置设置新断点,即分析过程中只设置一个断点。
6.如权利要求1所述的方法,其特征在于,所述步骤3中仿目标进程文件的建立是与匹配过程同步进行的,建立过程如下:
步骤61、在匹配过程中,依次将目标进程中匹配过但不符合条件的代码拷贝到仿目标进程文件中;
步骤62、在拷贝过程中涉及到要重建的调用系统服务指令的指向代码时,则用相应重建的映射代码代替;
步骤63、当匹配完成时,对仿目标进程文件的代码拷贝也同时完成,对完成后的仿目标进程文件进行编译形成仿目标进程。
7.如权利要求1-6所述的任意一种方法,其特征在于,所述调用系统服务指令是指调用系统服务函数的调用号或系统服务函数地址的偏移量的跳转指令和调用指令。
8.如权利要求7所述的方法,其特征在于,所述重建的指向代码中不包括虽然是调用系统服务函数指令,但不属于目标进程的屏蔽目标的调用系统服务指令。
CN2012102062681A 2012-06-21 2012-06-21 一种对具有自我保护的目标进程实现拦截的方法 Pending CN102799493A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2012102062681A CN102799493A (zh) 2012-06-21 2012-06-21 一种对具有自我保护的目标进程实现拦截的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2012102062681A CN102799493A (zh) 2012-06-21 2012-06-21 一种对具有自我保护的目标进程实现拦截的方法

Publications (1)

Publication Number Publication Date
CN102799493A true CN102799493A (zh) 2012-11-28

Family

ID=47198607

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2012102062681A Pending CN102799493A (zh) 2012-06-21 2012-06-21 一种对具有自我保护的目标进程实现拦截的方法

Country Status (1)

Country Link
CN (1) CN102799493A (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104679495A (zh) * 2013-12-02 2015-06-03 贝壳网际(北京)安全技术有限公司 软件识别方法及装置
CN105022956A (zh) * 2015-08-14 2015-11-04 中国科学院计算技术研究所 一种抵御代码重用攻击的方法
CN105224864A (zh) * 2015-11-04 2016-01-06 中国科学院计算技术研究所 一种抵御代码重用攻击的工作进程随机化方法及系统
CN106293863A (zh) * 2016-07-26 2017-01-04 北京北森云计算股份有限公司 多语言云编译实现系统功能动态扩展替换的方法及系统
CN106469272A (zh) * 2016-08-31 2017-03-01 北京力鼎创软科技有限公司 一种windows进程保护方法和系统
CN112527677A (zh) * 2020-12-23 2021-03-19 北京深思数盾科技股份有限公司 应用程序的保护方法及电子设备
CN112596823A (zh) * 2020-12-23 2021-04-02 支付宝(杭州)信息技术有限公司 安全管控方法、装置及电子设备
CN114329446A (zh) * 2021-11-11 2022-04-12 奇安信科技集团股份有限公司 操作系统威胁检测方法、装置、电子设备及存储介质
CN114329446B (zh) * 2021-11-11 2024-11-05 奇安信科技集团股份有限公司 操作系统威胁检测方法、装置、电子设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2386100A1 (en) * 1999-11-14 2003-11-13 Clicknet Software Corporation Method and system for intercepting application program interface
CN1845120A (zh) * 2006-05-16 2006-10-11 北京启明星辰信息技术有限公司 一种恶意代码自动分析系统及方法
CN101266549A (zh) * 2008-03-19 2008-09-17 华为技术有限公司 插入代码的方法、装置及存储介质
US7703081B1 (en) * 2005-09-22 2010-04-20 Symantec Corporation Fast system call hooking on x86-64 bit windows XP platforms
CN102156834A (zh) * 2011-04-18 2011-08-17 北京思创银联科技股份有限公司 实现进程防杀的方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2386100A1 (en) * 1999-11-14 2003-11-13 Clicknet Software Corporation Method and system for intercepting application program interface
US7703081B1 (en) * 2005-09-22 2010-04-20 Symantec Corporation Fast system call hooking on x86-64 bit windows XP platforms
CN1845120A (zh) * 2006-05-16 2006-10-11 北京启明星辰信息技术有限公司 一种恶意代码自动分析系统及方法
CN101266549A (zh) * 2008-03-19 2008-09-17 华为技术有限公司 插入代码的方法、装置及存储介质
CN102156834A (zh) * 2011-04-18 2011-08-17 北京思创银联科技股份有限公司 实现进程防杀的方法

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104679495B (zh) * 2013-12-02 2018-04-27 北京猎豹移动科技有限公司 软件识别方法及装置
CN104679495A (zh) * 2013-12-02 2015-06-03 贝壳网际(北京)安全技术有限公司 软件识别方法及装置
CN105022956A (zh) * 2015-08-14 2015-11-04 中国科学院计算技术研究所 一种抵御代码重用攻击的方法
CN105224864A (zh) * 2015-11-04 2016-01-06 中国科学院计算技术研究所 一种抵御代码重用攻击的工作进程随机化方法及系统
CN105224864B (zh) * 2015-11-04 2018-05-04 中国科学院计算技术研究所 一种抵御代码重用攻击的工作进程随机化方法及系统
CN106293863A (zh) * 2016-07-26 2017-01-04 北京北森云计算股份有限公司 多语言云编译实现系统功能动态扩展替换的方法及系统
CN106293863B (zh) * 2016-07-26 2019-10-25 北京北森云计算股份有限公司 多语言云编译实现系统功能动态扩展替换的方法及系统
CN106469272A (zh) * 2016-08-31 2017-03-01 北京力鼎创软科技有限公司 一种windows进程保护方法和系统
CN112527677A (zh) * 2020-12-23 2021-03-19 北京深思数盾科技股份有限公司 应用程序的保护方法及电子设备
CN112596823A (zh) * 2020-12-23 2021-04-02 支付宝(杭州)信息技术有限公司 安全管控方法、装置及电子设备
CN112596823B (zh) * 2020-12-23 2023-03-21 支付宝(杭州)信息技术有限公司 安全管控方法、装置及电子设备
CN114329446A (zh) * 2021-11-11 2022-04-12 奇安信科技集团股份有限公司 操作系统威胁检测方法、装置、电子设备及存储介质
CN114329446B (zh) * 2021-11-11 2024-11-05 奇安信科技集团股份有限公司 操作系统威胁检测方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN102799493A (zh) 一种对具有自我保护的目标进程实现拦截的方法
Nanda et al. BIRD: Binary interpretation using runtime disassembly
Xue et al. Accurate and scalable cross-architecture cross-os binary code search with emulation
CN101984409B (zh) 一种用于Linux系统测试代码注入的方法
US7620941B1 (en) Mechanism for lossless user-level tracing on an architecture supporting PC-relative addressing
US20060130016A1 (en) Method of kernal-mode instruction interception and apparatus therefor
CN110245467B (zh) 基于Dex2C与LLVM的Android应用程序保护方法
US10831639B2 (en) Method and device for non-intrusively collecting function trace data
US20130019227A1 (en) Debugging Inline Functions in Optimized Code
CN103745755B (zh) 一种高效且高可用的空间内存错误检测方法
CN110750459A (zh) 基于白盒分析的测试用例自动生成和测试进程管理方法
Kim et al. Precise concolic unit testing of c programs using extended units and symbolic alarm filtering
Kim et al. Automatic and lightweight grammar generation for fuzz testing
Madeiral et al. Towards an automated approach for bug fix pattern detection
Křikava et al. Scala implicits are everywhere: A large-scale study of the use of scala implicits in the wild
Pinheiro et al. Mutating code annotations: An empirical evaluation on Java and C# programs
CN103514027A (zh) 一种增强软件保护易用性的方法
Chesser et al. Icicle: A re-designed emulator for grey-box firmware fuzzing
CN113836023B (zh) 一种基于体系结构交叉检查的编译器安全性测试方法
Seyster et al. Aspect-oriented instrumentation with GCC
Schwarz et al. When long jumps fall short: Control-flow tracking and misuse detection for non-local jumps in C
CN103106356B (zh) 一种在安全环境中生成代码提高软件保护强度的方法
Letian et al. PVDF: An automatic patch-based vulnerability description and fuzzing method
Pinheiro et al. Mutation operators for code annotations
Tchamgoue et al. EventHealer: Bypassing data races in event-driven programs

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: 20121128