首页> 中国专利> 拦截Win32应用程序界面的方法

拦截Win32应用程序界面的方法

摘要

一种拦截Win32应用程序界面的方法,其中包括,替代函数初始化步骤,为新定义函数分配存储器空间;搜寻步骤,用以取得待处理的原始函数中的JMP指令所指定的跳转地址;地址替代步骤,自搜寻步骤所取得的跳转地址开始,找出原始函数中的所有空操作指令并将其省略,再以指令JMP代替原始函数中的第一个函数指令,其中,用以替代该原始函数的新定义函数的地址则填入指令JMP所指定的跳转地址中;功能扩展步骤,读取存放新定义函数的注册库的内容。

著录项

  • 公开/公告号CN1368675A

    专利类型发明专利

  • 公开/公告日2002-09-11

    原文格式PDF

  • 申请/专利权人 英业达股份有限公司;

    申请/专利号CN01103347.9

  • 发明设计人 陈玄同;林光信;

    申请日2001-02-01

  • 分类号G06F9/30;

  • 代理机构11105 北京市柳沈律师事务所;

  • 代理人黄小临

  • 地址 台湾省台北市

  • 入库时间 2023-12-17 14:27:51

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-01-18

    未缴年费专利权终止 IPC(主分类):G06F9/30 授权公告日:20040519 终止日期:20180201 申请日:20010201

    专利权的终止

  • 2017-12-15

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F9/30 变更前: 变更后: 申请日:20010201

    专利权人的姓名或者名称、地址的变更

  • 2017-10-10

    专利权的转移 IPC(主分类):G06F9/30 登记生效日:20170918 变更前: 变更后: 申请日:20010201

    专利申请权、专利权的转移

  • 2017-10-10

    著录事项变更 IPC(主分类):G06F9/30 变更前: 变更后: 申请日:20010201

    著录事项变更

  • 2004-05-19

    授权

    授权

  • 2002-12-04

    实质审查的生效

    实质审查的生效

  • 2002-09-11

    公开

    公开

  • 2001-05-23

    实质审查请求的生效

    实质审查请求的生效

查看全部

说明书

本发明涉及一种拦截应用程序界面的方法,且特别涉及一种拦截WIN32应用程序界面的方法。

由於在呼叫每一个模块的时候,会先跳到此模块所在的地址,之后才进入到系统进入点(system entry)。因此公知技术在要替换视窗系统中的应用程序(AP,Application Program)的时候,一般是对每一个模块(module)中的每一个应用程序进入点加以修改,以达成以自己定义的函数取代系统原定函数的目的。然而,由于公知技术是针对一个一个的模块来进行应用程序进入点的修改程序,因此当同时存在多个模块需要进行应用程序进入点的修改时,就必须逐一地对每一个模块中的每一个应用程序进入点做修改。而这种修改每一个模块的方法,不但运行速度缓慢,且作用的范围小,存在更容易会出现遗漏的可能。

本发明的目的是提供一种通过直接取代Win32应用程序界面所指定的应用程序来达成修改所使用的应用程序的拦截Win32应用程序界面的方法。

为了实现本发明的目的,本发明提出了一种拦截Win32应用程序界面的方法,包括:一替代函数初始化步骤,以下列分步骤进行:(a)为一新定义函数分配存储器空间,并分析该新定义函数;(b)当该新定义函数为空,则结束,而当该新定义函数不为空,则在该新定义函数的起始处填写JMP指令及一汇编码做为JMP指令之一跳转地址,其中,该汇编码为该新定义函数所将取代之一原始函数的地址;(c)将该新定义函数除JMP指令及该汇编码外的部分清空;一搜寻步骤,以下列分步骤进行:(a)取得待处理的该原始函数;(b)依序读取该原始函数当前的一指令;(c)当该指令为空时,则结束以该搜寻步骤处理该原始函数的程序;(d)当该指令非为JMP时,则移至下一个指令并将一操作数下移一单位,再自步骤(b)往下进行;(e)当该指令为JMP时,则取该指令所跳转的该跳转地址做为待处理的该原始函数的一真实地址,并结束以该搜寻步骤处理该原始函数的程序;一地址替代步骤,以下列分步骤进行:(a)自该原始函数的该真实地址开始,在该原始函数的范围内依序对该原始函数中的一函数指令进行分析;(b)当该函数指令为空操作则省略该函数指令,而当该函数指令不为空操作,则继续分析下一个该函数指令;(c)以指令JMP代替该原始函数中的第一个该函数指令,并将用以替代该原始函数的该新定义函数的地址填入指令JMP的该跳转地址中;以及一功能扩展步骤,以下列分步骤进行:(a)读取存放该新定义函数之一注册库的内容;(b)依序读取该注册库内的任一该新定义函数,以使该新定义函数可在由该地址替代步骤所得到的该跳转地址上运作;(c)当该注册库的内容完全读取完毕时则结束执行该功能扩展步骤。

本发明还提出了另一种拦截Win32应用程序界面的方法,包括:设计一替代函数初始化步骤,该替代函数初始化步骤为一新定义函数分配存储器空间,并分析该新定义函数;设计一搜寻步骤,该搜寻步骤用以取得待处理的一原始函数中的JMP指令所指定的一跳转地址;设计一地址替代步骤,该地址替代步骤自该搜寻步骤所取得的该跳转地址开始,找出该原始函数中的所有空操作指令以将空操作指令省略,再以指令JMP代替该原始函数中的第一个函数指令,并将用以替代该原始函数的该新定义函数的地址填入指令JMP所指定的该跳转地址中;以及设计一功能扩展步骤,该功能扩展步骤读取存放该新定义函数的一注册库的内容,并依序读取该注册库内的任一该新定义函数。

本发明提出的一种拦截Win32应用程序界面的方法设计了一个替代函数初始化模块,一个搜寻模块,一个地址替代模块以及一个功能扩展模块,以完成拦截Win32应用程序界面及改变所使用的应用程序等目的。其中,替代函数初始化模块为一个新定义函数分配存储器空间,并分析此新定义函数。搜寻模块则用以取得待处理的原始函数中的JMP指令所指定的跳转地址。而地址替代模块则自搜寻模块所取得的跳转地址开始,找出原始函数中的所有空操作指令以将空操作指令省略,再以指令JMP代替原始函数中的第一个函数指令,并将用以替代此原始函数的新定义函数的地址填入指令JMP所指定的跳转地址中。最后,功能扩展模块读取存放新定义函数的注册库的内容,并依序读取此注册库内的任一个新定义函数。

其中,替代函数初始化模块分析新定义函数系使用下列方法。当此新定义函数为空时则结束。而当此新定义函数不为空时,则在此新定义函数的起始处填写JMP指令以及一个汇编码以做为JMP指令的跳转地址。此汇编码则为此新定义函数所将取代的原始函数的地址。最後再将此新定义函数除此JMP指令及汇编码之外的部分清空并结束以此替代函数初始化模块分析新定义函数的操作。

此外,在搜寻模块中取得跳转地址的方法则首先取得待处理的原始函数,之后则依序读取此原始函数当前的指令。当此指令为空时,则结束以搜寻模块处理原始函数的程序,而当此指令不为空时,再分析此指令是否为JMP指令。当此指令非为JMP时,则以前述的方法来检查下一个指令。而当此指令为JMP时,则取此指令所跳转的跳转地址做为待处理的原始函数的真实地址,并结束以该搜寻模块处理该原始函数的程序。

综上所述,本发明通过直接取代Win32应用程序界面所指定的应用程序来达成修改所使用的应用程序的目的。如此不但运作速度加快,也免去了必须对每一模块逐一进行修改的麻烦,因此也不会有遗漏产生。

为让本发明的上述和其他目的、特征、和优点能更明显易懂,下文特举优选实施例,并结合附图,作详细说明如下:

附图的简单说明

图1显示的是根据本发明之一优选实施例的系统方块图;

图2显示的是根据本发明的替代函数初始化模块之一优选实施例的执行步骤流程图;

图3显示的是根据本发明的搜寻模块之一优选实施例的执行步骤流程图;

图4显示的是根据本发明的地址替代模块之一优选实施例的执行步骤流程图;以及

图5显示的是根据本发明的功能扩展模块之一优选实施例的执行步骤流程图。

重要元件标号

100:本发明的系统方块图

105、110、115:子功能

200:替代函数初始化模块

205-225:替代函数初始化模块的优选实施例的执行步骤

300:搜寻模块

305-335:搜寻模块的优选实施例的执行步骤

400:地址替代模块

405-430:地址替代模块的优选实施例的执行步骤

500:功能扩展模块

505-525:功能扩展模块的优选实施例的执行步骤

优选实施例

请参照图1,图1显示的是依照本发明一优选实施例的一种系统方块图。在本发明的系统方块图100中,包括分别将在以后详细说明的替代函数初始化模块200、搜寻模块300、地址替代模块400、功能扩展模块500、以及通过执行这些模块而替换所得的子功能105、110和120。

请参照第2图,图2显示的是根据本发明的替代函数初始化模块200之一优选实施例的执行步骤流程图。在替代函数初始化模块200中,首先为自定义的新函数分配存储器空间(步骤205)。之后则检查此新函数是否为空函数(步骤210)。当此新函数为空函数的时候,就结束此替代函数初始化模块200的执行。而当此新函数不为空的时候,步骤215就在此新函数的开始处填写JMP(跳转)指令,并在步骤220中将此新函数所将要替代的原函述的地址做为汇编码以填入指令JMP后,以使此汇编码成为此JMP指令所指定的跳转地址。

接下来请参照第3图,图3显示的是根据本发明的搜寻模块300之一优选实施例的执行步骤流程图。在搜寻模块300中,首先在步骤305中取得待处理的原始函数(Win32应用程序界面(API,Application ProgramInterface)中的标准函数)。之后,则在步骤310中取得此原始函数(标准函数)中当前的指令。在经过步骤315判断此指令是否为JMP指令之后,若此指令为JMP指令,则取此JMP指令的的操作数(Operation number),亦即前述的跳转地址以做为此待处理的原始函数的真实地址(步骤320)。而当此指令非为JMP指令的时候,则下移一个指令(步骤325)且将操作数下移一个单位(步骤330),之后再判断此指令是否为空(步骤335)。当此指令为空时,表示此时已经到达此原始函数的末端,因此就结束此搜寻模块300的运作。而当此指令不为空时,则回到步骤310以进行此指令的后续检查。

接下来请参照第4图,图4显示的是根据本发明的地址替代模块400之一优选实施例的执行步骤流程图。在本实施例中,替代模块400首先从通过搜寻模块300所找出的原始函数的真实地址开始,对此原始函数进行分析(步骤405)。首先检查此时所得到的地址是否属于此原始函数(步骤410)。当此地址并非在此原始函数的范围内时,则查找下一个地址(步骤430),并回到步骤410以进行此地址的检查。而当此地址位于此原始函数的范围内时,就检查此地址中的指令是否为空操作(步骤415)。当此指令为空操作时,则省略此空操作并进行步骤430以查找下一个地址。而当此指令不为空操作时,则用指令JMP来代替原始函数的第一个指令420,并将新函数的地址填入此指令JMP的跳转地址中(步骤425)。其中,省略空操作后所得到的地址则称为标准地址。

接着请参照第5图,图5显示了根据本发明的功能扩展模块之一优选实施例的执行步骤流程图。在本实施例中,首先读取用以存放新定义函数的注册库的内容(步骤505)。之后,判断此注册库是否为空(步骤510)。当此注册库已经读完,也就是此注册库没有后续的数据时,就结束此功能扩展模块的执行。而当此注册库还没读取完毕时,就从注册库中读入新定义的函数,也就是功能扩展时所需的组件(步骤515)。之后,再将此读出的新定义函数置放在由前述的地址替代模块所得到的跳转地址上(步骤520),以使读出的新定义函数可以代替原有的函数来执行。之后,再在步骤525中读取注册库中的下一个新定义函数,并自步骤510继续向下执行,直到注册库中的内容完全读取完毕为止。

综上所述,现将本发明的优点略述如下。本发明不但运作速度加快,也免去了必须对每一模块逐一进行修改的麻烦,因此较不会有遗漏产生。

虽然已以优选实施例的方式对本发明进行了描述,但这不是用来限定本发明的。本领域普通技术人员应该明白,可对其作各种更动与修改而不脱离本发明的精神和范围,因此本发明的保护范围应以所附权利要求书所限定的范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号