一种改进的钩取技术的方法及装置与流程

文档序号:11285748阅读:157来源:国知局
一种改进的钩取技术的方法及装置与流程

本发明涉及钩取函数领域,特别涉及一种改进的钩取技术的方法及装置。



背景技术:

现有的钩取技术是通过修改系统程序的入口地址处的五个字节的内容,从而跳转至注入程序的入口地址,从而达到钩取的目的。在修改系统程序的入口地址处的五个字节的内容前,需要保存系统函数的入口地址的前五个字节的内容。当运行完成钩取函数之后,需要跳转至系统程序的入口地址,此时就需要利用保存过的系统函数的入口地址处的前五个字节的内容来恢复原系统函数。但是在多线程环境中,过于频繁的对系统程序的入口地址的前五个字节的内容进行修改操作和恢复操作,有可能会造成读写异常的情况发生,导致系统进程发生异常。如何解决上述问题,就成为了业界亟待解决的课题。



技术实现要素:

本发明提供一种改进的钩取技术的方法及装置,用以在使用钩取技术时,避免发生读写异常的情况。

根据本发明实施例的第一方面,提供一种改进的钩取技术的方法,包括:

当监测到系统程序被钩取时,修改所述系统程序以入口地址为起始的连续的两个字节的内容;

根据修改后的所述系统程序以入口地址为起始的连续的两个字节的内容,跳转至注入程序的入口地址;

在执行完所述注入程序后,计算出所述系统程序的第一入口地址;

以所述第一入口地址为起始地址,运行所述系统程序。

本在一个实施例中,所述当监测到系统程序被钩取时,修改所述系统程序以入口地址为起始的连续的两个字节的内容,包括:

当监测到系统程序被钩取时,修改所述系统程序以入口地址为起始的连续的两个字节的内容为短跳转指令,所述短跳转指令包括一个字节的短跳转关键字和一个字节的短跳转地址;

所述短跳转地址指向所述系统程序入口地址之前的第五个字节的地址。

在一个实施例中,所述根据修改后的所述系统程序以入口地址为起始的连续的两个字节的内容,跳转至注入程序的入口地址,包括:

根据所述短跳转指令,跳转至所述系统程序入口地址之前的第五个字节的地址;

修改所述系统程序入口地址之前连续的五个字节的内容为跳转指令,所述跳转指令包括一个字节的跳转关键字和四个字节的跳转地址;

根据所述跳转指令,跳转至所述注入程序的入口地址。

在一个实施例中,所述在执行完所述注入程序后,计算出所述系统程序的第一入口地址,包括:

在执行完所述注入程序后,将所述系统程序的所述入口地址加上两个字节,得到新的地址;

确认所述新的地址为所述系统程序的第一入口地址。

在一个实施例中,所述以所述第一入口地址为起始地址,运行所述系统程序,包括:

跳转至所述系统程序的第一入口地址;

以所述第一入口地址为起始地址,运行所述系统程序。

根据本发明实施例的第二方面,提供一种改进的钩取技术的装置,包括:

修改模块,用于当监测到系统程序被钩取时,修改所述系统程序以入口地址为起始的连续的两个字节的内容;

跳转模块,用于根据修改后的所述系统程序以入口地址为起始的连续的两个字节的内容,跳转至注入程序的入口地址;

计算模块,用于在执行完所述注入程序后,计算出所述系统程序的第一入口地址;

运行模块,用于以所述第一入口地址为起始地址,运行所述系统程序。

在一个实施例中,所述修改模块,包括:

第一修改子模块,用于当监测到系统程序被钩取时,修改所述系统程序以入口地址为起始的连续的两个字节的内容为短跳转指令,所述短跳转指令包括一个字节的短跳转关键字和一个字节的短跳转地址;

指向子模块,用于所述短跳转地址指向所述系统程序入口地址之前的第五个字节的地址。

在一个实施例中,所述跳转模块,包括:

第一跳转子模块,用于根据所述短跳转指令,跳转至所述系统程序入口地址之前的第五个字节的地址;

第二修改子模块,用于修改所述系统程序入口地址之前连续的五个字节的内容为跳转指令,所述跳转指令包括一个字节的跳转关键字和四个字节的跳转地址;

第二跳转子模块,用于根据所述跳转指令,跳转至所述注入程序的入口地址。

在一个实施例中,所述计算模块,包括:

相加子模块,用于在执行完所述注入程序后,将所述系统程序的所述入口地址加上两个字节,得到新的地址;

确认子模块,用于确认所述新的地址为所述系统程序的第一入口地址。

在一个实施例中,所述运行模块,包括:

第三跳转子模块,用于跳转至所述系统程序的第一入口地址;

运行子模块,用于以所述第一入口地址为起始地址,运行所述系统程序。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为本发明一示例性实施例示出的一种改进的钩取技术的方法的流程图;

图2为本发明一示例性实施例示出的一种改进的钩取技术的方法的步骤s11的流程图;

图3为本发明一示例性实施例示出的一种改进的钩取技术的方法的步骤s12的流程图;

图4为本发明一示例性实施例示出的一种改进的钩取技术的方法的步骤s13的流程图;

图5为本发明一示例性实施例示出的一种改进的钩取技术的方法的步骤s14流程图;

图6a为本发明一示例性实施例示出的一种改进的钩取技术的方法的示意图;

图6b为本发明另一示例性实施例示出的一种改进的钩取技术的方法的示意图;

图7为本发明一示例性实施例示出的一种改进的钩取技术的装置的框图;

图8为本发明一示例性实施例示出的一种改进的钩取技术的装置的修改模块71的框图;

图9为本发明一示例性实施例示出的一种改进的钩取技术的装置的跳转模块72的框图;

图10为本发明一示例性实施例示出的一种改进的钩取技术的装置的计算模块73的框图;

图11为本发明一示例性实施例示出的一种改进的钩取技术的装置的修改模块74的框图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

现有的钩取技术是通过修改系统程序的入口地址处的五个字节的内容,跳转至注入程序的入口地址,从而达到钩取的目的。在修改系统程序的入口地址处的五个字节的内容前,需要保存系统函数的入口地址的前五个字节的内容。当运行完成钩取函数之后,需要跳转至系统程序的入口地址,此时就需要利用保存过的系统函数的入口地址处的前五个字节的内容来恢复原系统函数。但是在多线程环境中,过于频繁的对系统程序的入口地址的前五个字节的内容进行修改操作和恢复操作,有可能会造成读写异常的情况发生,导致系统进程发生异常。

图1是根据一示例性实施例示出的一种改进的钩取技术的方法流程图,如图1所示,该一种改进的钩取技术的方法,包括以下步骤s11-s14:

在步骤s11中,当监测到系统程序被钩取时,修改所述系统程序以入口地址为起始的连续的两个字节的内容;

当监测到系统程序被钩取时,修改该系统程序以入口地址为起始的连续的两个字节的内容为短跳转指令,该短跳转指令包括一个字节的短跳转关键字和一个字节的短跳转地址;该短跳转地址指向该系统程序入口地址之前的第五个字节的地址。

在步骤s12中,根据修改后的所述系统程序以入口地址为起始的连续的两个字节的内容,跳转至注入程序的入口地址;

根据该短跳转指令,跳转至该系统程序入口地址之前的第五个字节的地址;修改该系统程序入口地址之前连续的五个字节的内容为跳转指令,该跳转指令包括一个字节的跳转关键字和四个字节的跳转地址;根据该跳转指令,跳转至该注入程序的入口地址。

在步骤s13中,在执行完所述注入程序后,计算出所述系统程序的第一入口地址;

在执行完该注入程序后,将该系统程序的该入口地址加上两个字节,得到新的地址;确认该新的地址为该系统程序的第一入口地址。

在步骤s14中,以所述第一入口地址为起始地址,运行所述系统程序。

跳转至该系统程序的第一入口地址;以该第一入口地址为起始地址,运行该系统程序。通过上述操作即可在多线程环境中有效的避免对系统程序频繁的进行钩取操作和去钩取操作而带来的读写异常的情况,提高了钩取技术的鲁棒性和安全性。

在一个实施例中,如图2所示,步骤s11包括如下步骤s21-s22:

在步骤s21中,当监测到系统程序被钩取时,修改所述系统程序以入口地址为起始的连续的两个字节的内容为短跳转指令,所述短跳转指令包括一个字节的短跳转关键字和一个字节的短跳转地址;

不妨假设系统程序的入口地址为x,那么对地址为x和x+1两个字节中的内容进行修改。使用本实施例中的技术方案,在进行修改前,无需保存系统程序的入口地址为起始的连续的两个字节的内容。可以省略现有的钩取技术中,保存系统函数前两个字节的内容的操作步骤,还可以节省出为保存系统程序前两个字节的内容所使用的存储空间。

在步骤s22中,所述短跳转地址指向所述系统程序入口地址之前的第五个字节的地址。

不妨假设系统程序的入口地址为x,那么该短跳转地址指向的地址为x-5。

在一个实施例中,如图3所示,步骤s12包括如下步骤s31-s33:

在步骤s31中,根据所述短跳转指令,跳转至所述系统程序入口地址之前的第五个字节的地址;

不妨假设系统程序的入口地址为x,那么根据该短跳转指令,跳转至x-5处的地址,系统准备运行地址为x-5处的程序。

在步骤s32中,修改所述系统程序入口地址之前连续的五个字节的内容为跳转指令,所述跳转指令包括一个字节的跳转关键字和四个字节的跳转地址;

