CN105786524A - 软件钩子设置方法及装置 - Google Patents
软件钩子设置方法及装置 Download PDFInfo
- Publication number
- CN105786524A CN105786524A CN201610167790.1A CN201610167790A CN105786524A CN 105786524 A CN105786524 A CN 105786524A CN 201610167790 A CN201610167790 A CN 201610167790A CN 105786524 A CN105786524 A CN 105786524A
- Authority
- CN
- China
- Prior art keywords
- hook
- api1
- target api
- entry address
- api
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
- G06F9/4486—Formation of subprogram jump address
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为本发明装置一实施例的结构图。
附图标记说明:
200、软件钩子设置装置;
201、临时钩子创建模块;
202、第一地址替换模块;
203、第二地址替换模块;
204、钩子API1执行模块;
205、被钩地址还原模块。
具体实施方式
为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
请参阅图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 (4)
1.软件钩子设置方法,其特征在于,包括如下步骤:
在目标API被触发时,创建钩子API2;
替换API2的入口地址为原目标API入口地址;
替换原目标API入口地址为钩子API1的入口地址;
执行钩子API1;
随着目标API的释放,钩子API1自动释放。
2.根据权利要求1所述的软件钩子设置方法,其特征在于:所述钩子API1为预置钩子程序,钩子API2为空白程序。
3.无缝钩子设置装置,其特征在于,包括如下模块:
临时钩子创建模块:在目标API被触发时,创建钩子API2;
第一地址替换模块:替换API2的入口地址为原目标API入口地址;
第二地址替换模块:替换原目标API入口地址为钩子API1的入口地址;
钩子API1执行模块:执行钩子API1;
被钩地址还原模块:随着目标API的释放,钩子API1自动释放。
4.根据权利要求3所述的软件钩子设置装置,其特征在于:述钩子API1为预置钩子程序,钩子API2为空白程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610167790.1A CN105786524B (zh) | 2016-03-23 | 2016-03-23 | 软件钩子设置方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610167790.1A CN105786524B (zh) | 2016-03-23 | 2016-03-23 | 软件钩子设置方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105786524A true CN105786524A (zh) | 2016-07-20 |
CN105786524B CN105786524B (zh) | 2019-03-12 |
Family
ID=56391521
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610167790.1A Active CN105786524B (zh) | 2016-03-23 | 2016-03-23 | 软件钩子设置方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105786524B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111274554A (zh) * | 2020-02-10 | 2020-06-12 | 广州虎牙科技有限公司 | 小程序的api调用方法、装置、设备和介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1323413A (zh) * | 1998-10-09 | 2001-11-21 | 因芬尼昂技术股份公司 | 保护入口地址的方法 |
US20030110307A1 (en) * | 1996-11-08 | 2003-06-12 | Mario E. De Armas | Method and apparatus for software technology injection for operating systems which assign separate process address spaces |
US20090126017A1 (en) * | 2007-11-09 | 2009-05-14 | Vishal Chahal | Methods and systems for preventing security breaches |
CN101599113A (zh) * | 2009-06-17 | 2009-12-09 | 北京东方微点信息技术有限责任公司 | 驱动型恶意软件防御方法和装置 |
CN101599114A (zh) * | 2009-06-17 | 2009-12-09 | 北京东方微点信息技术有限责任公司 | 对病毒程序的驱动进行定位的方法及系统 |
CN101620660A (zh) * | 2009-07-31 | 2010-01-06 | 北京大学 | 一种Windows操作系统下钩子的防御方法 |
US8255931B2 (en) * | 2008-02-11 | 2012-08-28 | Blue Coat Systems, Inc. | Method for implementing ejection-safe API interception |
CN102855138A (zh) * | 2012-07-20 | 2013-01-02 | 腾讯科技(深圳)有限公司 | 一种api的拦截方法、装置及移动终端 |
-
2016
- 2016-03-23 CN CN201610167790.1A patent/CN105786524B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030110307A1 (en) * | 1996-11-08 | 2003-06-12 | Mario E. De Armas | Method and apparatus for software technology injection for operating systems which assign separate process address spaces |
CN1323413A (zh) * | 1998-10-09 | 2001-11-21 | 因芬尼昂技术股份公司 | 保护入口地址的方法 |
US20090126017A1 (en) * | 2007-11-09 | 2009-05-14 | Vishal Chahal | Methods and systems for preventing security breaches |
US8255931B2 (en) * | 2008-02-11 | 2012-08-28 | Blue Coat Systems, Inc. | Method for implementing ejection-safe API interception |
CN101599113A (zh) * | 2009-06-17 | 2009-12-09 | 北京东方微点信息技术有限责任公司 | 驱动型恶意软件防御方法和装置 |
CN101599114A (zh) * | 2009-06-17 | 2009-12-09 | 北京东方微点信息技术有限责任公司 | 对病毒程序的驱动进行定位的方法及系统 |
CN101620660A (zh) * | 2009-07-31 | 2010-01-06 | 北京大学 | 一种Windows操作系统下钩子的防御方法 |
CN102855138A (zh) * | 2012-07-20 | 2013-01-02 | 腾讯科技(深圳)有限公司 | 一种api的拦截方法、装置及移动终端 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111274554A (zh) * | 2020-02-10 | 2020-06-12 | 广州虎牙科技有限公司 | 小程序的api调用方法、装置、设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105786524B (zh) | 2019-03-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107786730B (zh) | 一种任务管理方法及终端 | |
CN108228147B (zh) | 一种性能数据日志获取方法及装置 | |
CN106446019B (zh) | 一种软件功能处理方法和装置 | |
CN102855648B (zh) | 一种图像处理方法及装置 | |
CN104536869A (zh) | 移动终端及其资源管理方法 | |
CN112465466B (zh) | 流程任务执行方法、装置、计算机设备和存储介质 | |
CN108897587B (zh) | 可插拔式机器学习算法运行方法、装置及可读存储介质 | |
CN106569917B (zh) | 一种数据备份方法及移动移动终端 | |
CN110795162B (zh) | 生成容器镜像文件的方法和装置 | |
CN107526636B (zh) | 资源识别方法及装置 | |
CN109254935A (zh) | 智能电视外接存储设备类型的识别方法和装置 | |
CN105786524A (zh) | 软件钩子设置方法及装置 | |
CN111901318A (zh) | 一种命令注入攻击检测的方法、系统及设备 | |
CN105184177A (zh) | 一种进程隐藏方法及装置 | |
CN104407763A (zh) | 内容输入方法及系统 | |
CN110704157B (zh) | 一种应用启动方法、相关装置及介质 | |
CN105488169A (zh) | 一种多进程文件转换方法及装置 | |
CN110825477A (zh) | 图形界面的加载方法、装置、设备及存储介质 | |
CN104572036B (zh) | 事件的处理方法及装置 | |
CN109933387A (zh) | 软件钩子设置方法及装置 | |
CN108845791B (zh) | 应用程序代码开发处理方法及装置、可读存储介质、终端 | |
CN113467901A (zh) | 一种任务调度的方法及相关设备 | |
CN106598974B (zh) | 一种安卓系统应用程序的数据文件生成及调用方法和装置 | |
CN112579275A (zh) | 任务执行方法、装置、设备及存储介质 | |
CN104573504B (zh) | 一种用于在iOS相关系统中运行应用的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |