CN109933387A - 软件钩子设置方法及装置 - Google Patents
软件钩子设置方法及装置 Download PDFInfo
- Publication number
- CN109933387A CN109933387A CN201711371113.2A CN201711371113A CN109933387A CN 109933387 A CN109933387 A CN 109933387A CN 201711371113 A CN201711371113 A CN 201711371113A CN 109933387 A CN109933387 A CN 109933387A
- Authority
- CN
- China
- Prior art keywords
- hook
- api1
- target api
- entry address
- api2
- 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.)
- Withdrawn
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开软件钩子设置方法及装置,其中方法包括如下步骤:在目标API被触发时,创建钩子API2;替换API2的入口地址为原目标API入口地址;替换原目标API入口地址为钩子API1的入口地址;执行钩子API1;随着目标API的释放,钩子API1自动释放。本方案通过目标API的入口地址的替换,使得目标API被触发时,都能运行预置处理程序钩子API1,避免了在钩子还原过程中直接运行目标API的问题,即避免了在还原的时候出现缝隙的问题。
Description
技术领域
本发明涉及软件技术领域,尤其涉及软件钩子设置方法及装置。
背景技术
钩子(Hook),技术是一种用于改变API(ApplicationProgrammingInterface,应用程序编程接口)执行结果的技术,Microsoft自身也在Windows操作系统里面使用了这个技术。其原理为:用自行构建的API入口地址替换目标API的入口地址,以达到应用程序在执行系统API功能前,预先处理自行构建的处理事件,然后还原系统API的入口地址,以实现返回用户真正调用API的功能。
现有的API运行原流程如下:应用程序触发——调用原API执行既定功能。而普通钩子流程如下:应用程序触发——调用原API但入口地址是API1的,即调用API1入口地址执行预置的程序,——预置程序执行后——还原原API的入口地址,调用原API既定功能。
现有的在钩子API进行处理的过程中,会在新的API和原API入口地址之间不断交替的过程,这会产生无数的时间缝隙。可能发生被钩子挂钩的程序直接执行而绕过钩子API1的问题,即在钩子API1的挂钩过程中,会出现一个缝隙,造成无法勾住该目标API的问题。
发明内容
为此,需要提供软件钩子设置方法及装置,解决现有钩子处理过程中存在缝隙的问题。
为实现上述目的,发明人提供了软件钩子设置方法,包括如下步骤:
在目标API被触发时,创建钩子API2;
替换API2的入口地址为原目标API入口地址;
替换原目标API入口地址为钩子API1的入口地址;
执行钩子API1;
随着目标API的释放,钩子API1自动释放。
进一步地,所述钩子API1为预置钩子程序,钩子API2为空白程序。
以及本发明还提供无缝钩子设置装置,包括如下模块:
临时钩子创建模块:在目标API被触发时,创建钩子API2;
第一地址替换模块:替换API2的入口地址为原目标API入口地址;
第二地址替换模块:替换原目标API入口地址为钩子API1的入口地址;
钩子API1执行模块:执行钩子API1;
被钩地址还原模块:随着目标API的释放,钩子API1自动释放。
进一步地,所述钩子API1为预置钩子程序,钩子API2为空白程序。
区别于现有技术,上述技术方案通过目标API的入口地址的替换,使得目标API被触发时,都能运行预置处理程序钩子API1,避免了在钩子还原过程中直接运行目标API的问题,即避免了在还原的时候出现缝隙的问题。
附图说明
图1为本发明方法一实施例的流程图;
图2为本发明装置一实施例的结构图。
具体实施方式
为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
请参阅图1到图2,本实施例提供软件钩子设置方法,包括如下步骤:首先在步骤S101在目标API被触发时,创建钩子API2。目标API就是现有的预置处理程序钩子API1监控的程序,目标API执行前,钩子API1需要先被执行。钩子API2可以看作是一个辅助的钩子API,用来存储目标API的地址。而后在步骤S102替换API2的入口地址为原目标API入口地址以及在步骤S103替换原目标API入口地址为钩子API1的入口地址。这样,只要触发目标API,钩子API1就会被触发并执行。即步骤S104执行钩子API1。钩子API1执行完毕后,钩子API1就会调用并触发钩子API2,而钩子API2存储的是目标API的入口地址,则目标API就会执行。而后在步骤S105随着目标API的释放,钩子API1自动释放。即本发明的流程如下:应用程序调用原目标API但被替换成的API1入口地址,即执行API1预置的程序,然后在API1执行完毕后,自行调用API2。但AP2的地址被替换成原API入口地址,即执行既定的功能。这样形成了目标API执行——钩子API1执行——钩子API2执行——目标API执行的过程,而不需要还原的过程,则不会产生时间缝隙,从而避免在钩子挂钩和脱钩过程中产生缝隙的问题。
本发明中的钩子API2并不需要真正执行什么动作,只需要在钩子API1执行时,其能钩住即可。则简单的钩子API2为空白程序,空白程序即不需要执行任何代码的程序,即程序本身不需要执行任何动作。当然,钩子API2间地址的跳转并不是程序本身执行的动作,而是系统动作。钩子API1只要在执行完毕后能调用API2即可,可以是预先设置的钩子程序或者其他任意的程序,即要在目标API执行前执行的程序即可。
以及本发明还提供无缝钩子设置装置200,如图2所示,包括如下模块:临时钩子创建模块201:在目标API被触发时,创建钩子API2;第一地址替换模块202:替换API2的入口地址为原目标API入口地址;第二地址替换模块203:替换原目标API入口地址为钩子API1的入口地址;钩子API1执行模块204:执行钩子API1;被钩地址还原模块205:随着目标API的释放,钩子API1自动释放。本发明可以避免在钩子还原的时候出现缝隙的问题。
正如上面所述,所述钩子API1为预置钩子程序,钩子API2为空白程序。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括……”或“包含……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的要素。此外,在本文中,“大于”、“小于”、“超过”等理解为不包括本数;“以上”、“以下”、“以内”等理解为包括本数。
本领域内的技术人员应明白,上述各实施例可提供为方法、装置、或计算机程序产品。这些实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。上述各实施例涉及的方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机设备可读取的存储介质中,用于执行上述各实施例方法所述的全部或部分步骤。所述计算机设备,包括但不限于:个人计算机、服务器、通用计算机、专用计算机、网络设备、嵌入式设备、可编程设备、智能移动终端、智能家居设备、穿戴式智能设备、车载智能设备等;所述的存储介质,包括但不限于:RAM、ROM、磁碟、磁带、光盘、闪存、U盘、移动硬盘、存储卡、记忆棒、网络服务器存储、网络云存储等。
上述各实施例是参照根据实施例所述的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到计算机设备的处理器以产生一个机器,使得通过计算机设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机设备以特定方式工作的计算机设备可读存储器中,使得存储在该计算机设备可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机设备上,使得在计算机设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已经对上述各实施例进行了描述,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改,所以以上所述仅为本发明的实施例,并非因此限制本发明的专利保护范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围之内。
Claims (6)
1.软件钩子设置方法,其特征在于,包括如下步骤:
在目标API被触发时,创建钩子API2;
替换API2的入口地址为原目标API入口地址;
替换原目标API入口地址为钩子API1的入口地址;
执行钩子API1;
随着目标API的释放,钩子API1自动释放。
2.根据权利要求1所述的软件钩子设置方法,其特征在于:所述钩子API1为预置钩子程序,钩子API2为空白程序。
3.无缝钩子设置装置,其特征在于,包括如下模块:临时钩子创建模块:在目标API被触发时,创建钩子API2。
4.根据权利要求1所述的软件钩子设置方法,其特征在于:包括如下模块:第一地址替换模块:替换API2的入口地址为原目标API入口地址;第二地址替换模块:替换原目标API入口地址为钩子API1的入口地址。
5.根据权利要求1所述的软件钩子设置方法,其特征在于:包括如下模块:钩子API1执行模块:执行钩子API1;被钩地址还原模块:随着目标API的释放,钩子API1自动释放。
6.根据权利要求3所述的软件钩子设置装置,其特征在于:述钩子API1为预置钩子程序,钩子API2为空白程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711371113.2A CN109933387A (zh) | 2017-12-19 | 2017-12-19 | 软件钩子设置方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711371113.2A CN109933387A (zh) | 2017-12-19 | 2017-12-19 | 软件钩子设置方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109933387A true CN109933387A (zh) | 2019-06-25 |
Family
ID=66983206
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711371113.2A Withdrawn CN109933387A (zh) | 2017-12-19 | 2017-12-19 | 软件钩子设置方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109933387A (zh) |
-
2017
- 2017-12-19 CN CN201711371113.2A patent/CN109933387A/zh not_active Withdrawn
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105683908B (zh) | 知晓上下文的用户界面部分 | |
CN110020323B (zh) | 混合应用的页面切换方法、系统、计算机设备及存储介质 | |
EP3230860B1 (en) | Technologies for efficient synchronization barriers with work stealing support | |
US20140137131A1 (en) | Framework for java based application memory management | |
CN110162344B (zh) | 一种隔离限流的方法、装置、计算机设备及可读存储介质 | |
US9658937B2 (en) | Optimization of hardware monitoring for computing devices | |
US11269692B2 (en) | Efficient sequencer for multiple concurrently-executing threads of execution | |
CN109240876A (zh) | 实例监控方法、计算机可读存储介质和终端设备 | |
CN112416556B (zh) | 一种数据读写优先平衡方法、系统、装置及存储介质 | |
CN108021405B (zh) | 一种soc系统启动过程中存储介质的驱动方法和装置 | |
CN104239131A (zh) | 一种关闭应用程序的方法及装置 | |
CN105786524B (zh) | 软件钩子设置方法及装置 | |
CN108509322A (zh) | 避免过度回访的方法、电子装置及计算机可读存储介质 | |
CN109933387A (zh) | 软件钩子设置方法及装置 | |
CN111901318A (zh) | 一种命令注入攻击检测的方法、系统及设备 | |
CN103970597A (zh) | 读写均衡的阻塞队列实现方法及装置 | |
CN111338628A (zh) | 组件渲染方法及设备 | |
CN107621939B (zh) | 一种应用优化方法及装置 | |
CN103019813A (zh) | 获取基于SaaS的交互式程序的交互强度的方法 | |
CN105469424B (zh) | 物理碰撞预测方法和装置 | |
CN110019071A (zh) | 数据处理方法及装置 | |
CN113641476A (zh) | 一种任务调度方法、游戏引擎、设备及存储介质 | |
CN112860419A (zh) | 多实例任务的执行方法、装置、终端设备及计算机存储介质 | |
CN104573504B (zh) | 一种用于在iOS相关系统中运行应用的方法和装置 | |
JP2018005667A (ja) | キャッシュ情報出力プログラム、キャッシュ情報出力方法及び情報処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20190625 |