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

文档序号:6371843阅读:167来源:国知局
专利名称:一种对具有自我保护的目标进程实现拦截的方法
技术领域
本发明涉及计算机领域,具体涉及一种避开具有自我保护的进程屏蔽HOOK拦截的方法。
背景技术
Windows操作系统是建立在事件驱动机制之上的,系统各部分之间也都是通过消息的相互传递而实现沟通的,但在通常情况下,应用程序只能处理来自进程内部的消息或是从其他进程发过来的消息,如果需要对在进程外传递的消息进行拦截处理就必须采取一种被称为HOOK(钩子)的技术。HOOK是Windows操作系统中非常重要的一种系统接口,用它可以轻松截获并处理在其他应用程序之间传递的消息,并由此完成一些普通 应用程序难以实现的特殊功能。在Windows操作系统里面,API是指由操作系统提供功能的、由应用程序调用的函数。这些函数在Windows操作系统里面有上千个之多,分布于不同的DLL文件里面或者EXE文件里面。应用程序通过调用这些函数来获得一些功能的支持。API HOOK技术是一种用于改变API执行结果的技术,Microsoft自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等,可以通过API H00K改变一个系统API的原有功能,基本的方法就是通过H00K “接触”到需要修改的API函数入口点,然后改变它的地址并指向新的自定义的函数。API H00K并不属于MSDN上介绍的13类H00K中的任何一种,所以说,API H00K并不是什么特别不同的H00K,它也需要通过基本的H00K提高自己的权限,跨越不同进程间访问的限制,达到修改API函数地址的目的。对于自身进程空间下使用到的API函数地址的修改,是不需要用到API H00K技术就可以实现的。鉴于很多计算机病毒(如灰鸽子后门程序等)采用Win32 API H00K技术来达到隐藏自身的目的,因此,许多进程为了达到自我保护的目的进行了对API H00K的检测,一但检测到API H00K的拦截就进行屏蔽,这样虽然能减少一些恶意的修改,但往往也屏蔽了一些并无恶意的拦截行为。

发明内容
为解决现有技术中具有自我保护功能的进程对所有API H00K的拦截都进行屏蔽的问题,本发明提供一种针对目标进程新建一个功能相同的仿目标进程,并在仿目标进程中改变目标进程中调用系统服务指令的指向地址来实现拦截目的的方法,具体方案如下本发明针对自我保护程序识别目标进程中特定调用系统服务指令的指向代码,进而屏蔽对此指令进行拦截的现象,替换了目标进程中调用系统服务指令的指向代码中指向系统服务函数调用号或函数地址的偏移量的代码,从而避开了目标进程的自我保护程序的检查,进而实现了通过API H00K拦截目标进程的目的。本发明在目标进程和仿目标进程之间建立对应关系,当系统调用目标进程时,本方法即将对目标进程的调用改为调用仿目标进程,由于仿目标进程所有功能与目标进程一致,仅是利用指向代码的不同来避开自我保护程序,因此最终的执行效果完全与目标进程一致,而且在对仿目标进程进行拦截时,由于指向代码的不同,不在自我保护程序的屏蔽范围内,因此避开了自我保护程序的屏蔽,能够实现API HOOK的拦截。本方法适合于WINDOWS系统下的所有操作。


图I本发明的步骤流程图。图2本发明的执行步骤流 程图。图3本发明中对目标进程的代码匹配过程示意图。
具体实施例方式下面结合附图和具体实施例进一步说明本发明实施例的技术方案。如图I所示,本发明包括如下步骤101、将目标进程调入内存中进行调试并查找其中的调用系统服务指令;本方法在内存中建立一个虚拟环境,然后将目标进程调入内存中的虚拟环境中,对目标进程进行反汇编并得到反汇编代码。在反汇编代码中进行匹配,匹配的目的是查找出目标进程中所有调用系统服务指令,具体的匹配指令由用户自行定义,定义的标准是依据目标进程的自我保护程序进行屏蔽的指令,常规是call、jmp、jz.jnz这样的调用指令或者跳转指令,建立一张上述调用指令和跳转指令构成的匹配表,对目标进程中代码内的相同指令进行一一匹配,一旦匹配到相应指令,则在当前位置处设置断点,并对获得的当前指令指向的操作数目的指向地址进行分行分析,分析的结果包括两种情况,I、直接指向具体的调用系统服务函数的调用号或系统服务函数地址的偏移量,对于这种情况,需要对此调用号和偏移量进行进一步确定,校验是否是属于目标进程自我保护程序要屏蔽的指令,如果是,则转到102的重建步骤,否则继续向下匹配。2、跳转到下一级程序(子程序),对于这种情况,则进入下一级程序继续进行匹配,如再次匹配到相应指令,则在此指令处重新设置断点并取消前一个断点,并对此指令的指向地址进行分析,同样此指向地址还存在上述两种情况,继续按同样的步骤执行,直至遍历完目标进程的所有代码。由于每级程序的末尾都设置有回转指令,本方法在遇到回转指令时即跳出当前程序而转到设置的断点处继续向下匹配。匹配出的指令及其指向代码暂存在虚拟环境的存储器中。102、对每一个确定的调用系统服务指令的指向代码,建立格式不同但同样执行原功能的映射代码;对于在101中匹配到的调用系统服务指令且其指向代码属于自我保护程序对APIHOOK拦截进行屏蔽的目标,根据此指向代码的格式建立一个映射代码,映射代码的实际功能还是调用此指向代码原调用的函数号或偏移量,但是映射代码的编排方式与指向代码的编排方式不一样,这样在执行此指令时自我保护程序就识别不出此代码的形式,从而达到欺骗自我保护程序的目的,进而在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,当系统调用目标进程时由仿目标进程进行替换执行,再用APIH00K执行拦截26,即可实现对目标进程进行拦截的目的。如图3所示,本发明中对目标进程代码的内容分析包括下面的处理步骤进行仿目标进程代码重建过程分为两种情况首先将最上层的代码进行拷贝(即图3中所有的反汇编代码),根据获取的系统服务函数的调用号或者系统服务函数地址的偏移量的指令内容,在匹配到jmp、call、jz、jnz等指令时,对其操作数地址(指向代码)进行查看,如果不是指向函数功能号或者偏移量,则将操作数目标地址的代码拷贝到仿目标进程中(即图3中的操作数地址A),然后进入操作数目标地址递归进行进一步查看匹配代码(即图3中的操作数地址B),要对每一级下层都采用同样的查看方式,并将未涉及到函数功能号或者偏移量的操作数目标地址的代码直接进行拷贝,如果操作数地址是指向函数功能号或者偏移量(即图3中操作数地址A里的系统服务函数),只需根据函数功能号或者偏移量建立相应的映射代码,并用映射代码替换指向函数功能号或者偏移量的指向代码,直到将目标代码完全匹配结束,由此重建的仿目标进程的代码与目标进程的代码功能相同,形成一个与目标进程指向系统服务函数地址相同的仿目标进程。
最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照所述实施例对本发明进行了具体的说明,本领域的普通技术人员应当理解其依然可以对所述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替 换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
权利要求
1.一种对具有自我保护的目标进程实现拦截的方法,其特征在于,包括如下步骤 步骤I、将目标进程调入内存中进行调试并查找其中所有的调用系统服务指令; 步骤2、对每一个确定的调用系统服务指令的指向代码,建立格式不同但同样执行原功能的映射代码; 步骤3、建立仿目标进程文件,并在调式过程中将目标进程的代码按原顺序拷贝到仿目标进程文件中,同时用映射代码替换对应指令的指向代码; 步骤4、对仿目标进程文件进行编译形成可执行的仿目标进程,当系统调用目标进程时用仿目标进程进行替换执行,此时对仿目标进程进行拦截也就实现了目标进程的拦截。
2.如权利要求I所述的方法,其特征在于,所述步骤I中的调试过程为 步骤21、首先对目标进程在内存中的所有代码进行反汇编; 步骤22、然后根据要查找的调用系统服务指令的名称在反汇编后的代码中进行匹配,查找出所有符合条件的调用系统服务指令; 步骤23、获取调用系统服务指令所指向的调用系统服务函数的调用号或系统服务函数地址的偏移量的指向代码。
3.如权利要求2所述的方法,其特征在于,所述步骤22中,匹配采用遍历的方式相对所有的代码,具体步骤如下 步骤31、当匹配到某个符合的调用系统服务指令时,在此处设置断点; 步骤32、对此调用系统服务指令的指向代码进行分析,进一步确定指向代码的内容是否属于目标进程实施了屏蔽的调用号或偏移量; 步骤321、如当前调用号或偏移量是屏蔽对象,则跳转到步骤2进行重建; 步骤322、如当前调用号或偏移量不是屏蔽对象,则继续向下匹配。
4.如权利要求3所述的方法,其特征在于,所述步骤32中,如当前调用系统服务指令跳转的目的是进入下一级程序,则进入下一级程序的代码继续进行匹配,直至遇到当前程序末尾的回转指令时才跳转回断点处继续向下匹配。
5.如权利要求2所述的方法,其特征在于,所述步骤22中,每匹配到一个新的调用系统服务指令时,则取消前面设置的断点,重新在当前位置设置新断点,即分析过程中只设置一个断点。
6.如权利要求I所述的方法,其特征在于,所述步骤3中仿目标进程文件的建立是与匹配过程同步进行的,建立过程如下 步骤61、在匹配过程中,依次将目标进程中匹配过但不符合条件的代码拷贝到仿目标进程文件中; 步骤62、在拷贝过程中涉及到要重建的调用系统服务指令的指向代码时,则用相应重建的映射代码代替; 步骤63、当匹配完成时,对仿目标进程文件的代码拷贝也同时完成,对完成后的仿目标进程文件进行编译形成仿目标进程。
7.如权利要求1-6所述的任意一种方法,其特征在于,所述调用系统服务指令是指调用系统服务函数的调用号或系统服务函数地址的偏移量的跳转指令和调用指令。
8.如权利要求7所述的方法,其特征在于,所述重建的指向代码中不包括虽然是调用系统服务函数指令,但不属于目标进程的屏蔽目标的调用系统服务指令。
全文摘要
本发明公开一种对具有自我保护的目标进程实现拦截的方法,包括如下步骤将目标进程调入内存中进行调试并查找其中所有的调用系统服务指令;对每一个确定的调用系统服务指令的指向代码,建立格式不同但同样执行原功能的映射代码;建立仿目标进程文件,并在调式过程中将目标进程的代码按原顺序拷贝到仿目标进程文件中,同时用映射代码替换对应指令的指向代码;对仿目标进程文件进行编译形成可执行的仿目标进程,当系统调用目标进程时用仿目标进程进行替换执行,此时对仿目标进程进行拦截也就实现了目标进程的拦截。本发明在目标进程和仿目标进程之间建立对应关系,利用仿目标进程替换目标进程的执行,从而实现能够应用API HOOK进行拦截的目的。
文档编号G06F11/00GK102799493SQ201210206268
公开日2012年11月28日 申请日期2012年6月21日 优先权日2012年6月21日
发明者李瑞平 申请人:北京伸得纬科技有限公司, 国际伸得纬有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1