CN112035278B - 函数的执行方法、装置、设备及存储介质 - Google Patents

函数的执行方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN112035278B
CN112035278B CN202010843800.5A CN202010843800A CN112035278B CN 112035278 B CN112035278 B CN 112035278B CN 202010843800 A CN202010843800 A CN 202010843800A CN 112035278 B CN112035278 B CN 112035278B
Authority
CN
China
Prior art keywords
message
target object
passive
standard hook
active
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.)
Active
Application number
CN202010843800.5A
Other languages
English (en)
Other versions
CN112035278A (zh
Inventor
高少东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing ByteDance Network Technology Co Ltd
Original Assignee
Beijing ByteDance Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing ByteDance Network Technology Co Ltd filed Critical Beijing ByteDance Network Technology Co Ltd
Priority to CN202010843800.5A priority Critical patent/CN112035278B/zh
Publication of CN112035278A publication Critical patent/CN112035278A/zh
Application granted granted Critical
Publication of CN112035278B publication Critical patent/CN112035278B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

本公开实施例公开了一种函数的执行方法、装置、设备及存储介质。该方法包括:目标对象在接收到标准hook消息时,将标准hook消息发送给消息处理方法;目标对象通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息。本公开实施例可以对指定方法实现hook,并能限制hook方法的作用范围。

Description

函数的执行方法、装置、设备及存储介质
技术领域
本公开实施例涉及计算机技术领域,尤其涉及一种函数的执行方法、装置、设备及存储介质。
背景技术
随着计算机技术的发展,钩子(hook)技术在日常iOS开发过程中使用的越来越频繁。现有技术中,对一个方法实现hook时,需要在该方法对应的类的分类中定义一个与被hook方法的方法签名相同的新方法,然后用新方法替换被hook的方法。
发明人在实现本发明的过程中,发现现有技术存在如下缺陷:如果同一个类的两个分类中分别定义了同一个方法的hook方法,即两个hook方法同名,则这两个hook方法之间会相互覆盖,只有最后一个被编译的hook方法会生效;并且,这种hook方式是对全局生效的,即被hook方法对应的类的所有实例都会被影响。
公开内容
本公开实施例提供一种函数的执行方法、装置、设备及存储介质,可以对指定方法实现hook并能限制hook方法的作用范围。
主动方面,本公开实施例提供了一种函数的执行方法,包括:
目标对象在接收到标准hook消息时,将标准hook消息发送给消息处理方法;
目标对象通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;
其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息。
进一步的,目标对象与目标临时对象唯一关联,目标临时对象的方法列表中包括:第一方法选择器、第二方法选择器以及第三方法选择器;属于同一类的不同对象针对同一被动方法对应相同的第一方法选择器的名称,且第一方法选择器的名称与标准hook消息相匹配;
第一方法选择器中的指针为空指针,空指针用于触发消息转发操作,消息转发操作与消息处理方法关联;第二方法选择器中的指针指向主动方法,第三方法选择器中的指针指向被动方法。
进一步的,目标对象将标准hook消息发送给消息处理方法,包括:
目标对象根据标准hook消息,在目标临时对象中定位与标准hook消息匹配的第一方法选择器,并将标准hook消息发送至第一方法选择器;
目标对象通过第一方法选择器确定指针为空指针时,触发消息转发操作,并将标准hook消息发送至消息处理方法进行消息转发。
进一步的,目标对象通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,包括:
目标对象通过消息处理方法,在标准hook消息中识别方法标识;
目标对象通过消息处理方法,根据方法标识的标识类型,将标准hook消息转发至主动方法或与主动方法匹配的被动方法。
进一步的,目标对象通过消息处理方法,根据方法标识的标识类型,将标准hook消息转发至主动方法,包括:
目标对象通过消息处理方法,在确定方法标识属于外部消息时,将标准hook消息转发至第二方法选择器;
目标对象通过第二方法选择器,将标准hook消息转发至第二方法选择器的指针所指向的主动方法,以触发执行主动方法;
目标对象通过主动方法,在执行完成后,生成并发送与被动方法匹配的标准hook消息。
进一步的,目标对象通过消息处理方法,根据方法标识的标识类型,将标准hook消息转发至被动方法,包括:
目标对象通过消息处理方法,在确定方法标识属于内部消息时,将标准hook消息转发至第三方法选择器;
目标对象通过第三方法选择器,将标准hook消息转发至第三方法选择器的指针所指向的被动方法,以触发执行被动方法。
进一步的,目标对象通过消息处理方法,在标准hook消息中识别方法标识,包括:
目标对象通过消息处理方法,从标准hook消息中提取方法标识;
目标对象通过消息处理方法,在确定方法标识的取值为正时,识别方法标识属于外部消息;
目标对象通过消息处理方法,在确定方法标识的取值为负时,识别方法标识属于内部消息;
目标对象通过主动方法,在执行完成后,生成并发送与被动方法匹配的标准hook消息,包括:
目标对象通过主动方法,在执行完成后,生成与被动方法匹配的标准hook消息,标准hook消息中的方法标识的取值被设置为负;
目标对象通过主动方法,将标准hook消息发送至自身;
目标对象通过消息处理方法,根据方法标识的标识类型,将标准hook消息转发至被动方法,以触发执行被动方法。
进一步的,在目标对象接收到标准hook消息之后,还包括:
目标对象将指针指向目标临时对象;
目标对象通过对象关联函数关联一个临时类管理对象,并让临时类管理对象引用目标临时对象;
在执行主动方法或被动方法之后,还包括:
目标对象根据接收的销毁指令,定位与目标对象关联的临时类管理对象;
目标对象通过临时类管理对象,销毁目标临时对象。
进一步的,第一方法选择器中的空指针为消息转发函数指针,消息处理方法为与消息转发函数指针关联的消息转发方法。
被动方面,本公开实施例还提供了一种函数的执行装置,包括:
消息处理模块,用于在接收到标准hook消息时,将标准hook消息发送给消息处理方法;
方法执行模块,用于通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;
其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息。
第三方面,本公开实施例还提供了一种设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现本公开任意实施例提供的函数的执行方法。
第四方面,本公开实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开任意实施例提供的函数的执行方法。
本公开实施例中,目标对象在接收到标准hook消息时,将标准hook消息发送给消息处理方法,然后通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息,以调用被动方法,解决了现有技术中存在的针对同一被动方法的不同hook方法间互相覆盖以及hook方法对全局生效的问题,可以使不同对象分别对指定方法实现hook,并限制hook方法的作用范围。
附图说明
图1是本公开实施例一中的一种函数的执行方法的流程图;
图2a是本公开实施例二中的一种函数的执行方法的流程图;
图2b是本公开实施例二中的一种目标对象的结构示意图;
图2c是本公开实施例二中的一种hook方法的调度流程图;
图3是本公开实施例三中的一种函数的执行装置的结构示意图;
图4是本公开实施例四中的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本公开作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本公开,而非对本公开的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本公开相关的部分而非全部结构。
实施例一
图1是本公开实施例一中的一种函数的执行方法的流程图,本实施例可适用于对指定方法实现hook的情况,该方法可以由函数的执行装置来执行,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如终端设备中。如图1所示,该方法具体包括如下步骤:
步骤110、目标对象在接收到标准hook消息时,将标准hook消息发送给消息处理方法。
本实施例中,目标对象是指基类对象,标准hook消息用于调用目标对象的指定方法,也就是被hook方法。标准hook消息中包括被hook方法对应的方法选择器名称以及被hook方法的参数,方法选择器名称实际上是一个字符串,表示运行时的被hook方法的名称,例如,pointInside:withEvent:。目标对象在接收到标准hook消息时,会将标准hook消息发送给消息处理方法,以通过消息处理方法找到并调用对应的被hook方法。
可选的,目标对象与目标临时对象唯一关联,目标临时对象的方法列表中包括:第一方法选择器、第二方法选择器以及第三方法选择器;属于同一类的不同对象针对同一被动方法对应相同的第一方法选择器的名称,且第一方法选择器的名称与标准hook消息相匹配;第一方法选择器中的指针为空指针,空指针用于触发消息转发操作,消息转发操作与消息处理方法关联;第二方法选择器中的指针指向主动方法,第三方法选择器中的指针指向被动方法。
本实施例中,被动方法可以为指定的被hook方法,主动方法可以为与被hook方法对应的匿名hook方法。为了使得目标对象的hook方法只对目标对象的实例有作用,对属于同一类的其他对象的实例无效,当目标对象运行时,目标对象与自身专属的目标临时对象唯一关联,使得目标对象在接收到标准hook消息时,可以通过查找目标临时对象的方法列表找到对应的方法实现。
本实施例中,为了让不同对象的临时对象之间互不影响,需要对临时对象进行特定的命名。示例性的,目标对象唯一关联的临时对象的类名组成为:[NSStringstringWithFormat:@“SDHook_%s_%p_%d”,originalClsName,self,mgr.randomFlag]。其中,originalClsName用于反映临时对象与其继承的基类之间的关系,self表示目标对象的内存地址,这使得目标对象可以独享一个临时对象,mgr.randomFlag表示一个随机标记,可以避免由于新建的目标对象的内存地址和之前已经释放了的对象的内存地址一样,导致新建的目标对象正在使用的临时对象被释放了,程序崩溃的情况。
本实施例中,目标临时对象的方法列表中包括:第一方法选择器、第二方法选择器以及第三方法选择器,第一方法选择器的名称与标准hook消息相匹配,即第一方法选择器的名称与被hook方法的名称相同,因此,属于同一类的不同对象针对同一被hook方法对应相同的第一方法选择器的名称。目标对象为了在接收到标准hook消息时,能够获得消息转发的控制权,实现先调用hook方法再调用被hook方法,将第一方法选择器中的指针设置为空指针,通过空指针来触发消息转发操作,消息转发操作与消息处理方法关联,从而目标对象可以通过消息处理方法选择方法进行调用。第二方法选择器中的指针指向匿名hook方法,第三方法选择器中的指针指向被hook方法。
本实施例中,在目标对象拥有专有的目标临时对象的基础上,为了使得属于同一类的不同对象针对同一被hook方法对应的hook方法的名称不同,避免相同名称的hook方法互相覆盖的问题,在生成hook方法时,只指定hook方法的实现,即只编写hook方法的方法体,而不指定方法名,并且采用指定算法给匿名hook方法生成一个唯一的标识信息,以与其他方法进行区分。
示例性的,通过下述代码可以控制匿名hook方法之间互不覆盖:
可选的,目标对象将标准hook消息发送给消息处理方法,可以包括:目标对象根据标准hook消息,在目标临时对象中定位与标准hook消息匹配的第一方法选择器,并将标准hook消息发送至第一方法选择器;目标对象通过第一方法选择器确定指针为空指针时,触发消息转发操作,并将标准hook消息发送至消息处理方法进行消息转发。
本实施例中,目标对象接收到标准hook消息之后,根据标准hook消息中的方法名称和方法参数,在目标临时对象的方法列表中查找与标准hook消息匹配的第一方法选择器,并将标准hook消息转发至第一方法选择器。当通过第一方法选择器确定标准hook消息对应的方法实现为空时,会触发消息转发操作,消息转发操作最终会调用消息处理方法,并将标准hook消息发送至消息处理方法进行转发。
步骤120、目标对象通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法。
其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息。
本实施例中,为了使得目标对象的hook方法的作用范围限制在目标对象的实例中,目标对象与目标临时对象中的消息处理方法、匿名hook方法和被hook方法唯一关联,即目标临时对象中的上述方法只有目标对象能调用。同时,属于同一类的不同对象针对同一被hook方法对应具有不同的标识信息的匿名hook方法,不会产生由于hook方法的方法名相同,导致同名hook方法之间互相覆盖的问题。为了在调用匿名hook方法之后能够返回调用被hook方法,继续原本的方法调用操作,目标对象在匿名hook方法开始被调用时,或者在匿名hook方法执行过程中,或者在匿名hook方法执行完成后,生成并发送与被hook方法匹配的标准hook消息,目标对象会根据当前接收的标准hook消息,返回调用被hook方法。
可选的,目标对象通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,可以包括:目标对象通过消息处理方法,在标准hook消息中识别方法标识;目标对象通过消息处理方法,根据方法标识的标识类型,将标准hook消息转发至主动方法或与主动方法匹配的被动方法。
本实施例中,为了使得消息处理方法能确定接收到的标准hook消息对应的调用方法,在每个标准hook消息中添加一个方法标识,该方法标识用于标记标准hook消息应该转发至匿名hook方法还是被hook方法。目标对象通过消息处理方法,从标准hook消息中提取方法标识,并确定方法标识所属的标识类型,然后根据标识类型将标准hook消息转发至匿名hook方法或与匿名hook方法匹配的被hook方法,以实现方法调用。
可选的,第一方法选择器中的空指针为消息转发函数指针,消息处理方法为与消息转发函数指针关联的消息转发方法。
本实施例中,采用Objective-C编程语言,实现hook方法的执行过程。在Objective-C编程语言中,调用目标对象的一个方法,其实是向目标对象发送标准hook消息,目标对象通过标准hook消息中的方法选择器的名称查找目标对象的目标临时对象的方法列表,找到与标准hook消息对应的方法选择器,然后根据方法列表中的方法选择器与IMP指针的映射关系,找到对应的IMP指针,进而找到该IMP指针指向的方法实现。
本实施例中,目标临时对象中的第一方法选择器中的空指针为消息转发函数指针,例如objc_msgForward指针,消息处理方法为与objc_msgForward指针关联的消息转发方法,例如forwardInvocation:方法。由于objc_msgForward指针指向一个空实现,因此目标对象接收到标准hook消息后一定会找到空的方法实现,触发消息转发操作,最终调用forwardInvocation:方法。通过对forwardInvocation:方法进行定义,即可实现先调用匿名hook方法再调用被hook方法。
本公开实施例中,目标对象在接收到标准hook消息时,将标准hook消息发送给消息处理方法,然后通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息,以调用被动方法,解决了现有技术中存在的针对同一被动方法的不同hook方法间互相覆盖以及hook方法对全局生效的问题,可以使不同对象分别对指定方法实现hook,并限制hook方法的作用范围。
实施例二
图2a是本公开实施例二中的一种函数的执行方法的流程图,本实施例可适用于对指定方法实现hook的情况,本实施例可以与上述实施例中各个可选方案结合。在本实施例中,对目标对象通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法进行具体化。如图2a所示,该方法具体包括如下步骤:
步骤210、目标对象在接收到标准hook消息时,将标准hook消息发送给消息处理方法。
可选的,在目标对象接收到标准hook消息之后,还可以包括:目标对象将指针指向目标临时对象;目标对象通过对象关联函数关联一个临时类管理对象,并让临时类管理对象引用目标临时对象。
本实施例中,目标对象中有一个ISA指针,指向目标对象对应的类,目标对象可以调用该类中的方法、变量等内容对其进行修改等操作。在目标对象接收到标准hook消息之后,目标对象将自身的ISA指针改为指向与自身唯一关联的目标临时对象,以便于通过目标临时对象实现hook。其中,目标临时对象的方法列表中包括与目标对象唯一关联的消息处理方法、主动方法和被动方法分别对应的方法选择器。然后,目标对象通过对象关联函数,例如,Objc_setAssociatedObject函数,给自身增加一些字段来存储实例对象数据,这里存储的是一个用于管理目标临时对象的临时类管理对象,例如,SDNewClassManager实例对象,并让临时类管理对象引用目标对象的ISA指针指向的目标临时对象,以在后续用到目标临时对象时可以从临时类管理对象中获取。
示例性的,如图2b所示,目标对象UIBotton接收到标准hook消息后,将自身的ISA指针指向目标临时对象SDHook_UIBotton_0xabcd_4321,目标临时对象的方法列表中包括:与标准hook消息匹配的第一方法选择器pointInside:withEvent:,其中,为了目标对象在接收到标准hook消息时能触发消息转发操作,第一方法选择器pointInside:withEvent:中的IMP指针由原本指向的被hook方法替换为_objc_msgForward指针;与匿名hook方法对应的第二方法选择器_1_A_SD_pointInside:withEvent:;以及,与被hook方法对应的第三方法选择器_1_B_SD_pointInside:withEvent:。
如图2c所示,目标对象UIBotton接收到pointInside:withEvent:消息后,在目标临时对象SDHook_UIBotton_0xabcd_4321的方法列表中查找与pointInside:withEvent:消息匹配的第一方法选择器pointInside:withEvent:,并将pointInside:withEvent:消息发送给第一方法选择器,然后执行第一方法选择器中的_objc_msgForward指针指向的与pointInside:withEvent:消息对应的空方法实现,触发消息转发操作,消息转发操作最终会调用消息处理方法forwardInvocation:,并将pointInside:withEvent:消息发送至forwardInvocation:方法进行转发。
步骤220、目标对象通过消息处理方法,在标准hook消息中识别方法标识。
可选的,目标对象通过消息处理方法,在标准hook消息中识别方法标识,可以包括:目标对象通过消息处理方法,从标准hook消息中提取方法标识;目标对象通过消息处理方法,在确定方法标识的取值为正时,识别方法标识属于外部消息;目标对象通过消息处理方法,在确定方法标识的取值为负时,识别方法标识属于内部消息。
本实施例中,目标对象接收的每个标准hook消息中都携带有方法标识,该方法标识用于标记标准hook消息是从匿名hook方法内部发出的,还是从匿名hook方法外部发出的。目标对象通过消息处理方法,在标准hook消息中提取方法标识以及方法标识的取值,如果方法标识的取值大于等于0,则认为取值为正,识别方法标识属于外部消息,如果方法标识的取值小于0,则认为取值为负,识别方法标识属于内部消息。或者,方法标识的类型确认规则也可以设置为:当方法标识的取值小于等于预设门限值时,确认方法标识属于外部消息,当方法标识的取值大于预设门限值时,确认方法标识属于内部消息。本实施例对方法标识的类型确认方法并不限制,任何能区分方法标识类型的手段都可以用于本实施例中。
步骤230、目标对象通过消息处理方法,根据方法标识的标识类型,将标准hook消息转发至主动方法或与主动方法匹配的被动方法。
可选的,目标对象通过消息处理方法,根据方法标识的标识类型,将标准hook消息转发至主动方法,可以包括:目标对象通过消息处理方法,在确定方法标识属于外部消息时,将标准hook消息转发至第二方法选择器;目标对象通过第二方法选择器,将标准hook消息转发至第二方法选择器的指针所指向的主动方法,以触发执行主动方法;目标对象通过主动方法,在执行完成后,生成并发送与被动方法匹配的标准hook消息。
本实施例中,如图2c所示,目标对象通过消息处理方法forwardInvocation:,如果确定方法标识属于外部消息,即确定标准hook消息pointInside:withEvent:是从匿名hook方法外部发出的,则确定匿名hook方法尚未被调用,此时应该调用匿名hook方法,因此,会将标准hook消息转发至与匿名hook方法对应的第二方法选择器_1_A_SD_pointInside:withEvent:,通过第二方法选择器,将pointInside:withEvent:消息转发至第二方法选择器的IMP指针所指向的匿名hook方法,并执行该匿名hook方法。为了能够继续执行原本应该被调用的被hook方法,目标对象在执行匿名hook方法后,生成并发送与被hook方法匹配的标准hook消息。
可选的,目标对象通过消息处理方法,根据方法标识的标识类型,将标准hook消息转发至被动方法,可以包括:目标对象通过消息处理方法,在确定方法标识属于内部消息时,将标准hook消息转发至第三方法选择器;目标对象通过第三方法选择器,将标准hook消息转发至第三方法选择器的指针所指向的被动方法,以触发执行被动方法。
本实施例中,如图2c所示,目标对象通过消息处理方法forwardInvocation:,如果确定方法标识属于内部消息,即确定标准hook消息pointInside:withEvent:是从匿名hook方法内部发出的,则确定已经成功拦截了一次标准hook消息,并调用了匿名hook方法,当前的标准hook消息用于调用被hook方法,因此,会将标准hook消息转发至被hook方法对应的第三方法选择器_1_B_SD_pointInside:withEvent:,通过第三方法选择器,将pointInside:withEvent:消息转发至第三方法选择器的IMP指针所指向的被hook方法,并执行该被hook方法。
可选的,目标对象通过主动方法,在执行完成后,生成并发送与被动方法匹配的标准hook消息,可以包括:目标对象通过主动方法,在执行完成后,生成与被动方法匹配的标准hook消息,标准hook消息中的方法标识的取值被设置为负;目标对象通过主动方法,将标准hook消息发送至自身;目标对象通过消息处理方法,根据方法标识的标识类型,将标准hook消息转发至被动方法,以触发执行被动方法。
本实施例中,目标对象在执行匿名hook方法后,通过匿名hook方法生成携带取值为负的方法标识的标准hook消息,并将该标准hook消息发送至自身。目标对象在接收到标准hook消息后,继续根据当前接收的标准hook消息在目标临时对象的方法列表中查找第一方法选择器,通过第一方法选择器触发消息转发操作,并将标准hook消息发送至消息处理方法,然后通过消息处理方法确定方法标识属于内部消息,从而将标准hook消息转发至被hook方法,并执行被hook方法。
可选的,在执行主动方法或被动方法之后,还可以包括:目标对象根据接收的销毁指令,定位与目标对象关联的临时类管理对象;目标对象通过临时类管理对象,销毁目标临时对象。
本实施例中,当目标对象需要被销毁时,与目标对象唯一关联的目标临时对象也需要被销毁。目标对象根据接收的销毁指令定位到与目标对象关联的临时类管理对象,通过临时类管理对象找到目标临时对象,根据临时类管理对象中的dealloc方法销毁目标临时对象。目标对象在接收到销毁指令之后,不能立即销毁目标临时对象,因为此时目标对象还没有完全析构,还在做其他的操作,如果此时销毁目标临时类会造成程序崩溃,因此要稍微延迟一段时间,等目标对象析构之后,再销毁目标临时对象。
本公开实施例中,目标对象在接收到标准hook消息时,将标准hook消息发送给消息处理方法,然后通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息,以调用被动方法,解决了现有技术中存在的针对同一被动方法的不同hook方法间互相覆盖以及hook方法对全局生效的问题,可以使不同对象分别对指定方法实现hook,并限制hook方法的作用范围。
实施例三
图3是本公开实施例三中的一种函数的执行装置的结构示意图,本实施例可适用于对指定方法实现hook的情况,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于能够执行hook函数的设备中,例如终端设备中。如图3所示,该装置可以包括:
消息处理模块310,用于在接收到标准hook消息时,将标准hook消息发送给消息处理方法;
方法执行模块320,用于通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;
其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息。
本公开实施例中,目标对象在接收到标准hook消息时,将标准hook消息发送给消息处理方法,然后通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息,以调用被动方法,解决了现有技术中存在的针对同一被动方法的不同hook方法间互相覆盖以及hook方法对全局生效的问题,可以使不同对象分别对指定方法实现hook,并限制hook方法的作用范围。
进一步的,目标对象与目标临时对象唯一关联,目标临时对象的方法列表中包括:第一方法选择器、第二方法选择器以及第三方法选择器;属于同一类的不同对象针对同一被动方法对应相同的第一方法选择器的名称,且第一方法选择器的名称与标准hook消息相匹配;
第一方法选择器中的指针为空指针,空指针用于触发消息转发操作,消息转发操作与消息处理方法关联;第二方法选择器中的指针指向主动方法,第三方法选择器中的指针指向被动方法。
进一步的,消息处理模块310,具体用于:根据标准hook消息,在目标临时对象中定位与标准hook消息匹配的第一方法选择器,并将标准hook消息发送至第一方法选择器;通过第一方法选择器确定指针为空指针时,触发消息转发操作,并将标准hook消息发送至消息处理方法进行消息转发。
进一步的,方法执行模块320,具体用于:通过消息处理方法,在标准hook消息中识别方法标识;通过消息处理方法,根据方法标识的标识类型,将标准hook消息转发至主动方法或与主动方法匹配的被动方法。
进一步的,方法执行模块320,具体用于:通过消息处理方法,在确定方法标识属于外部消息时,将标准hook消息转发至第二方法选择器;通过第二方法选择器,将标准hook消息转发至第二方法选择器的指针所指向的主动方法,以触发执行主动方法;通过主动方法,在执行完成后,生成并发送与被动方法匹配的标准hook消息。
进一步的,方法执行模块320,具体用于:通过消息处理方法,在确定方法标识属于内部消息时,将标准hook消息转发至第三方法选择器;通过第三方法选择器,将标准hook消息转发至第三方法选择器的指针所指向的被动方法,以触发执行被动方法。
进一步的,方法执行模块320,具体用于:通过消息处理方法,从标准hook消息中提取方法标识;通过消息处理方法,在确定方法标识的取值为正时,识别方法标识属于外部消息;通过消息处理方法,在确定方法标识的取值为负时,识别方法标识属于内部消息;
方法执行模块320,具体用于:通过主动方法,在执行完成后,生成与被动方法匹配的标准hook消息,标准hook消息中的方法标识的取值被设置为负;通过主动方法,将标准hook消息发送至自身;通过消息处理方法,根据方法标识的标识类型,将标准hook消息转发至被动方法,以触发执行被动方法。
进一步的,还包括:关联模块,用于在目标对象接收到标准hook消息之后,将指针指向目标临时对象;通过对象关联函数关联一个临时类管理对象,并让临时类管理对象引用目标临时对象;
还包括:销毁模块,用于在执行主动方法或被动方法之后,根据接收的销毁指令,定位与目标对象关联的临时类管理对象;通过临时类管理对象,销毁目标临时对象。
进一步的,第一方法选择器中的空指针为消息转发函数指针,消息处理方法为与消息转发函数指针关联的消息转发方法。
本公开实施例所提供的函数的执行装置,与本公开实施例提供的函数的执行方法属于同一公开构思,未在本公开实施例中详尽描述的技术细节可参见上述实施例,并且本公开实施例函数的执行装置与上述实施例提供的函数的执行方法具有相同的有益效果。
实施例四
本公开实施例提供了一种设备,下面参考图4,其示出了适于用来实现本公开实施例的设备(例如终端设备或服务器)400的结构示意图。本公开实施例中的设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图4示出的设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图4所示,设备400可以包括处理装置(例如中央处理器、图形处理器等)401,其可以根据存储在只读存储器(ROM)402中的程序或者从存储装置406加载到随机访问存储器(RAM)403中的程序而执行各种适当的动作和处理。在RAM 403中,还存储有设备400操作所需的各种程序和数据。处理装置401、ROM 402以及RAM 403通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。
通常,以下装置可以连接至I/O接口405:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置406;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置407;包括例如磁带、硬盘等的存储装置406;以及通信装置409。通信装置409可以允许设备400与其他设备进行无线或有线通信以交换数据。虽然图4示出了具有各种装置的设备400,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置409从网络上被下载和安装,或者从存储装置406被安装,或者从ROM 402被安装。在该计算机程序被处理装置401执行时,执行本公开实施例的方法中限定的上述功能。
即,实现一种函数的执行方法:目标对象通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息。
实施例五
本公开实施例还提供了一种计算机可读存储介质,计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述设备中所包含的;也可以是单独存在,而未装配入该设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该设备执行时,使得该设备实现:目标对象在接收到标准hook消息时,将标准hook消息发送给消息处理方法;目标对象通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言,诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,消息处理模块还可以被描述为“在接收到标准hook消息时,将标准hook消息发送给消息处理方法”。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。

Claims (11)

1.一种函数的执行方法,其特征在于,包括:
目标对象在接收到标准钩子hook消息时,将标准hook消息发送给消息处理方法;
目标对象通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;
其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息;
所述目标对象与目标临时对象唯一关联,所述目标临时对象的方法列表中包括:第一方法选择器、第二方法选择器以及第三方法选择器;属于同一类的不同对象针对同一被动方法对应相同的第一方法选择器的名称,且第一方法选择器的名称与标准hook消息相匹配;
第一方法选择器中的指针为空指针,所述空指针用于触发消息转发操作,所述消息转发操作与所述消息处理方法关联;第二方法选择器中的指针指向所述主动方法,第三方法选择器中的指针指向所述被动方法。
2.根据权利要求1所述的方法,其特征在于,目标对象将标准hook消息发送给消息处理方法,包括:
所述目标对象根据所述标准hook消息,在所述目标临时对象中定位与所述标准hook消息匹配的所述第一方法选择器,并将所述标准hook消息发送至所述第一方法选择器;
所述目标对象通过第一方法选择器确定指针为空指针时,触发消息转发操作,并将所述标准hook消息发送至所述消息处理方法进行消息转发。
3.根据权利要求1所述的方法,其特征在于,目标对象通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,包括:
目标对象通过消息处理方法,在所述标准hook消息中识别方法标识;
所述目标对象通过消息处理方法,根据所述方法标识的标识类型,将标准hook消息转发至主动方法或与主动方法匹配的被动方法。
4.根据权利要求3所述的方法,其特征在于,所述目标对象通过消息处理方法,根据所述方法标识的标识类型,将标准hook消息转发至主动方法,包括:
所述目标对象通过消息处理方法,在确定所述方法标识属于外部消息时,将所述标准hook消息转发至所述第二方法选择器;
所述目标对象通过所述第二方法选择器,将所述标准hook消息转发至所述第二方法选择器的指针所指向的所述主动方法,以触发执行主动方法;
所述目标对象通过所述主动方法,在执行完成后,生成并发送与被动方法匹配的标准hook消息。
5.根据权利要求4所述的方法,其特征在于,所述目标对象通过消息处理方法,根据所述方法标识的标识类型,将标准hook消息转发至被动方法,包括:
所述目标对象通过消息处理方法,在确定所述方法标识属于内部消息时,将所述标准hook消息转发至所述第三方法选择器;
所述目标对象通过所述第三方法选择器,将所述标准hook消息转发至所述第三方法选择器的指针所指向的所述被动方法,以触发执行被动方法。
6.根据权利要求4所述的方法,其特征在于,目标对象通过消息处理方法,在所述标准hook消息中识别方法标识,包括:
目标对象通过消息处理方法,从所述标准hook消息中提取方法标识;
目标对象通过消息处理方法,在确定所述方法标识的取值为正时,识别所述方法标识属于外部消息;
目标对象通过消息处理方法,在确定所述方法标识的取值为负时,识别所述方法标识属于内部消息;
所述目标对象通过所述主动方法,在执行完成后,生成并发送与被动方法匹配的标准hook消息,包括:
所述目标对象通过所述主动方法,在执行完成后,生成与被动方法匹配的标准hook消息,所述标准hook消息中的方法标识的取值被设置为负;
所述目标对象通过所述主动方法,将所述标准hook消息发送至自身;
所述目标对象通过消息处理方法,根据所述方法标识的标识类型,将标准hook消息转发至被动方法,以触发执行被动方法。
7.根据权利要求1所述的方法,其特征在于,在目标对象接收到标准hook消息之后,还包括:
所述目标对象将指针指向目标临时对象;
所述目标对象通过对象关联函数关联一个临时类管理对象,并让所述临时类管理对象引用所述目标临时对象;
在执行主动方法或被动方法之后,还包括:
所述目标对象根据接收的销毁指令,定位与目标对象关联的临时类管理对象;
所述目标对象通过所述临时类管理对象,销毁所述目标临时对象。
8.根据权利要求1-6任一项所述的方法,其特征在于,第一方法选择器中的空指针为消息转发函数指针,所述消息处理方法为与所述消息转发函数指针关联的消息转发方法。
9.一种函数的执行装置,其特征在于,包括:
消息处理模块,用于在接收到标准hook消息时,将标准hook消息发送给消息处理方法;
方法执行模块,用于通过消息处理方法,将标准hook消息转发至主动方法或与主动方法匹配的被动方法,以触发执行主动方法或被动方法;
其中,目标对象与消息处理方法、主动方法和被动方法唯一关联,属于同一类的不同对象针对同一被动方法对应不同的主动方法,且主动方法执行完成后,生成并发送与被动方法匹配的标准hook消息;
所述目标对象与目标临时对象唯一关联,所述目标临时对象的方法列表中包括:第一方法选择器、第二方法选择器以及第三方法选择器;属于同一类的不同对象针对同一被动方法对应相同的第一方法选择器的名称,且第一方法选择器的名称与标准hook消息相匹配;
第一方法选择器中的指针为空指针,所述空指针用于触发消息转发操作,所述消息转发操作与所述消息处理方法关联;第二方法选择器中的指针指向所述主动方法,第三方法选择器中的指针指向所述被动方法。
10.一种设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的函数的执行方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-8中任一所述的函数的执行方法。
CN202010843800.5A 2020-08-20 2020-08-20 函数的执行方法、装置、设备及存储介质 Active CN112035278B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010843800.5A CN112035278B (zh) 2020-08-20 2020-08-20 函数的执行方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010843800.5A CN112035278B (zh) 2020-08-20 2020-08-20 函数的执行方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN112035278A CN112035278A (zh) 2020-12-04
CN112035278B true CN112035278B (zh) 2024-04-02

Family

ID=73580785

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010843800.5A Active CN112035278B (zh) 2020-08-20 2020-08-20 函数的执行方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN112035278B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5606700A (en) * 1991-01-18 1997-02-25 International Business Machines Corporation Computer program product and program storage device for object oriented programming platform
WO2009112044A1 (en) * 2008-03-10 2009-09-17 Telefonaktiebolaget Lm Ericsson (Publ) Technique for classifying network traffic and for validating a mechanism for calassifying network traffic
CN107943651A (zh) * 2017-11-22 2018-04-20 网易(杭州)网络有限公司 信息获取方法、介质、装置和计算设备
CN108228256A (zh) * 2018-02-05 2018-06-29 武汉斗鱼网络科技有限公司 代码同步方法、装置、计算机可读介质及终端

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100094861A1 (en) * 2008-10-01 2010-04-15 Henrique Andrade System and method for application session tracking

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5606700A (en) * 1991-01-18 1997-02-25 International Business Machines Corporation Computer program product and program storage device for object oriented programming platform
WO2009112044A1 (en) * 2008-03-10 2009-09-17 Telefonaktiebolaget Lm Ericsson (Publ) Technique for classifying network traffic and for validating a mechanism for calassifying network traffic
CN107943651A (zh) * 2017-11-22 2018-04-20 网易(杭州)网络有限公司 信息获取方法、介质、装置和计算设备
CN108228256A (zh) * 2018-02-05 2018-06-29 武汉斗鱼网络科技有限公司 代码同步方法、装置、计算机可读介质及终端

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MFC消息响应函数的逆向定位;谢裕敏;舒辉;陈建敏;熊小兵;;计算机应用(05);全文 *

Also Published As

Publication number Publication date
CN112035278A (zh) 2020-12-04

Similar Documents

Publication Publication Date Title
CN109597568B (zh) 一种数据存储方法、装置、终端设备及存储介质
US10467025B2 (en) Managing delivery of code and dependent data using application containers
CN107015823B (zh) 具有动态子包加载的应用容器
CN108023808B (zh) 应用程序中的消息分发方法及装置
CN110502222B (zh) 外发依赖内部基础库的aar方法、装置、介质和设备
US20160224207A1 (en) Method and system for freezing and unfreezing applications
CN110222775A (zh) 图像处理方法、装置、电子设备及计算机可读存储介质
TW202032326A (zh) 互動方法、設備、儲存媒體和操作系統
CN111625422B (zh) 线程监控方法、装置、电子设备及计算机可读存储介质
CN107526623B (zh) 一种数据处理方法及装置
US7788724B2 (en) System and method for detecting malicious applications
CN114528044A (zh) 一种接口调用方法、装置、设备及介质
CN111694639A (zh) 进程容器地址的更新方法、装置和电子设备
CN109697034B (zh) 一种数据写入方法、装置、电子设备及存储介质
CN110990346A (zh) 基于区块链的文件数据处理方法、装置、设备及存储介质
CN112035278B (zh) 函数的执行方法、装置、设备及存储介质
CN113127775B (zh) 一种页面加载方法、装置、设备和存储介质
CN110519373B (zh) 用于推送信息的方法和装置
CN111124627B (zh) 应用程序的调起者确定方法、装置、终端及存储介质
CN113986995A (zh) 请求分发方法、装置、存储介质及电子设备
CN110377654B (zh) 数据请求的处理方法、装置、电子设备及计算机可读存储介质
CN109348303B (zh) 一种弹幕消息的分发方法、装置、终端和存储介质
CN113988313A (zh) 用户数据的删除方法、装置和电子设备
CN111666581A (zh) 数据保护方法、装置、设备及介质
CN112231290A (zh) 一种本地日志的处理方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant