CN113485903A - 一种基于hook的参数统计方法和装置 - Google Patents
一种基于hook的参数统计方法和装置 Download PDFInfo
- Publication number
- CN113485903A CN113485903A CN202110780229.1A CN202110780229A CN113485903A CN 113485903 A CN113485903 A CN 113485903A CN 202110780229 A CN202110780229 A CN 202110780229A CN 113485903 A CN113485903 A CN 113485903A
- Authority
- CN
- China
- Prior art keywords
- target
- hook
- application
- target method
- layer
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3452—Performance evaluation by statistical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3495—Performance evaluation by tracing or monitoring for systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Probability & Statistics with Applications (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Computational Biology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种基于hook的参数统计方法和装置,该参数统计方法包括:在应用的Java层调用应用中的目标方法时,在应用的native层中hook住目标方法的调用入口;将目标方法的执行地址替换为预定义的hook方法的执行地址,hook方法用于统计得到目标方法被调用时的目标参数;在native层中调用并执行hook方法,得到目标方法被调用时的目标参数;将目标方法的执行地址还原并在native层中执行目标方法。由此可以在不影响目标方法执行的情况下,实现对目标方法被调用时的参数统计,此外,由于在每次调用目标方法时,都可以执行hook方法进行调用参数的统计,因此统计得到的参数准确度高。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于hook的参数统计方法和装置。
背景技术
应用中通常集成了多种方法,在一些特定的应用场景中,会对应用中的某个方法的调用参数进行统计,比如,在应用的开发或使用过程中,通常会对应用中的隐私方法或其他特定方法的调用次数等参数进行统计,以确定应用是否符合隐私合规或是否存在安全风险。
目前,在对应用方法的调用参数进行统计时,大都是基于源码进行分析。然而,应用通常由多个模块集合而成,通过分析源码的方式往往很难准确得到方法的调用参数,导致无法统计得到方法的调用参数。
发明内容
本申请实施例提供一种基于hook的参数统计方法和装置,用于解决目前无法对应用中方法的调用参数进行准确统计的问题。
为解决上述技术问题,本申请实施例是这样实现的:
第一方面,提出一种基于hook的参数统计方法,包括:
在应用的Java层调用所述应用中的目标方法时,在所述应用的native层中hook住所述目标方法的调用入口;
将所述目标方法的执行地址替换为预定义的hook方法的执行地址,所述hook方法用于统计得到所述目标方法被调用时的目标参数;
在所述native层中调用并执行所述hook方法,得到所述目标参数;
将所述目标方法的执行地址还原并在所述native层中执行所述目标方法。
第二方面,提出一种基于hook的参数统计装置,包括:
处理单元,在应用的Java层调用所述应用中的目标方法时,在所述应用的native层中hook住所述目标方法的调用入口;
地址替换单元,将所述目标方法的执行地址替换为预定义的hook方法的执行地址,所述hook方法用于统计得到所述目标方法被调用时的目标参数;
第一执行单元,在所述native层中调用并执行所述hook方法,得到所述目标参数;
第二执行单元,将所述目标方法的执行地址还原并在所述native层中执行所述目标方法。
第三方面,提出一种电子设备,该电子设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,该可执行指令在被执行时使该处理器执行以下操作:
在应用的Java层调用所述应用中的目标方法时,在所述应用的native层中hook住所述目标方法的调用入口;
将所述目标方法的执行地址替换为预定义的hook方法的执行地址,所述hook方法用于统计得到所述目标方法被调用时的目标参数;
在所述native层中调用并执行所述hook方法,得到所述目标参数;
将所述目标方法的执行地址还原并在所述native层中执行所述目标方法。
第四方面,提出一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下方法:
在应用的Java层调用所述应用中的目标方法时,在所述应用的native层中hook住所述目标方法的调用入口;
将所述目标方法的执行地址替换为预定义的hook方法的执行地址,所述hook方法用于统计得到所述目标方法被调用时的目标参数;
在所述native层中调用并执行所述hook方法,得到所述目标参数;
将所述目标方法的执行地址还原并在所述native层中执行所述目标方法。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
在应用的Java层调用目标方法时,可以在应用的native层hook住目标方法的调用入口,并将目标方法的执行地址替换为预先定义的hook方法的执行地址,并在native层中调用执行hook方法中的统计逻辑以统计得到目标方法被调用时的目标参数,在执行完hook方法并得到目标参数后,可以将目标方法的执行地址还原并执行目标方法。这样,在Java层中调用目标方法时,通过在native层hook住方法的调用入口,并在方法执行前将目标方法的执行地址替换为hook方法的执行地址,在hook方法执行完后将目标方法的执行地址还原,可以在不影响目标方法正常执行的情况下,实现对目标方法被调用时的参数统计,此外,由于在每次调用目标方法时,都可以执行hook方法进行调用参数的统计,因此统计得到的参数准确度高。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请的一个实施例基于hook的参数统计方法的流程示意图;
图2是本申请的一个实施例基于hook的参数统计方法的流程示意图;
图3是本申请的一个实施例基于hook的参数统计方法的示意图;
图4是本申请的一个实施例电子设备的结构示意图;
图5是本申请的一个实施例基于hook的参数统计装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
目前,在应用的使用过程中,为了保护用户的隐私安全,当应用中的隐私方法(用于获取用户的隐私数据或其他敏感数据)的调用次数过多时,会禁止应用继续访问,或将应用误认为病毒后禁止应用继续访问等,导致应用无法正常运行。为了避免出现这种情况,在应用上架前或在应用上架后用户使用应用的过程中,需要对应用中的隐私方法或其他特定方法的调用次数等参数进行监控和统计,以确定应用是否符合隐私合规或是否存在安全风险。
在现有技术中,在对应用中方法的调用参数进行统计时,通常是对应用的源码进行分析,然而,这种方法只能实现静态统计,无法在应用运行的过程中实现动态统计。此外,由于应用通常是由多个第三方SDK集合而成,因此,应用的源码较为复杂,且个别第三方SDK的源码不易获得,这样就导致通过源码分析的方式不能准确得到方法被调用时的参数。由此可见,目前存在无法对应用中方法的调用参数进行准确统计的问题。
为了解决上述技术问题,本申请实施例提供一种基于hook的参数统计方法和装置,在应用的Java层中调用目标方法时,通过在应用的native层hook住方法的调用入口,并在方法执行前将目标方法的执行地址替换为hook方法的执行地址,在hook方法执行完后将目标方法的执行地址还原,可以在不影响目标方法正常执行的情况下,实现对目标方法被调用时的参数统计,此外,由于在每次调用目标方法时,都可以执行hook方法进行调用参数的统计,因此统计得到的参数准确度高。
需要说明的是,本申请实施例提供的技术方案,不仅可以实现隐私方法和某些特定方法被调用时的参数统计,还可以实现应用中其他方法被调用时的参数统计,这些方法可以是应用Java层中的方法,也可以是应用native层中的方法,本申请实施例不做具体限定。此外,在进行参数统计时,可以是在应用上架前在对应用进行测试时进行参数统计,也可以是在应用上架后用户使用应用的过程中进行参数统计,这里也不做具体限定。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1是本申请的一个实施例基于hook的参数统计方法的流程示意图。所述方法如下所述。
S102:在应用的Java层调用应用中的目标方法时,在应用的native层中hook住目标方法的调用入口。
应用可以理解为基于Android操作系统的应用,在Android操作系统下,应用中可以包括Java层和native层,且应用中可以包括多个方法,这些方法可以是Java层中的方法,也可以是native层中的方法,具体可以是隐私方法(用于获取隐私数据),也可以是其他方法。
在应用中的Java层调用应用中的某个目标方法时,该Java层和应用中的native层之间会进行交互。本实施例中,在应用中的Java层和native层之间进行交互时,在native层会hook住被调用的目标方法的调用入口,该调用入口可以理解为目标方法的内存地址。
可选地,为了便于Java层在调用目标方法时在native层hook住目标方法的调用入口,在初始化Java层时,可以令Java层调用native层提供的通信接口JNI(Java nativeinterface),以使Java层和native层之间建立通信,这样,在Java层调用目标方法时,Java层可以通过初始化时调用的JNI接口和native之间进行交互,使得在native层中可以hook住目标方法的调用入口。其中,初始化Java层可以理解为初始化应用进程,即在启动应用进程时,即对应用中的Java层进行初始化。
S104:将目标方法的执行地址替换为预定义的hook方法的执行地址,hook方法用于统计得到目标方法被调用时的目标参数。
在native层已hook住目标方法的调用入口的情况下,在native层中,可以将目标方法的执行地址替换为预定义的hook方法的执行地址。其中,hook方法用于统计得到目标方法被调用时的目标参数。
上述hook方法可以在Java层中预定义得到。具体地,在Java层调用目标方法之前,Java层中可以预先定义目标方法的信息和hook方法的统计逻辑,目标方法的信息具体可以是目标方法的类名、方法名和目标方法中的参数,hook方法的统计逻辑可以理解为如何统计得到目标参数。
hook方法用于统计的目标参数可以是目标方法的调用次数、调用时长、被调用的时刻等等,这里不再一一举例说明。其中,若目标参数为调用次数,则调用次数具体可以是设定时间内目标方法被调用的总次数,对应的hook方法的统计逻辑可以是在设定时间内,Java层每调用一次目标方法,该目标方法的调用次数累计加一,如此可以统计得到在设定时间内目标方法的总调用次数。调用时长可以是单词调用时长,也可以是多次调用的累计时长,被调用的时刻为调用目标方法时的具体时间。
本实施例中,在native层可以将目标方法映射为ArtMethod的结构,该ArtMethod中可以保存有目标方法的类、访问权限和执行地址等信息。这样,通过将目标方法映射为ArtMethod的结构,可以便于后续将目标方法的执行地址替换为hook方法的执行地址。
上述ArtMethod还具有属性entry_point_from_quick_compiled_code_,其中,在将目标方法的执行地址替换为hook方法的执行地址时,具体可以是将ArtMethod的属性entry_point_from_quick_compiled_code_的内存地址替换为hook方法的执行地址。
在一种更为具体的实现方式中,考虑到目标方法是在CPU上执行的,在CPU上执行目标方法时,需要将方法转化为机器语言后再转化为汇编语言,最终得到可以在CPU上执行的指令,因此,在将目标方法的执行地址替换为预定义的hook方法的执行地址时,可以基于替换指令集的方式实现执行地址的替换,即在替换执行地址时,可以将对应的指令集进行替换。其中,考虑到CPU有不同的架构,不同的CPU架构适配不同的指令集,即不同的CPU架构对应的处理指令集不同,因此,可以基于应用当前运行的CPU选择适配的指令集进行执行地址的替换。
S106:在native层中调用并执行hook方法,得到目标参数。
在native层中,在将目标方法的执行地址替换为预定义的hook方法的执行地址后,可以在native层中调用并执行hook方法。在hook方法执行完毕后,可以得到需要统计的目标参数。
需要说明的是,若需要统计的目标参数为设定时间内的调用次数,则在执行完hook方法后,统计结果为设定时间内目标方法的总调用次数,即在设定时间内每调用一次目标方法,统计结果可以累计加一。
S108:将目标方法的执行地址还原并在native层中执行目标方法。
在执行完hook方法并得到目标参数后,可以将目标方法的执行地址还原,即将目标方法的执行地址由hook方法的执行地址还原为目标方法自己的执行地址。在将目标方法的执行地址还原后,可以在native层中执行该目标方法,保证目标方法的正常执行。
由此可见,在Java层调用目标方法时,通过在native层hook住目标方法的调用入口,在目标方法执行之前将目标方法的执行地址替换为用于进行参数统计的hook方法的执行地址,在hook方法执行之后还原目标方法的执行地址,达到目标方法执行且hook方法也执行了统计与监控的目的。本申请实施例提供的技术方案对应用的侵入较少,只需在Java层定义用于进行参数统计的方法和需要监控的目标方法即可,由于是在native层替换执行地址进而实现的hook,因此,对于应用的性能方面几乎没有负面影响。
可选地,在得到目标参数后,可以将目标参数返回给Java层,以便Java层输出统计得到的目标参数。
可选地,在得到目标参数后,还可以基于目标参数判断应用是否符合隐私合规或是否存在安全风险等。若不符合隐私合规或存在安全风险,则可以对禁止应用运行或对应用进行修复等。
针对本申请实施例提供的技术方案,在一种可能的应用场景中,Java层可以是在响应用户或终端的操作系统对应用的指定操作时调用的目标方法。具体地,在应用运行的过程中,用户或安装有该应用的终端的操作系统会对应用执行指定操作,该指定操作可以用于获取应用中的指定资源,该指定资源可以是已预先存储在应用的native层中的资源。应用在接收到该指定操作后,基于该指定操作,应用中的Java层会调用应用中的目标方法,该目标方法与该指定操作相对应,可以用于从应用的native层中调用与指定操作对应的指定资源。其中,目标方法与指定操作相对应可以理解为,通过调用并执行目标方法可以从native层中获取指定操作所要获取的指定资源。
在一种更为具体的实现方式中,上述指定资源可以是native层中的敏感数据,上述指定操作可以是用于获取敏感数据的操作,相应的,上述目标方法可以是隐私方法,具体用于从应用的native层中调用敏感数据。其中,敏感数据可以是用户的个人数据,也可以是应用中的其他隐私数据。
这样,在应用中的Java层调用隐私方法以获取敏感数据时,通过在native层中hook住隐私方法的调用入口,并将隐私方法的执行地址替换为hook方法的执行地址,在执行完hook方法的统计逻辑后再将隐私方法的执行地址还原并执行隐私方法,由此可以实现对隐私方法调用的监控,并统计得到隐私方法被调用时的调用参数。之后,还可以根据统计得到的隐私方法的调用参数判断应用是否符合隐私合规或是否存在安全风险。比如,若在设定时间内隐私方法被调用的次数不大于设定阈值,则可以认为应用符合隐私合规,不存在安全风险,反之,若在设定时间内隐私方法被调用的次数大于设定阈值,则可以认为应用不符合隐私合规,存在安全风险。
可选地,在其他实现方式中,上述指定操作所获取的指定资源也可以是其他数据,比如,可以是应用运行过程中产生的应用数据等,相应的,目标方法可以是用于从native层调用其他数据的方法。这样,在应用中的Java层调用目标方法以获取应用中的其他数据时,通过本申请实施例提供的参数统计方法,可以实现对目标方法调用的监控,并统计得到目标方法被调用时的调用参数,由此可以获知应用运行过程中应用中的其他数据的调用和使用情况,以便了解应用的运行详情。
可选地,在实际应用中,还可以将本申请实施例提供的基于hook的参数统计方法在native层中的实现逻辑打包为so文件,该so文件可以视为native层和Java层之间通信的中间文件。这样,在Java层调用应用中的方法时,可以通过调用与native层之间的JNI接口加载该so文件,这样,就可以通过本申请实施例提供的技术方案实现方法被调用时的参数统计。
为了便于理解本申请实施例提供的技术方案,可以参见图2。图2位本申请的一个实施例基于hook的参数统计方法的流程示意图,图2所示的实施例具体包括以下步骤。
S201:在应用的Java层中预先定义需要进行参数统计的目标方法的信息和用于进行参数统计的hook方法的统计逻辑。
S202:在初始化Java层时,Java层调用native层提供的接口JNI。
S203:接收用户或终端的操作系统对应用的指定操作。
S204:响应于指定操作,在Java层调用与指定操作对应的目标方法。
S205:在应用的native层中hook住目标方法的调用入口。
S206:将目标方法映射为ArtMethod的结构,基于替换指令集的方式,将ArtMethod的属性entry_point_from_quick_compiled_code_的内存地址替换为hook方法的执行地址。
S207:在native层中调用并执行hook方法,得到目标方法被调用时的目标参数。
S208:将目标方法的执行地址还原并在native层中执行目标方法。
上述方法S201至S208的具体实现方式可以参见图1所示实施例中相应步骤的具体实现,这里不再重复说明。
图2所示的实施例,在Java层中调用目标方法时,通过在native层hook住方法的调用入口,并在方法执行前将目标方法的执行地址替换为hook方法的执行地址,在hook方法执行完后将目标方法的执行地址还原,可以在不影响目标方法正常执行的情况下,实现对目标方法被调用时的参数统计,此外,由于在每次调用目标方法时,都可以执行hook方法进行调用参数的统计,因此统计得到的参数准确度高。
以下可以以目标方法为系统方法Log.e,目标参数为调用次数为例,详细说明本申请实施例提供的技术方案的具体实现。
步骤1:在Java层定义Log.e的信息和hook方法的统计逻辑。
具体的代码可以如下所示:
在上述代码中,className是类名Log,methodName是方法e,methodSig是参数,hookTest方法中的逻辑就是统计逻辑。在每次调用Log.e方法之前都会调用此hookTest方法。在此方法中记录Log.e方法累积调用次数。
步骤2:Java层初始化的时候调用native层提供的接口JNI,Java层调用方法Log.e时,在native层中可以hook住方法Log.e的调用入口。
代码如下所示:
步骤3:在应用的UI主页中设置按钮事件,当用户点击按钮之后循环调用Log.e方法200次。
步骤4:Log.e在native层对应ArtMethod的属性由于之前被hook住,入口点替换成之前的hookTest方法的入口地址,进而调用hookTest方法。调用完成后通过backup方法回到原来的系统方法Log.e。
整个流程可以参见图3。图3所述的应用中包括Java层和native层,Java层中定义了需要进行统计的目标方法Log.e和用于进行参数统计的hook方法。在Java层调用方法Log.e时,基于Java层中定义的方法Log.e的信息,在native层中可以hook住方法Log.e的调用入口,之后,可以通过替换指令集的方式,将方法Log.e的ArtMethod的属性entry_point_from_quick_compiled_code_的内存地址(图3所示的方法Log.e所代表的8个方块中最下面的两个灰色方块),替换为hook方法的执行地址(图3所示的hook方法所代表的8个方块中最下面的两个灰色方块),然后执行hook方法中的统计逻辑。
在执行完hook方法后,将方法Log.e的执行地址还原。如图3所示,可以基于backup方法,将方法Log.e的执行地址还原。在还原方法Log.e的执行地址后,可以执行方法Log.e。
一般情况下,当Log.e被调用的时候,系统会结合Log.e的参数,从entry_point_from_quick_compiled_code_地址为入口,在native层中执行Log.e方法。而本申请则是在native层中,将方法的入口地址替换为跳板(trampoline),在此指令上做跳转和还原。还原的backup指针指向Log.e的入口,这样又会回到原来方法执行中去。
步骤5:Java层调用Log.e方法在经历了hook之后先调用了Hook_Log_e类中的HookTest方法之后再调用原Log.e方法,最终可以统计到应用运行时调用了两百次Log.e方法。
本申请实施例提供的技术方案,可以基于native层inline hook技术替换ArtMethod方法入口实现Java层全方法hook,达到对任意Java层方法调用监控与统计的目的;从native层中hook从而实现方法调用的地址替换与还原,相较于Java层代理方式的hook性能更高,侵入性更低,更加安全和高效;在Java层只需要关注自身需要统计的方法和统计逻辑,不需要关注hook细节,且支持Java层全方法hook,对应开发人员更加友好。
上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
图4是本申请的一个实施例电子设备的结构示意图。请参考图4,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成基于hook的参数统计装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
在应用的Java层调用所述应用中的目标方法时,在所述应用的native层中hook住所述目标方法的调用入口;
将所述目标方法的执行地址替换为预定义的hook方法的执行地址,所述hook方法用于统计得到所述目标方法被调用时的目标参数;
在所述native层中调用并执行所述hook方法,得到所述目标参数;
将所述目标方法的执行地址还原并在所述native层中执行所述目标方法。
上述如本申请图4所示实施例揭示的基于hook的参数统计装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central ProcessingUnit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
该电子设备还可执行图1和图2的方法,并实现基于hook的参数统计装置在图1和图2所示实施例中的功能,本申请实施例在此不再赘述。
当然,除了软件实现方式之外,本申请的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
本申请实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1和图2所示实施例的方法,并具体用于执行以下操作:
在应用的Java层调用所述应用中的目标方法时,在所述应用的native层中hook住所述目标方法的调用入口;
将所述目标方法的执行地址替换为预定义的hook方法的执行地址,所述hook方法用于统计得到所述目标方法被调用时的目标参数;
在所述native层中调用并执行所述hook方法,得到所述目标参数;
将所述目标方法的执行地址还原并在所述native层中执行所述目标方法。
图5是本申请的一个实施例基于hook的参数统计装置50的结构示意图。请参考图5,在一种软件实施方式中,所述基于hook的参数统计装置50可包括:处理单元51、地址替换单元52、第一执行单元53和第二执行单元54,其中:
处理单元51,在应用的Java层调用所述应用中的目标方法时,在所述应用的native层中hook住所述目标方法的调用入口;
地址替换单元52,将所述目标方法的执行地址替换为预定义的hook方法的执行地址,所述hook方法用于统计得到所述目标方法被调用时的目标参数;
第一执行单元53,在所述native层中调用并执行所述hook方法,得到所述目标参数;
第二执行单元54,将所述目标方法的执行地址还原并在所述native层中执行所述目标方法。
可选地,在所述Java层调用所述目标方法之前,所述Java层中预先定义有所述目标方法的信息和所述hook方法的统计逻辑,所述目标方法的信息包括所述目标方法的类名、方法名和参数。
可选地,所述目标方法被映射为ArtMethod的结构;
其中,所述地址替换单元52将所述目标方法的执行地址替换为预定义的hook方法的执行地址,包括:
将所述ArtMethod的属性entry_point_from_quick_compiled_code_的内存地址替换为所述hook方法的执行地址。
可选地,在初始化所述Java层时,由所述Java层调用所述native层提供的接口JNI,以便所述处理单元51在Java层调用所述目标方法时在所述native层hook住所述目标方法的调用入口。
可选地,所述地址替换单元52将所述目标方法的执行地址替换为预定义的hook方法的执行地址,包括:
基于替换指令集的方式,将所述目标方法的执行地址替换为预定义的hook方法的执行地址,不同的CPU架构适配不同的指令集。
可选地,所述处理单元51在应用的Java层调用所述应用中的目标方法,包括:
接收用户或终端的操作系统对所述应用的指定操作,所述指定操作用于获取所述native层中的指定资源;
响应于所述指定操作,在所述应用的Java层调用所述目标方法,所述目标方法与所述指定操作相对应,所述目标方法用于从所述native层中调用所述指定资源。
可选地,所述指定资源包括所述native层中的敏感数据,所述指定操作包括用于获取所述敏感数据的操作,所述目标方法包括隐私方法且所述目标方法用于从所述native层中调用所述敏感数据。
本申请实施例提供的基于hook的参数统计装置50还可执行图1和图2的方法,并实现基于hook的参数统计装置在图1和图2所示实施例的功能,本申请实施例在此不再赘述。
总之,以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
Claims (10)
1.一种基于hook的参数统计方法,其特征在于,包括:
在应用的Java层调用所述应用中的目标方法时,在所述应用的native层中hook住所述目标方法的调用入口;
将所述目标方法的执行地址替换为预定义的hook方法的执行地址,所述hook方法用于统计得到所述目标方法被调用时的目标参数;
在所述native层中调用并执行所述hook方法,得到所述目标参数;
将所述目标方法的执行地址还原并在所述native层中执行所述目标方法。
2.如权利要求1所述的参数统计方法,其特征在于,
在所述Java层调用所述目标方法之前,所述Java层中预先定义有所述目标方法的信息和所述hook方法的统计逻辑,所述目标方法的信息包括所述目标方法的类名、方法名和参数。
3.如权利要求2所述的参数统计方法,其特征在于,所述目标方法被映射为ArtMethod的结构;
其中,将所述目标方法的执行地址替换为预定义的hook方法的执行地址,包括:
将所述ArtMethod的属性entry_point_from_quick_compiled_code_的内存地址替换为所述hook方法的执行地址。
4.如权利要求1所述的参数统计方法,其特征在于,
在初始化所述Java层时,由所述Java层调用所述native层提供的接口JNI,以便在Java层调用所述目标方法时在所述native层hook住所述目标方法的调用入口。
5.如权利要求1所述的参数统计方法,其特征在于,将所述目标方法的执行地址替换为预定义的hook方法的执行地址,包括:
基于替换指令集的方式,将所述目标方法的执行地址替换为预定义的hook方法的执行地址,不同的CPU架构适配不同的指令集。
6.如权利要求1所述的参数统计方法,其特征在于,在应用的Java层调用所述应用中的目标方法,包括:
接收用户或终端的操作系统对所述应用的指定操作,所述指定操作用于获取所述native层中的指定资源;
响应于所述指定操作,在所述应用的Java层调用所述目标方法,所述目标方法与所述指定操作相对应,所述目标方法用于从所述native层中调用所述指定资源。
7.如权利要求6所述的参数统计方法,其特征在于,
所述指定资源包括所述native层中的敏感数据,所述指定操作包括用于获取所述敏感数据的操作,所述目标方法包括隐私方法且所述目标方法用于从所述native层中调用所述敏感数据。
8.一种基于hook的参数统计装置,其特征在于,包括:
处理单元,在应用的Java层调用所述应用中的目标方法时,在所述应用的native层中hook住所述目标方法的调用入口;
地址替换单元,将所述目标方法的执行地址替换为预定义的hook方法的执行地址,所述hook方法用于统计得到所述目标方法被调用时的目标参数;
第一执行单元,在所述native层中调用并执行所述hook方法,得到所述目标参数;
第二执行单元,将所述目标方法的执行地址还原并在所述native层中执行所述目标方法。
9.一种电子设备,其特征在于,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,该可执行指令在被执行时使该处理器执行以下操作:
在应用的Java层调用所述应用中的目标方法时,在所述应用的native层中hook住所述目标方法的调用入口;
将所述目标方法的执行地址替换为预定义的hook方法的执行地址,所述hook方法用于统计得到所述目标方法被调用时的目标参数;
在所述native层中调用并执行所述hook方法,得到所述目标参数;
将所述目标方法的执行地址还原并在所述native层中执行所述目标方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下方法:
在应用的Java层调用所述应用中的目标方法时,在所述应用的native层中hook住所述目标方法的调用入口;
将所述目标方法的执行地址替换为预定义的hook方法的执行地址,所述hook方法用于统计得到所述目标方法被调用时的目标参数;
在所述native层中调用并执行所述hook方法,得到所述目标参数;
将所述目标方法的执行地址还原并在所述native层中执行所述目标方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110780229.1A CN113485903A (zh) | 2021-07-09 | 2021-07-09 | 一种基于hook的参数统计方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110780229.1A CN113485903A (zh) | 2021-07-09 | 2021-07-09 | 一种基于hook的参数统计方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113485903A true CN113485903A (zh) | 2021-10-08 |
Family
ID=77937836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110780229.1A Pending CN113485903A (zh) | 2021-07-09 | 2021-07-09 | 一种基于hook的参数统计方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113485903A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115002180A (zh) * | 2022-05-26 | 2022-09-02 | 上海商米科技集团股份有限公司 | 一种网络请求运行监测方法、装置和计算机可读介质 |
-
2021
- 2021-07-09 CN CN202110780229.1A patent/CN113485903A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115002180A (zh) * | 2022-05-26 | 2022-09-02 | 上海商米科技集团股份有限公司 | 一种网络请求运行监测方法、装置和计算机可读介质 |
CN115002180B (zh) * | 2022-05-26 | 2024-05-14 | 上海商米科技集团股份有限公司 | 一种网络请求运行监测方法、装置和计算机可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10481964B2 (en) | Monitoring activity of software development kits using stack trace analysis | |
CN109308263B (zh) | 一种小程序测试方法、装置及设备 | |
CN110879781B (zh) | 程序调试方法、装置、电子设备及计算机可读存储介质 | |
CN111163067B (zh) | 一种安全测试方法、装置及电子设备 | |
CN111523887B (zh) | 智能合约只读方法的权限控制方法、装置及电子设备 | |
CN110648125B (zh) | 一种打包交易方法、装置、电子设备及存储介质 | |
CN113485903A (zh) | 一种基于hook的参数统计方法和装置 | |
CN114840427A (zh) | 一种代码测试、测试用例生成的方法及装置 | |
CN109933986B (zh) | 恶意代码检测方法及装置 | |
CN111949297B (zh) | 一种区块链智能合约升级方法、装置及电子设备 | |
CN113419971A (zh) | 安卓系统服务漏洞检测方法及相关装置 | |
CN111143853B (zh) | 一种应用安全的评估方法和装置 | |
CN114527983A (zh) | 一种基于中间件的接口适配方法、装置及电子设备 | |
CN110781081B (zh) | 一种移动应用回调强制触发方法、系统及存储介质 | |
CN111709748A (zh) | 一种具有业务属性的交易执行方法、装置及电子设备 | |
Johnson et al. | Dazed droids: A longitudinal study of android inter-app vulnerabilities | |
CN110750271B (zh) | 服务聚合、聚合服务的执行方法、装置和电子设备 | |
CN116956272A (zh) | 权限调用监控方法、装置及电子设备 | |
CN115203050A (zh) | 一种服务的依赖关系的确定方法及装置 | |
CN113849811A (zh) | 一种共享虚拟资源分析方法及装置 | |
CN114691496A (zh) | 单元测试方法、装置、计算设备及介质 | |
CN112052054A (zh) | 函数调用方法、装置、电子设备及存储介质 | |
CN111209593A (zh) | 基于区块链的分布式锁处理方法及相关装置和电子设备 | |
CN108459879B (zh) | 一种防止终端死机的方法、终端 | |
CN110737576B (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 |