CN108920220B - 一种函数调用的方法、装置及终端 - Google Patents
一种函数调用的方法、装置及终端 Download PDFInfo
- Publication number
- CN108920220B CN108920220B CN201810575335.4A CN201810575335A CN108920220B CN 108920220 B CN108920220 B CN 108920220B CN 201810575335 A CN201810575335 A CN 201810575335A CN 108920220 B CN108920220 B CN 108920220B
- Authority
- CN
- China
- Prior art keywords
- function
- check
- check function
- address
- name
- 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.)
- Expired - Fee Related
Links
Images
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/4482—Procedural
- G06F9/4484—Executing subprograms
- G06F9/4486—Formation of subprogram jump address
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Telephone Function (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了提供一种函数调用的方法、装置及终端,所述方法包括:获取校验函数的名称,所述校验函数用于校验系统虚拟机中待调用函数对应的结构体的访问标志位,所述待调用函数为所述系统本身的应用程序接口API函数;基于所述校验函数的名称确定所述校验函数的实际地址;基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,使得所述校验函数对所述访问标志位进行校验后,能够允许应用程序访问并调用所述待调用函数;如此,利用内联挂钩函数对所述校验函数进行修改后,当应用程序访问并调用系统API函数时,使得校验函数对访问标志位进行校验后,能够允许应用程序调用相关的API函数,确保了应用程序的功能正常。
Description
技术领域
本发明属于应用开发技术领域,尤其涉及一种函数调用的方法、装置及终端。
背景技术
随着科学技术的不断发展,电子技术也得到了飞速的发展,终端的操作系统也在不断发展、改进。
以安卓操作系统android p为例,为了提高操作系统的稳定性,引入了新的机制,即应用程序引用非SDK接口时受限,非SDK接口对应的应用程序接口(API,ApplicationProgramming Interface)函数是系统的私有API,一般不允许或者禁止开发者调用,进而影响了绝大部分的应用程序的功能。
发明内容
鉴于上述问题,本发明提出了一种函数调用的方法、装置及系统,用于解决现有技术中在android p操作系统中应用程序在调用非SDK接口时受限,导致应用程序功能受到影响的技术问题。
本发明的第一方面,提供了一种函数调用的方法,所述方法包括:
获取校验函数的名称,所述校验函数用于校验系统虚拟机中待调用函数对应的结构体的访问标志位,所述待调用函数为所述系统本身的应用程序接口API函数;
基于所述校验函数的名称确定所述校验函数的实际地址;
基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,使得所述校验函数对所述访问标志位进行校验后,能够允许应用程序访问并调用所述待调用函数。
可选的,所述基于所述校验函数的名称确定所述校验函数的实际地址,包括:
基于所述校验函数的名称,在虚拟机本地库libart.so中查找所述校验函数的符号名称;
根据所述符号名称确定所述校验函数的虚拟地址;
获取所述虚拟机本地库libart.so的基址;
根据所述校验函数的虚拟地址及所述虚拟机本地库libart.so的基址确定所述校验函数的实际地址。
可选的,所述根据所述符号名称确定所述校验函数的虚拟地址,包括:
对所述虚拟机本地库libart.so中校验函数的文件格式进行解析,获取所述虚拟机本地库libart.so的符号表;
在所述符号表中,根据所述符号名称查找所述校验函数的虚拟地址。
可选的,所述基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,包括:
基于所述校验函数的地址,利用所述内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数;以及,
利用所述内联挂钩函数将所述校验函数的反射函数Field替换成自定义反射函数,当执行所述校验函数时,使得所述校验函数的校验返回值为预设的返回值。
可选的,所述利用所述内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数,包括:
确定所述调用函数Method在所述校验函数中的第一起始地址;
利用所述内联挂钩函数在所述第一起始地址的头字节中配置用于进行跳转的第一jmp指令;
当执行所述调用函数Method时,基于所述第一jmp指令,跳转至所述自定义调用函数。
可选的,利用所述内联挂钩函数将所述校验函数的反射函数Field替换成自定义反射函数,包括:
确定所述反射函数Field在所述校验函数中的第二起始地址;
利用所述内联挂钩函数在所述第二起始地址的头字节中配置用于进行跳转的第二jmp指令;
当执行所述反射函数Field时,基于所述第二jmp指令,跳转至所述自定义反射函数。
第二方面,本发明实施例提供一种函数调用的装置,所述装置包括:
获取单元,用于获取校验函数的名称,所述校验函数用于校验系统虚拟机中待调用函数对应的结构体的访问标志位,所述待调用函数为所述系统本身的应用程序接口API函数;
确定单元,用于基于所述校验函数的名称确定所述校验函数的实际地址;
修改单元,用于基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,使得所述校验函数对所述访问标志位进行校验后,能够允许应用程序访问并调用所述待调用函数。
可选的,所述确定单元包括:
查找子单元,用于基于所述校验函数的名称,在虚拟机本地库libart.so中查找所述校验函数的符号名称;
第一确定子单元,用于根据所述符号名称确定所述校验函数的虚拟地址;
获取子单元,用于获取所述虚拟机本地库libart.so的基址;
第二确定子单元,用于根据所述校验函数的虚拟地址及所述虚拟机本地库libart.so的基址确定所述校验函数的实际地址。
可选的,所述第一确定子单元具体用于:
对所述虚拟机本地库libart.so中校验函数的文件格式进行解析,获取所述虚拟机本地库libart.so的符号表;
在所述符号表中,根据所述符号名称查找所述校验函数的虚拟地址。
可选的,所述修改单元具体用于:
基于所述校验函数的地址,利用所述内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数;以及,
利用所述内联挂钩函数将所述校验函数的反射函数Field替换成自定义反射函数,当执行所述校验函数时,使得所述校验函数的校验返回值为预设的返回值。
可选的,所述修改单元包括:
第三确定子单元,用于确定所述调用函数Method在所述校验函数中的第一起始地址;
第一配置子单元,用于利用所述内联挂钩函数在所述第二起始地址的头字节中配置用于进行跳转的第一jmp指令;
第一跳转子单元,用于当执行所述调用函数Method时,基于所述第一jmp指令,跳转至所述自定义调用函数。
可选的,所述修改单元还包括:
第四确定子单元,用于确定所述反射函数Field在所述校验函数中的第二起始地址;
第二配置子单元,用于利用所述第二起始地址的头字节中配置用于进行跳转的第二jmp指令;
第二跳转子单元,用于当执行所述反射函数Field时,基于所述第二jmp指令,跳转至所述自定义反射函数。
第三方面,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现上述任一项所述方法的步骤。
第四方面,本发明实施例还提供一种函数调用的终端,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中,所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如上述任一项所述方法的步骤。
本申请实施例中提供的技术方案,至少具有如下技术效果或优点:
本发明实施例提供一种函数调用的方法、装置及终端,所述方法包括:获取校验函数的名称,所述校验函数用于校验系统虚拟机中待调用函数对应的结构体的访问标志位,所述待调用函数为所述系统本身的应用程序接口API函数;基于所述校验函数的名称确定所述校验函数的实际地址;基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,使得所述校验函数对所述访问标志位进行校验后,能够允许应用程序访问并调用所述待调用函数;如此,利用内联挂钩函数对所述校验函数进行修改后,当应用程序访问并调用系统API函数时,使得校验函数对访问标志位进行校验后,能够允许应用程序调用相关的API函数,确保了应用程序的功能正常。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例提供的一种函数调用的方法流程示意图;
图2示出了本发明实施例提供的一种函数调用的装置结构示意图;
图3示出了本发明实施例提供的确定单元的结构示意图;
图4示出了本发明实施例提供的确定单元的修改单元的结构示意图;
图5示出了本发明实施例提供的终端结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
本发明实施例提供了一种函数调用的方法,如图1所示,所述方法包括:
S110,获取校验函数的名称,所述校验函数用于校验系统虚拟机中待调用函数对应的结构体的访问标志位;
大部分应用程序在进行正常处理逻辑时,需访问并调用系统的某些API函数(以下称待调用函数),那么为了保持系统的稳定性,系统本身会利用校验函数对这种调用过程进行校验,具体就是校验系统虚拟机中待调用函数对应的artmethod结构体的访问标志位,校验结束后并返回一个返回值,若返回值为false时,则会允许应用程序访问待调用函数;若返回值为true时,则终止应用程序访问待调用函数。那么本步骤中首先需获取到校验函数的名称,校验函数为一个封装函数,本实施例中校验函数的名称为ShouldBlockAccessToMember。
这里,系统的虚拟机为art虚拟机,art虚拟机在运行时,内部运行是通过class的类描述以及method的类方法描述而执行的。其中,每一个待调用函数都会对应一个method结构体,method结构体成员变量包括方法所在的类对象指针、方法的属性、方法在dex文件中的index,方法的机器码指针以及方法native代码的指针等。那么就可以在Native层调用待调用函数得到待调用函数的artmethod结构体,待调用函数为java函数。
S111,基于所述校验函数的名称确定所述校验函数的实际地址;
获取到校验函数的名称后,可以基于校验函数的名称确定校验函数的实际地址,具体如下:
因校验函数是设置在虚拟机本地库libart.so中的,因此可以基于校验函数的名称,在虚拟机本地库libart.so中查找校验函数的符号名称,根据所述符号名称确定校验函数的虚拟地址;本实施例中校验函数的符号名称为“_ZN3art9hiddenapi25ShouldBlockAccessToMemberINS_9ArtMethodEEEbPT_PNS_6ThreadENSt3__18functionIFbS6_EEENS0_12AccessMethodE",
"_ZN3art9hiddenapi25ShouldBlockAccessToMemberINS_8ArtFieldEEEbPT_PNS_6ThreadENSt3__18functionIFbS6_EEENS0_12AccessMethodE”。
然后利用地址获取函数获取所述虚拟机本地库libart.so的基址;根据校验函数的虚拟地址及虚拟机本地库libart.so的基址确定所述校验函数的实际地址。这里,直接将校验函数的虚拟地址与libart.so的基址进行相加可得到校验函数的实际地址。
作为一种可选的实施例,因符号表中记载有每个函数的符号名称,及对应的数据类型、作用域以及内存地址等信息,因此根据所述符号名称确定所述校验函数的虚拟地址,包括:
对虚拟机本地库libart.so中校验函数的文件格式进行解析,获取虚拟机本地库libart.so的符号表;在符号表中,根据校验函数的符号名称即可查找到校验函数的虚拟地址。
S112,基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改。
为了使得校验函数对所述访问标志位进行校验后,系统允许应用程序访问并调用系统API函数,获取到校验函数的实际地址后,就可以利用内联挂钩函数inlinehook对所述校验函数进行修改,使得校验函数的返回值为预设的返回值,本实施例中预设的返回值为false。
其中,inlinehook函数对应的操作即为挂钩操作,也可称为内联挂钩inlinehook操作,针对函数的机器码进行内联hook,机器码为由art编译后的二进制码。另外,hook函数为一种钩子函数,是操作系统消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息,钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统,而inlinehook不同于通过修改函数的调用地址的普通hook,inlinehook是直接在函数的函数体内修改指令,用一个跳转指令实现挂钩的目的。
这里,因校验函数是一个模板函数,利用内联挂钩函数对校验函数进行修改时,需要将校验函数的调用函数Method及反射函数Field进行修改,这里的修改指的是利用所述内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数以及利用内联挂钩函数将所述校验函数的反射函数Field替换成自定义反射函数,自定义调用函数及自定义反射函数统称为自定义函数。那么当执行校验函数时,使得所述调用函数的校验返回值为预设的返回值,同时使得反射函数获取的反射字段的值也为预设的返回值,返回值为bool类型。
作为一种可选的实施例,利用内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数,包括:
确定调用函数Method在校验函数中的第一起始地址;利用所述内联挂钩函数在第一起始地址的头字节中配置用于进行跳转的第一jmp指令;当执行调用函数Method时,基于第一jmp指令,从原有的调用函数Method跳转至自定义调用函数,执行自定义调用函数。
一般来说,利用内联挂钩函数在第一起始地址的头字节中配置用于进行跳转的第一jmp指令时是将第一jmp指令直接占用到第一起始地址的头字节,配置的第一jmp指令可以占用调用函数中的8个字节,第一起始地址的原有的头字节可以保存在预设的内存区域中。
自定义调用函数的代码如下:
这里,在利用内联挂钩函数在第一起始地址的头字节中配置用于进行跳转的第一jmp指令之前,还包括:利用内存申请函数在校验函数对应的进程中申请第一内存,用于保存第一jmp指令及自定义调用函数。
这样的话,相当于在执行校验函数的调用函数时,会优先执行自定义的调用函数,不会再执行原有的调用函数,那么最后返回的返回值就是预设的返回值了。
同样的,利用内联挂钩函数将校验函数的反射函数Field替换成自定义反射函数,包括:确定反射函数Field在所述校验函数中的第二起始地址;利用内联挂钩函数在第二起始地址的头字节中配置用于进行跳转的第二jmp指令;当执行反射函数Field时,基于所述第二jmp指令,从原有的反射函数Field跳转至自定义反射函数,执行自定义反射函数。
一般来说利用内联挂钩函数在第二起始地址的头字节中配置用于进行跳转的第二jmp指令时是将第二jmp指令直接占用第二起始地址的头字节,配置的第二jmp指令可以占用反射函数中的8个字节,第二起始地址的原有的头字节可以保存在预设的内存区域中。其中,第一起始地址可根据调用函数的函数名称确定,第二起始地址均可根据反射函数的名称确定。
自定义反射函数的代码如下:
在利用所述内联挂钩函数在第二起始地址的头字节中配置用于进行跳转的第二jmp指令之前,还包括:利用内存申请函数在校验函数对应的进程中申请第二内存,用于保存第二jmp指令及自定义反射函数。
这样的话,相当于在执行校验函数的反射函数时,会优先执行自定义反射函数,不会再执行原有的反射函数,那么最后返回的返回值就是预设的返回值了。
另外,当执行完自定义调用函数及反射函数后,还需利用内存释放函数对申请的第一内存及第二内存进行释放。
若在执行完自定义函数后,想继续执行校验函数的其他处理逻辑,那么可以在自定义函数中的合适位置中添加预置指向指令,并通过指向指令跳转至校验函数原有的处理进程中,需要说明的是,此时的校验函数已经是hook之后的校验函数了。
对于本发明的实施例,具体的应用场景可以如下所示,但不限于此:当手机卫士需要监听浏览器的访问敏感隐私行为的进程时,就需要监听浏览器中用于访问隐私行为的API函数,获取API函数的操作数据,那么通过上述方法,手机卫士可以顺利地访问到浏览器中用于访问隐私行为的API函数,并获取到API函数的操作数据,进而可以根据预设的安全规则对这些操作数据进行分析,判断出目标进程的访问是否为恶意访问。
基于同样的发明构思,本发明还提供了一种函数调用的装置,详见实施例二。
实施例二
本实施例提供一种函数调用的装置,如图2所示,所述装置包括:获取单元21、确定单元22及修改单元23;其中,
大部分应用程序在进行正常处理逻辑时,需访问并调用系统的API函数(以下称待调用函数),那么为了保持系统的稳定性,系统本身会利用校验函数对这种调用过程进行校验,具体就是校验系统虚拟机中待调用函数对应的artmethod结构体的访问标志位,校验结束后并返回一个返回值,若返回值为false时,则会允许应用程序访问待调用函数;若返回值为true时,则终止应用程序访问待调用函数。那么获取单元21需要获取校验函数的名称,校验函数为一个封装函数,本实施例中校验函数的名称为ShouldBlockAccessToMember。
这里,系统的虚拟机为art虚拟机,art虚拟机在运行时,内部运行是通过class的类描述以及method的类方法描述而执行的。其中,每一个待调用函数都会对应一个method结构体,method结构体成员变量包括方法所在的类对象指针、方法的属性、方法在dex文件中的index,方法的机器码指针以及方法native代码的指针等。那么就可以在Native层调用待调用函数得到待调用函数的artmethod结构体,待调用函数为java函数。
获取到校验函数的名称后,确定单元22用于基于所述校验函数的名称确定所述校验函数的实际地址。
如图3所示,所述确定单元22包括:查找子单元31、第一确定子单元32、获取子单元33及第二确定子单元34;其中,
因校验函数是设置在虚拟机本地库libart.so中的,因此查找子单元31可以第一确定子单元32基于校验函数的名称,在虚拟机本地库libart.so中查找校验函数的符号名称,根据所述符号名称确定校验函数的地址。
本实施例中校验函数的符号名称为“_ZN3art9hiddenapi25ShouldBlockAccessToMemberINS_9ArtMethodEEEbPT_PNS_6ThreadENSt3__18functionIFbS6_EEENS0_12AccessMethodE",
"_ZN3art9hiddenapi25ShouldBlockAccessToMemberINS_8ArtFieldEEEbPT_PNS_6ThreadENSt3__18functionIFbS6_EEENS0_12AccessMethodE”。
然后获取子单元33利用地址获取函数获取所述虚拟机本地库libart.so的基址;第二确定子单元34根据校验函数的地址及虚拟机本地库libart.so的基址确定所述校验函数的实际地址。这里,直接将校验函数的地址与libart.so的基址进行相加可得到校验函数的实际地址。
作为一种可选的实施例,因符号表中记载有每个函数的符号名称,及对应的数据类型、作用域以及内存地址等信息,因此第一确定子单元32具体用于:
对虚拟机本地库libart.so中校验函数的文件格式进行解析,获取虚拟机本地库libart.so的符号表;在符号表中,根据校验函数的符号名称即可查找到校验函数的地址。
为了使得校验函数对所述访问标志位进行校验后,系统允许应用程序访问并调用系统API函数,获取到校验函数的实际地址后,修改单元23就可以基于所述校验函数的实际地址,利用内联挂钩函数inlinehook对所述校验函数进行修改,使得校验函数的返回值为预设的返回值,本实施例中预设的返回值为false,本实施例中预设的返回值为false。
其中,inlinehook函数对应的操作即为挂钩操作,也可称为内联挂钩inlinehook操作,针对函数的机器码进行内联hook,机器码为由art编译后的二进制码。另外,hook函数为一种钩子函数,是操作系统消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息,钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统,而inlinehook不同于通过修改函数的调用地址的普通hook,inlinehook是直接在函数的函数体内修改指令,用一个跳转指令实现挂钩的目的。
这里,因校验函数是一个模板函数,利用内联挂钩函数对校验函数进行修改时,需要将校验函数的调用函数Method及反射函数Field进行修改,这里的修改单元23具体用于:利用所述内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数以及利用内联挂钩函数将所述校验函数的反射函数Field替换成自定义反射函数,自定义调用函数及自定义反射函数统称为自定义函数。那么当执行校验函数时,使得所述调用函数的校验返回值为预设的返回值,同时使得反射函数获取的反射字段的值也为预设的返回值,返回值为bool类型。
作为一种可选的实施例,如图4所示,所述修改单元23包括:第三确定子单元41、第一配置子单元42及第一跳转子单元43;其中,
第三确定子单元41用于确定调用函数Method在校验函数中的第一起始地址;第一配置子单元42用于利用内联挂钩函数在第二起始地址的头字节中配置用于进行跳转的第一jmp指令;第一跳转子单元43用于当执行调用函数Method时,基于所述第一jmp指令,跳转至所述自定义调用函数。
一般来说,利用内联挂钩函数在第一起始地址的头字节中配置用于进行跳转的第一jmp指令时是将第一jmp指令直接占用到第一起始地址的头字节,配置的第一jmp指令可以占用调用函数中的8个字节,第一起始地址的原有的头字节可以保存在预设的内存区域中。
自定义调用函数的代码如下:
这里,所述修改单元23还包括:第一申请子单元44,在利用内联挂钩函数在第一起始地址的头字节中配置用于进行跳转的第一jmp指令之前,第一申请子单元44用于利用内存申请函数在校验函数对应的进程中申请第一内存,用于保存第一jmp指令及自定义调用函数。
这样的话,相当于在执行校验函数的调用函数时,会优先执行自定义的调用函数,不会再执行原有的调用函数,那么最后返回的返回值就是预设的返回值了。
这里,参见图4,修改单元23还包括:第四确定子单元45、第二配置子单元46及第二跳转子单元47;其中,
第四确定单元45用于确定反射函数Field在所述校验函数中的第二起始地址;第二配置子单元46用于利用内联挂钩函数在第二起始地址的头字节中配置用于进行跳转的第二jmp指令;第二跳转子单元47用于当执行反射函数Field时,基于所述第二jmp指令,从原有的反射函数Field跳转至自定义反射函数,执行自定义反射函数。
一般来说利用内联挂钩函数在第二起始地址的头字节中配置用于进行跳转的第二jmp指令时是将第二jmp指令直接占用第二起始地址的头字节,配置的第二jmp指令可以占用反射函数中的8个字节,第二起始地址的原有的头字节可以保存在预设的内存区域中。
自定义反射函数的代码如下:
这里,修改单元23还包括:第二申请子单元48,在利用所述内联挂钩函数在第二起始地址的头字节中配置用于进行跳转的第二jmp指令之前,第二申请子单元48还用于:利用内存申请函数在校验函数对应的进程中申请第二内存,用于保存第二jmp指令及自定义反射函数。
这样的话,相当于在执行校验函数的反射函数时,会优先执行自定义反射函数,不会再执行原有的反射函数,那么最后返回的返回值就是预设的返回值了。
作为一种可选的实施例,参见图2,所述装置还包括:释放单元24,当执行完自定义调用函数及反射函数后,还需利用内存释放函数对申请的第一内存及第二内存进行释放。
若在执行完自定义函数后,想继续执行校验函数的其他处理逻辑,那么可以在自定义函数中的合适位置中添加预置指向指令,并通过指向指令跳转至校验函数原有的处理进程中,需要说明的是,此时的校验函数已经是hook之后的校验函数了。
对于本发明的实施例,具体的应用场景可以如下所示,但不限于此:当手机卫士需要监听浏览器的访问敏感隐私行为的进程时,就需要监听浏览器中用于访问隐私行为的API函数,获取API函数的操作数据,那么通过上述方法,手机卫士可以顺利地访问到浏览器中用于访问隐私行为的API函数,并获取到API函数的操作数据,进而可以根据预设的安全规则对这些操作数据进行分析,判断出目标进程的访问是否为恶意访问。
本申请实施例中提供的技术方案,至少具有如下技术效果或优点:
本发明实施例提供一种函数调用的方法、装置及终端,所述方法包括:获取校验函数的名称,所述校验函数用于校验系统虚拟机中待调用函数对应的结构体的访问标志位,所述待调用函数为所述系统本身的应用程序接口API函数;基于所述校验函数的名称确定所述校验函数的实际地址;基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,使得所述校验函数对所述访问标志位进行校验后,能够允许应用程序访问并调用所述待调用函数;如此,利用内联挂钩函数对所述校验函数进行修改后,当应用程序访问并调用系统API函数时,使得校验函数对访问标志位进行校验后,能够允许应用程序调用相关的API函数,确保了应用程序的功能正常。
本发明同时还提供了一种移动终端,如图5所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该终端可以为包括手机、平板电脑、PDA(Personal Digital Assistant,个人数字助理)、POS(Point ofSales,销售终端)、车载电脑等任意终端设备,以终端为手机为例:
图5示出的是与本发明实施例提供的终端相关的手机的部分结构的框图。参考图5,手机包括:射频(Radio Frequency,RF)电路31、存储器132、输入单元33、显示单元34、传感器35、音频电路36、无线保真(wireless-fidelity,Wi-Fi)模块37、处理器38、以及电源39等部件。本领域技术人员可以理解,图3中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图5对手机的各个构成部件进行具体的介绍:
RF电路31可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器38处理;另外,将设计上行的数据发送给基站。通常,RF电路31包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(Low Noise Amplifier,LNA)、双工器等。此外,RF电路31还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(Global System ofMobile communication,GSM)、通用分组无线服务(General Packet Radio Service,GPRS)、码分多址(Code Division Multiple Access,CDMA)、宽带码分多址(Wideband CodeDivision Multiple Access,WCDMA)、长期演进(Long Term Evolution,LTE)、电子邮件、短消息服务(Short Messaging Service,SMS)等。
存储器32可用于存储软件程序以及模块,处理器38通过运行存储在存储器32的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器32可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器32可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元33可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元33可包括触控面板331以及其他输入设备332。触控面板331,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板331上或在触控面板331附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板331可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器38,并能接收处理器38发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板331。除了触控面板331,输入单元33还可以包括其他输入设备332。具体地,其他输入设备332可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元34可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元34可包括显示面板341,可选的,可以采用液晶显示器(Liquid CrystalDisplay,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板341。进一步的,触控面板331可覆盖显示面板341,当触控面板331检测到在其上或附近的触摸操作后,传送给处理器38以确定触摸事件的类型,随后处理器38根据触摸事件的类型在显示面板341上提供相应的视觉输出。虽然在图3中,触控面板331与显示面板341是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板331与显示面板341集成而实现手机的输入和输出功能。
手机还可包括至少一种传感器35,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板341的亮度,接近传感器可在手机移动到耳边时,关闭显示面板341和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路36、扬声器361,传声器362可提供用户与手机之间的音频接口。音频电路36可将接收到的音频数据转换后的电信号,传输到扬声器361,由扬声器361转换为声音信号输出;另一方面,传声器362将收集的声音信号转换为电信号,由音频电路360接收后转换为音频数据,再将音频数据输出处理器38处理后,经RF电路31以发送给比如另一手机,或者将音频数据输出至存储器32以便进一步处理。
WiFi属于短距离无线传输技术,手机通过WiFi模块37可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图3示出了WiFi模块37,但是可以理解的是,其并不属于手机的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器38是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器32内的软件程序和/或模块,以及调用存储在存储器32内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器38可包括一个或多个处理单元;优选的,处理器38可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器38中。
手机还包括给各个部件供电的电源39(比如电池),优选的,电源可以通过电源管理系统与处理器38逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,手机还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本发明实施例中,该终端所包括的处理器38还具有以下功能:获取目标进程对应的链接程序默认的命名空间,所述链接程序用于加载、链接动态链接库libc.so库中的所有函数,所述libc.so库中包括有待注入的目标功能函数;获取所述命名空间的地址;根据所述命名空间的地址查找所述命名空间的属性参数,将所述属性参数的属性值设置为预设的属性值,以能使得操作系统允许进行跨进程注入的操作;将所述目标功能函数注入所述目标进程中。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的网关、计算机设备、装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
本发明公开了,A1、一种函数调用的方法,所述方法包括:
获取校验函数的名称,所述校验函数用于校验系统虚拟机中待调用函数对应的结构体的访问标志位,所述待调用函数为所述系统本身的应用程序接口API函数;
基于所述校验函数的名称确定所述校验函数的实际地址;
基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,使得所述校验函数对所述访问标志位进行校验后,能够允许应用程序访问并调用所述待调用函数。
A2、如A1所述的方法,所述基于所述校验函数的名称确定所述校验函数的实际地址,包括:
基于所述校验函数的名称,在虚拟机本地库libart.so中查找所述校验函数的符号名称;
根据所述符号名称确定所述校验函数的虚拟地址;
获取所述虚拟机本地库libart.so的基址;
根据所述校验函数的虚拟地址及所述虚拟机本地库libart.so的基址确定所述校验函数的实际地址。
A3、如A2所述的方法,所述根据所述符号名称确定所述校验函数的虚拟地址,包括:
对所述虚拟机本地库libart.so中校验函数的文件格式进行解析,获取所述虚拟机本地库libart.so的符号表;
在所述符号表中,根据所述符号名称查找所述校验函数的虚拟地址。
A4、如A1所述的方法,所述基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,包括:
基于所述校验函数的地址,利用所述内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数;以及,
利用所述内联挂钩函数将所述校验函数的反射函数Field替换成自定义反射函数,当执行所述校验函数时,使得所述校验函数的校验返回值为预设的返回值。
A5、如A4所述的方法,所述利用所述内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数,包括:
确定所述调用函数Method在所述校验函数中的第一起始地址;
利用所述内联挂钩函数在所述第一起始地址的头字节中配置用于进行跳转的第一jmp指令;
当执行所述调用函数Method时,基于所述第一jmp指令,跳转至所述自定义调用函数。
A6、如A4所述的方法,利用所述内联挂钩函数将所述校验函数的反射函数Field替换成自定义反射函数,包括:
确定所述反射函数Field在所述校验函数中的第二起始地址;
利用所述内联挂钩函数在所述第二起始地址的头字节中配置用于进行跳转的第二jmp指令;
当执行所述反射函数Field时,基于所述第二jmp指令,跳转至所述自定义反射函数。
B7、一种函数调用的装置,所述装置包括:
获取单元,用于获取校验函数的名称,所述校验函数用于校验系统虚拟机中待调用函数对应的结构体的访问标志位,所述待调用函数为所述系统本身的应用程序接口API函数;
确定单元,用于基于所述校验函数的名称确定所述校验函数的实际地址;
修改单元,用于基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,使得所述校验函数对所述访问标志位进行校验后,能够允许应用程序访问并调用所述待调用函数。
B8、如B7所述的装置,所述确定单元包括:
查找子单元,用于基于所述校验函数的名称,在虚拟机本地库libart.so中查找所述校验函数的符号名称;
第一确定子单元,用于根据所述符号名称确定所述校验函数的虚拟地址;
获取子单元,用于获取所述虚拟机本地库libart.so的基址;
第二确定子单元,用于根据所述校验函数的虚拟地址及所述虚拟机本地库libart.so的基址确定所述校验函数的实际地址。
B9、如B8所述的装置,所述第一确定子单元具体用于:
对所述虚拟机本地库libart.so中校验函数的文件格式进行解析,获取所述虚拟机本地库libart.so的符号表;
在所述符号表中,根据所述符号名称查找所述校验函数的虚拟地址。
B10、如B7所述的装置,所述修改单元具体用于:
基于所述校验函数的地址,利用所述内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数;以及,
利用所述内联挂钩函数将所述校验函数的反射函数Field替换成自定义反射函数,当执行所述校验函数时,使得所述校验函数的校验返回值为预设的返回值。
B11、如B10所述的装置,所述修改单元包括:
第三确定子单元,用于确定所述调用函数Method在所述校验函数中的第一起始地址;
第一配置子单元,用于利用所述内联挂钩函数在所述第二起始地址的头字节中配置用于进行跳转的第一jmp指令;
第一跳转子单元,用于当执行所述调用函数Method时,基于所述第一jmp指令,跳转至所述自定义调用函数。
B12、如B10所述的装置,所述修改单元还包括:
第四确定子单元,用于确定所述反射函数Field在所述校验函数中的第二起始地址;
第二配置子单元,用于利用所述第二起始地址的头字节中配置用于进行跳转的第二jmp指令;
第二跳转子单元,用于当执行所述反射函数Field时,基于所述第二jmp指令,跳转至所述自定义反射函数。
C13、一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现A1至A6任一项所述方法的步骤。
D14、一种函数调用的终端,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中,所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如A1至A6任一项所述方法的步骤。
Claims (12)
1.一种函数调用的方法,其特征在于,所述方法包括:
获取校验函数的名称,所述校验函数用于校验系统虚拟机中待调用函数对应的结构体的访问标志位,所述待调用函数为所述系统本身的应用程序接口API函数;
基于所述校验函数的名称确定所述校验函数的实际地址;
基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,使得所述校验函数对所述访问标志位进行校验后,能够允许应用程序访问并调用所述待调用函数;
所述基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,包括:
基于所述校验函数的地址,利用所述内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数;以及,
利用所述内联挂钩函数将所述校验函数的反射函数Field替换成自定义反射函数,当执行所述校验函数时,使得所述校验函数的校验返回值为预设的返回值。
2.如权利要求1所述的方法,其特征在于,所述基于所述校验函数的名称确定所述校验函数的实际地址,包括:
基于所述校验函数的名称,在虚拟机本地库libart.so中查找所述校验函数的符号名称;
根据所述符号名称确定所述校验函数的虚拟地址;
获取所述虚拟机本地库libart.so的基址;
根据所述校验函数的虚拟地址及所述虚拟机本地库libart.so的基址确定所述校验函数的实际地址。
3.如权利要求2所述的方法,其特征在于,所述根据所述符号名称确定所述校验函数的虚拟地址,包括:
对所述虚拟机本地库libart.so中校验函数的文件格式进行解析,获取所述虚拟机本地库libart.so的符号表;
在所述符号表中,根据所述符号名称查找所述校验函数的虚拟地址。
4.如权利要求1所述的方法,其特征在于,所述利用所述内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数,包括:
确定所述调用函数Method在所述校验函数中的第一起始地址;
利用所述内联挂钩函数在所述第一起始地址的头字节中配置用于进行跳转的第一jmp指令;
当执行所述调用函数Method时,基于所述第一jmp指令,跳转至所述自定义调用函数。
5.如权利要求1所述的方法,其特征在于,利用所述内联挂钩函数将所述校验函数的反射函数Field替换成自定义反射函数,包括:
确定所述反射函数Field在所述校验函数中的第二起始地址;
利用所述内联挂钩函数在所述第二起始地址的头字节中配置用于进行跳转的第二jmp指令;
当执行所述反射函数Field时,基于所述第二jmp指令,跳转至所述自定义反射函数。
6.一种函数调用的装置,其特征在于,所述装置包括:
获取单元,用于获取校验函数的名称,所述校验函数用于校验系统虚拟机中待调用函数对应的结构体的访问标志位,所述待调用函数为所述系统本身的应用程序接口API函数;
确定单元,用于基于所述校验函数的名称确定所述校验函数的实际地址;
修改单元,用于基于所述校验函数的实际地址,利用内联挂钩函数对所述校验函数进行修改,使得所述校验函数对所述访问标志位进行校验后,能够允许应用程序访问并调用所述待调用函数;
所述修改单元具体用于:
基于所述校验函数的地址,利用所述内联挂钩函数将所述校验函数的调用函数Method替换成自定义调用函数;以及,
利用所述内联挂钩函数将所述校验函数的反射函数Field替换成自定义反射函数,当执行所述校验函数时,使得所述校验函数的校验返回值为预设的返回值。
7.如权利要求6所述的装置,其特征在于,所述确定单元包括:
查找子单元,用于基于所述校验函数的名称,在虚拟机本地库libart.so中查找所述校验函数的符号名称;
第一确定子单元,用于根据所述符号名称确定所述校验函数的虚拟地址;
获取子单元,用于获取所述虚拟机本地库libart.so的基址;
第二确定子单元,用于根据所述校验函数的虚拟地址及所述虚拟机本地库libart.so的基址确定所述校验函数的实际地址。
8.如权利要求7所述的装置,其特征在于,所述第一确定子单元具体用于:
对所述虚拟机本地库libart.so中校验函数的文件格式进行解析,获取所述虚拟机本地库libart.so的符号表;
在所述符号表中,根据所述符号名称查找所述校验函数的虚拟地址。
9.如权利要求6所述的装置,其特征在于,所述修改单元包括:
第三确定子单元,用于确定所述调用函数Method在所述校验函数中的第一起始地址;
第一配置子单元,用于利用所述内联挂钩函数在所述第一起始地址的头字节中配置用于进行跳转的第一jmp指令;
第一跳转子单元,用于当执行所述调用函数Method时,基于所述第一jmp指令,跳转至所述自定义调用函数。
10.如权利要求6所述的装置,其特征在于,所述修改单元还包括:
第四确定子单元,用于确定所述反射函数Field在所述校验函数中的第二起始地址;
第二配置子单元,用于利用所述第二起始地址的头字节中配置用于进行跳转的第二jmp指令;
第二跳转子单元,用于当执行所述反射函数Field时,基于所述第二jmp指令,跳转至所述自定义反射函数。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至5任一项所述方法的步骤。
12.一种函数调用的终端,其特征在于,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中,所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至5任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810575335.4A CN108920220B (zh) | 2018-06-06 | 2018-06-06 | 一种函数调用的方法、装置及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810575335.4A CN108920220B (zh) | 2018-06-06 | 2018-06-06 | 一种函数调用的方法、装置及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108920220A CN108920220A (zh) | 2018-11-30 |
CN108920220B true CN108920220B (zh) | 2021-11-30 |
Family
ID=64411176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810575335.4A Expired - Fee Related CN108920220B (zh) | 2018-06-06 | 2018-06-06 | 一种函数调用的方法、装置及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108920220B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109886034A (zh) * | 2019-02-27 | 2019-06-14 | 北京智游网安科技有限公司 | 一种apk数据加密处理方法、智能终端及存储介质 |
CN110992607A (zh) * | 2019-11-22 | 2020-04-10 | 福建新大陆支付技术有限公司 | 一种通过接口协议方式接入终端的方法 |
CN111274554B (zh) * | 2020-02-10 | 2023-03-21 | 广州虎牙科技有限公司 | 小程序的api调用方法、装置、设备和介质 |
CN111506301B (zh) * | 2020-04-24 | 2022-11-11 | 同盾(广州)科技有限公司 | 绕过系统限制反射调用的方法及相关设备 |
CN113535566B (zh) * | 2021-07-20 | 2024-06-21 | 广州虎牙科技有限公司 | 一种安卓应用校验方法、装置、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102779030A (zh) * | 2011-05-11 | 2012-11-14 | 奇智软件(北京)有限公司 | 一种注册表操作的执行方法及装置 |
CN105354143A (zh) * | 2015-12-02 | 2016-02-24 | 北京奇虎科技有限公司 | 一种用于应用程序的测试方法及装置 |
CN105574411A (zh) * | 2015-12-25 | 2016-05-11 | 北京奇虎科技有限公司 | 一种动态脱壳方法、装置和设备 |
KR20160069280A (ko) * | 2014-12-08 | 2016-06-16 | 주식회사 탑코믹스 | 웹 컨텐츠로의 불법 접근 차단 장치 및 방법 |
CN106547580A (zh) * | 2015-09-22 | 2017-03-29 | 腾讯科技(深圳)有限公司 | 挂钩函数的方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216760A (zh) * | 2007-12-28 | 2008-07-09 | 北京方正国际软件系统有限公司 | 一种动态映射接口调用系统及方法 |
US9602514B2 (en) * | 2014-06-16 | 2017-03-21 | Box, Inc. | Enterprise mobility management and verification of a managed application by a content provider |
-
2018
- 2018-06-06 CN CN201810575335.4A patent/CN108920220B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102779030A (zh) * | 2011-05-11 | 2012-11-14 | 奇智软件(北京)有限公司 | 一种注册表操作的执行方法及装置 |
KR20160069280A (ko) * | 2014-12-08 | 2016-06-16 | 주식회사 탑코믹스 | 웹 컨텐츠로의 불법 접근 차단 장치 및 방법 |
CN106547580A (zh) * | 2015-09-22 | 2017-03-29 | 腾讯科技(深圳)有限公司 | 挂钩函数的方法和装置 |
CN105354143A (zh) * | 2015-12-02 | 2016-02-24 | 北京奇虎科技有限公司 | 一种用于应用程序的测试方法及装置 |
CN105574411A (zh) * | 2015-12-25 | 2016-05-11 | 北京奇虎科技有限公司 | 一种动态脱壳方法、装置和设备 |
Non-Patent Citations (3)
Title |
---|
Hook技术之API拦截(API Hook);bobopeng;《https://blog.csdn.net/junbopengpeng/article/details/28142669》;20140622;第1-7页 * |
How to see what hidden APIs apps are using in Android P;CommentKyle Wiggers;《https://www.xda-developers.com/logcat-android-p-hidden-apis/》;20180327;1-14 * |
如何绕过Android P非公开API限制;Benz;《http://imgtec.eetrend.com/d6-imgtec/blog/2018-04/11501.html》;20180418;第1-3页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108920220A (zh) | 2018-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108920220B (zh) | 一种函数调用的方法、装置及终端 | |
CN108415739B (zh) | 一种动态链接库函数的钩挂方法、装置和存储介质 | |
US9584476B2 (en) | Safety protection method, firewall, terminal device and computer-readable storage medium | |
CN107329985B (zh) | 一种页面的收藏方法、装置和移动终端 | |
CN107908952B (zh) | 识别真机和模拟器的方法、装置和终端 | |
CN111142930B (zh) | 安装包文件打包方法、装置、终端设备及存储介质 | |
CN108595218B (zh) | 一种加载系统动态库的方法和装置 | |
CN103365419B (zh) | 一种触发闹钟控制指令的方法和装置 | |
US20150169874A1 (en) | Method, device, and system for identifying script virus | |
CN104965722B (zh) | 一种显示信息的方法及装置 | |
US11063962B2 (en) | Malicious URL detection method and apparatus, terminal, and computer storage medium | |
CN110046497B (zh) | 一种函数挂钩实现方法、装置和存储介质 | |
CN106959859B (zh) | 系统调用函数的调用方法与装置 | |
CN111966491B (zh) | 统计占用内存的方法及终端设备 | |
CN107153792B (zh) | 一种数据安全处理方法、装置及移动终端 | |
CN108897533A (zh) | 一种函数调用的方法、装置及终端 | |
EP2869604B1 (en) | Method, apparatus and device for processing a mobile terminal resource | |
CN106933636B (zh) | 启动插件服务的方法、装置和终端设备 | |
CN107357651B (zh) | 应用加速方法、装置以及终端 | |
CN109145598B (zh) | 脚本文件的病毒检测方法、装置、终端及存储介质 | |
CN112825041A (zh) | 一种内存隔离的装置、内存隔离方法和相关设备 | |
CN111562910B (zh) | 一种封装方法及相关设备 | |
CN105278942B (zh) | 组件管理方法及装置 | |
CN106708555A (zh) | 一种加载插件的方法和装置 | |
CN106681884A (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20211130 |