修改地址为x-5处的内容为跳转指令,该挑战指令中的跳转地址为注入函数的入口地址,不妨假设该入口地址为y。

在步骤s33中,根据所述跳转指令,跳转至所述注入程序的入口地址。

根据该跳转指令,跳转至该注入程序的入口地址y,系统准备运行地址为y处的程序。

在一个实施例中,如图4所示,步骤s13包括如下步骤s41-s42:

在步骤s41中,在执行完所述注入程序后,将所述系统程序的所述入口地址加上两个字节,得到新的地址;

不妨假设系统程序的入口地址为x,那么新的地址为x+2。

在步骤s42中,确认所述新的地址为所述系统程序的第一入口地址。

确认新的地址x+2为系统程序的第一入口地址。在现有的钩取技术中,需要利用保存的未修改前的系统函数前2个字节的内容,来恢复修改后的系统程序。而且,现有技术中,跳回的地址也是原系统程序的入口地址。使用本实施例中的技术方案,可以节省现有钩取技术中的恢复原系统程序的入口地址的操作。本发明可在多线程环境中有效的避免对系统程序频繁的进行钩取操作和去钩取操作而带来的读写异常的情况,提高了钩取技术的鲁棒性和安全性。

在一个实施例中,如图5所示,步骤s14包括如下步骤s51-s52:

在步骤s51中,跳转至所述系统程序的第一入口地址;

在步骤s52中,以所述第一入口地址为起始地址,运行所述系统程序。

跳转至第一入口地址x+2处,以第一入口地址x+2处为起始地址,系统运行该处的系统程序。

在一个实施例中,如图6a和图6b所示,在一个实施例,系统函数的入口地址为77d507ea。地址为77d507ea处的指令movedi,edi作用是将edi寄存器中的数据送至edi,该条指令占用2个字节的内容。地址为77d507e5到地址为77d507e9处的5行代码皆为nop,nop指令的作用是空循环一个机器指令的时间,每一条nop指令占用1个字节的空间。

修改地址为77d507ea处的movedi,edi指令为jmpshortuser32.77d507e5,该指令的作用为短跳转至地址为77d507e5处,系统继续执行地址为77d507e5处的代码。地址为77d507e5处的代码为jmprpcrt4.77e507ea,该条指令jmprpcrt4.77e507ea的作用为跳转至注入函数的入口地址。

在运行完注入函数后,跳转至地址77d507ec处,77d507ec=77d507ea+2,即跳转至系统函数的入口地址77d507ea加上2个字节出的地址77d507ec,以地址77d507ec处为起始地址,运行该系统函数。

在一个实施例中,图7是根据一示例性实施例示出的一种改进的钩取技术的装置框图。如图7示,该装置包括修改模块71、跳转模块72、计算模块73和运行模块74。

该修改模块71,用于当监测到系统程序被钩取时,修改所述系统程序以入口地址为起始的连续的两个字节的内容;

该跳转模块72,用于根据修改后的所述系统程序以入口地址为起始的连续的两个字节的内容,跳转至注入程序的入口地址;

该计算模块73,用于在执行完所述注入程序后,计算出所述系统程序的第一入口地址;

该运行模块74,用于以所述第一入口地址为起始地址,运行所述系统程序。

如图8所示,该修改模块71包括第一修改子模块81和指向子模块82。

该第一修改子模块81,用于当监测到系统程序被钩取时,修改所述系统程序以入口地址为起始的连续的两个字节的内容为短跳转指令,所述短跳转指令包括一个字节的短跳转关键字和一个字节的短跳转地址;

该指向子模块82,用于所述短跳转地址指向所述系统程序入口地址之前的第五个字节的地址。

如图9所示,该跳转模块72包括第一跳转子模块91、第二修改子模块92和第二跳转子模块93。

该第一跳转子模块91,用于根据所述短跳转指令,跳转至所述系统程序入口地址之前的第五个字节的地址;

该第二修改子模块92,用于修改所述系统程序入口地址之前连续的五个字节的内容为跳转指令,所述跳转指令包括一个字节的跳转关键字和四个字节的跳转地址;

该第二跳转子模块93,用于根据所述跳转指令,跳转至所述注入程序的入口地址。

如图10所示,该计算模块73包括相加子模块101和确认子模块102:

该相加子模块101,用于在执行完所述注入程序后,将所述系统程序的所述入口地址加上两个字节,得到新的地址;

该确认子模块102,用于确认所述新的地址为所述系统程序的第一入口地址。

如图11所示,该运行模块74包括第三跳转子模块111和运行子模块112。

该第三跳转子模块111,用于跳转至所述系统程序的第一入口地址;

该运行子模块112,用于以所述第一入口地址为起始地址,运行所述系统程序。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结 合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1